【问题标题】:How should global resources be declared in Terragrunt?在 Terragrunt 中应该如何声明全局资源?
【发布时间】:2020-03-17 20:53:57
【问题描述】:

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

/modules
/environments
  /development
  /staging
  /production

注册表并不真正适合任何这些环境,因为它是共享的。是否有一种“最佳实践”方式来创建一次性全局资源,例如容器注册表?我想不出一种我喜欢但又不会觉得不对劲的方式。

【问题讨论】:

    标签: terraform terragrunt


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,示例 repo 很好地记录了这一点。那里的代码似乎没有展示这种确切的场景,但重要的概念是将全局资源放在适当的区域或环境特定资源旁边。
    【解决方案2】:

    不是 Azure 特定的,但已经经历了类似的练习,我假设存在与您的帐户相关联的全局对象,而不是环境。在 AWS 中就是这种情况,有 VPC、实例等,尽管 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
    
    

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

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      相关资源
      最近更新 更多