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

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

我正试图根据环境(dev、stage或prod)统一资源的命名。我将举例说明

假设我想创建一个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
}
因此,我试图实现的目标是:

├── 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{env_name})的命名约定是否正确

  • meow development
    文件夹中创建一个
    terraform.tfvars
    ,使用

    env_name = "dev"
    
    meow development
    文件夹内的
    main.tf
    中:

    resource "aws_iam_user" "iam_foo" {
      name = "foo_${var.env_name}"
    }
    
    其他环境也是如此。关于命名约定,取决于资源,将env作为名称的一部分被认为是最佳实践