【问题标题】:How to name resources dynamically based on the env they are in?如何根据资源所在的环境动态命名资源?
【发布时间】:2021-02-13 00:49:11
【问题描述】:

我正在尝试根据环境(开发、阶段或产品)统一资源的命名。我将举例说明。

假设我想创建一个 aws iam 用户资源,例如:

resource "aws_iam_user" "iam_foo" {
  name = "foo_dev"
}

在这里,我将“dev”硬编码到资源名称中。但理想情况下,我希望根据它所在的文件夹动态完成此操作(文件夹类似于 dev 或 prod 等环境)。

文件夹结构类似于:

├── README.md
├── meow-development
│   ├── locals.tf -> ../locals.tf
│   ├── main.tf
│   └── s3.tf
├── meow-production
│   ├── locals.tf -> ../locals.tf
│   ├── main.tf
│   └── s3.tf
├── meow-staging
│   ├── locals.tf -> ../locals.tf
│   ├── main.tf
│   └── s3.tf

所以我想要达到的目标是:

resource "aws_iam_user" "iam_foo" {
  name = naming_function(name) # Not intended as actual code
}

命名函数将名称作为输入并根据环境对其进行命名。所以如果这个资源是在dev下创建的,那么naming_function(woof)应该返回字符串“woof_dev”

所以我的问题是:

  1. 如何动态命名事物?
  2. 是否使用包含环境(例如 meow_{env_name})的命名约定正确?

【问题讨论】:

    标签: terraform hcl


    【解决方案1】:

    meow-development 文件夹内创建一个terraform.tfvars

    env_name = "dev"
    

    meow-development 文件夹内的main.tf 中:

    resource "aws_iam_user" "iam_foo" {
      name = "foo_${var.env_name}"
    }
    

    其他环境也一样。关于命名约定,取决于资源,将 env 作为名称的一部分被认为是最佳实践。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多