Terraform 如何根据资源所在的环境动态命名资源?
我正试图根据环境(dev、stage或prod)统一资源的命名。我将举例说明 假设我想创建一个aws iam用户资源,如:Terraform 如何根据资源所在的环境动态命名资源?,terraform,hcl,Terraform,Hcl,我正试图根据环境(dev、stage或prod)统一资源的命名。我将举例说明 假设我想创建一个aws iam用户资源,如: resource "aws_iam_user" "iam_foo" { name = "foo_dev" } 在这里,我将“dev”硬编码到资源的名称中。但理想情况下,我希望根据它所在的文件夹(类似于dev或prod这样的环境)动态地完成这项工作 文件夹结构类似于: ├── README.md ├── meo
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
}
因此,我试图实现的目标是:
├── 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
}
命名函数将名称作为输入,并根据env对其进行命名。因此,如果这个资源是在dev下创建的,那么命名函数(woof)
应该返回字符串“woof\u dev”
因此,我的问题是:
在
meow development
文件夹中创建一个terraform.tfvars
,使用
env_name = "dev"
在meow development
文件夹内的main.tf
中:
resource "aws_iam_user" "iam_foo" {
name = "foo_${var.env_name}"
}
其他环境也是如此。关于命名约定,取决于资源,将env作为名称的一部分被认为是最佳实践