我正在尝试根据环境(开发,阶段或产品)统一资源命名。我将举例说明。
假设我要创建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”
所以我的问题是:
答案 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作为名称的一部分被认为是最佳做法。