После того, как я много прочитал о Terraform и поигрался с ним в небольших проектах, я хотел бы начать использовать его в реальной производственной среде.
Поскольку среда в основном находится в AWS, я бы выбрал серверную часть S3, но я готов изменить это.
Я хотел бы иметь отдельные проекты (состояния) Terraform для каждого уровня инфраструктуры. Очевидно, что верхние слои должны иметь доступ к выводам нижних слоев. Я могу использовать Terraform удаленное государство источник данных для получения этих данных.
Я видел разные настройки в Интернете.
|–globals
|–modules
|-infrastucture1
| |-layer1
| | |-layer2
|–globals
|–modules
|-infrastucture1
| |-layer1
| |-layer2
У всего вышеперечисленного есть отдельный репозиторий git.
>What would be the recommended code organisation for this?
Во-первых, позвольте мне сказать, что общего правила нет, но оно зависит от ваших потребностей. Однако я бы посоветовал не использовать отдельный репозиторий git для каждого модуля, так как это приведет к большому количеству дублирования и не будет иметь внутренней ценности.
Вторая установка, которую вы указали, похоже, используется в большинстве мест, где я работал, а также распространена во многих репозиториях.
Вот образец из блога Gruntwork, в котором используется аналогичная организация. https://www.gruntwork.io/infrastructure-as-code-library/v0.17.1/module-ecs
Вот образец из довольно известного репо на github https://github.com/airbnb/streamalert/tree/master/terraform
>What access rights do I have to add to the lower layers' S3 buckets to keep their >state safe, but still allow Terraform remote state to access it?
Я не очень понимаю, в каком смысле вы хотите сохранить свое состояние «безопасным». Но поскольку вы упоминаете о праве доступа к ведру s3, я, как и Amazon, посоветую фактически включить управление версиями и удаление MFA.
Следующая ссылка включает в себя все лучшие практики Amazon по обеспечению безопасности корзины s3. https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html
Эта ссылка - руководство по разрешениям корзины s3 https://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example1.html
Если вы хотите, вы также можете использовать подписанные URL-адреса для своего бэкэнда, хотя я считаю, что это не тот способ работы с terraform.