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

时间:2019-11-21 20:22:38

标签: terraform terragrunt

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

/modules
/environments
  /development
  /staging
  /production

由于注册表是共享的,因此它实际上并不适合任何这些环境。是否存在创建一次性全局资源(例如容器注册表)的“最佳实践”方法?我无法想出一种我喜欢的方式,那就没错。

2 个答案:

答案 0 :(得分:1)

不是特定于Azure的,但是经过了类似的练习,我假设存在与您的帐户关联的全局对象,而不是与环境关联的全局对象。在具有VPC,实例等的AWS中就是这种情况,尽管IAM(用户,角色,角色策略管理)之类的项目归账户所有,所以经过一番摸索和错误之后,我想出了以下内容dev,staging和prod...。有一些global子存储库,主要用于保持变更范围。

所有开发,阶段和产品都通过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

编辑:A,我不能说我的练习是最好的,我问了同样的问题,得到了相似的答案

答案 1 :(得分:1)

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

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

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

Gruntwork的example repo是很好的参考。