如何根据资源所在的环境动态命名资源?
How to name resources dynamically based on the env they are in?
我正在尝试根据环境(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
}
命名函数以名称为输入,根据环境命名。因此,如果此资源是在 dev 下创建的,那么 naming_function(woof)
应该 return 字符串“woof_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 作为名称的一部分被认为是最佳做法。
我正在尝试根据环境(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
}
命名函数以名称为输入,根据环境命名。因此,如果此资源是在 dev 下创建的,那么 naming_function(woof)
应该 return 字符串“woof_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 作为名称的一部分被认为是最佳做法。