如何根据资源所在的环境动态命名资源?

时间:2020-10-30 14:33:38

标签: terraform hcl

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

假设我要创建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}之类的环境?

1 个答案:

答案 0 :(得分:2)

使用{p>在terraform.tfvars文件夹中创建一个meow-development

env_name = "dev"

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

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

与其他环境相同。关于命名约定,取决于资源,将env作为名称的一部分被认为是最佳做法。

相关问题