Terragrunt 中应该如何声明全局资源?

How should global resources be declared in Terragrunt?

我需要创建一个 Azure 容器注册表。我正在使用 Terragrunt 来管理 Azure 中的多个环境。我的简化布局看起来与此类似:

/modules
/environments
  /development
  /staging
  /production

注册表不适合任何这些环境,因为它是共享的。是否有 "best practices" 方法来创建容器注册表等一次性全局资源?我想不出一个我喜欢又不会感觉不对的方法。

不是特定于 Azure,但已经进行了类似的练习,我假设存在与您的帐户相关联的全局对象,而不是与环境相关联的对象。在具有 VPC、实例等的 AWS 中就是这种情况,尽管像 IAM(用户、角色、角色策略管理)这样的项目是由帐户拥有的,所以在经过一些尝试和错误之后,我在同一个根目录下提出了以下内容dev, staging, and 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

编辑:唉,我不能说我的做法是最好的,我问了同样的问题并得到了相似的答案

您可以创建类似于以下的目录结构:

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

对于您拥有的每个 Azure account/subscription,创建一个顶级 account 目录。在该目录的顶层,为该帐户的全局资源设置一个 _global 文件夹。还为每个环境创建子目录。

Gruntwork 的 example repo 是一个很好的参考。