1

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

假设我想创建一个 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} 之类的环境的命名约定是否正确?
4

1 回答 1

2

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

env_name = "dev"

在文件夹main.tf里面:meow-development

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

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

于 2020-10-30T17:22:37.190 回答