#terraform #hcl
#terraform #hcl
Вопрос:
Я пытаюсь унифицировать именование ресурсов в зависимости от среды (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)
должна быть возвращена строка «woof_dev»
Итак, мои вопросы:
- Как я могу называть вещи динамически?
- Правильно ли использовать соглашение об именовании, включающее среду, такую как meow_{env_name}?
Ответ №1:
Создайте terraform.tfvars
внутри meow-development
папки с
env_name = "dev"
Внутри папки main.tf
meow-development
:
resource "aws_iam_user" "iam_foo" {
name = "foo_${var.env_name}"
}
То же самое для других сред. Что касается соглашения об именовании, зависит от ресурса, использование env как части имени считается наилучшей практикой.