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 是一个很好的参考。
我需要创建一个 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 是一个很好的参考。