Как следует декларировать глобальные ресурсы в Terragrunt?

Мне нужно создать единый реестр контейнеров Azure. Я использую Terragrunt для управления несколькими средами в Azure. Мой упрощенный макет выглядит примерно так:

/modules
/environments
  /development
  /staging
  /production

Реестр не подходит ни для одной из этих сред, поскольку он является общим. Есть ли «передовой» способ создания разовых глобальных ресурсов, таких как реестр контейнеров? Я не мог придумать способ, который мне нравился бы, чтобы не было ошибкой.


person kenchilada    schedule 21.11.2019    source источник


Ответы (2)


Вы можете создать структуру каталогов, подобную следующей:

account
├── _global
│   └── acr
├── dev
├── prod
└── stage

Для каждой учетной записи / подписки Azure создайте каталог верхнего уровня account. В этом каталоге на верхнем уровне создайте папку _global для ресурсов, глобальных для этой учетной записи. Также создайте подкаталоги для каждой среды.

пример репозитория Gruntwork является хорошим ориентиром.

person Ben Whaley    schedule 29.01.2020
comment
Спасибо, этот пример репо очень хорошо документирует это. Кажется, что код там не демонстрирует этот точный сценарий, но важная концепция заключается в размещении глобальных ресурсов рядом с ресурсами, специфичными для региона или среды, где это необходимо. - person kenchilada; 05.02.2020

Не специфично для Azure, но, пройдя аналогичное упражнение, я предполагаю, что есть глобальные объекты, связанные с вашей учетной записью, а не со средой. Так обстоит дело в AWS с VPC, экземплярами и т. Д., Хотя такие элементы, как IAM (пользователь, роль, управление политикой ролей), принадлежат учетной записи, поэтому после небольшого следа и ошибки я придумал следующее в том же корне, что и dev, staging и prod .... есть суб-репозитории global, в основном для уменьшения объема изменений.

Все dev, stage, prod используют глобальный каталог через terraform_remote_state, на самом деле dependency, поскольку я использую terragrunt, но его аналог.

HTH

tree global
global
├── cloud_watch_alarm.tf
├── dynamo_db
│   └── terragrunt.hcl
├── iam
│   ├── iam_groups.tf
│   ├── iam_instance_profile.tf
│   ├── iam_policies.tf
│   ├── iam_policy_attachment.tf
│   ├── iam_role_policies.tf
│   ├── iam_roles.tf
│   ├── iam_user_group_membership.tf
│   ├── iam_users.tf
│   ├── main.tf
│   ├── provider.tf
│   ├── terragrunt.hcl
│   └── variables.tf
├── main.tf
├── s3
│   ├── main.tf
│   ├── provider.tf
│   ├── s3-ohio.tf
│   ├── s3.tf
│   └── terragrunt.hcl
├── sns_topic_subscription.tf
├── sns_topic.tf
├── sqs.tf
├── terragrunt.hcl
└── variables.tf

РЕДАКТИРОВАТЬ: Увы, я не могу сказать, что моя практика лучше всего, я задал тот же вопрос и получил аналогичный ответ

person ekydfejj    schedule 20.01.2020