Как динамически называть ресурсы в зависимости от того, в какой среде они находятся?

Я пытаюсь унифицировать именование ресурсов в зависимости от среды (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
}

Функция именования принимает имя в качестве входных данных и называет его в соответствии с env. Поэтому, если этот ресурс создается в dev, то naming_function(woof) должен вернуть строку woof_dev

Итак, мои вопросы:

  1. Как я могу динамически называть вещи?
  2. Правильно ли используется соглашение об именах, включающее такую ​​среду, как meow_ {env_name}?

person alt-f4    schedule 30.10.2020    source источник


Ответы (1)


Создайте terraform.tfvars внутри папки meow-development с

env_name = "dev"

В main.tf внутри папки meow-development:

resource "aws_iam_user" "iam_foo" {
  name = "foo_${var.env_name}"
}

То же самое для других сред. Что касается соглашения об именах, зависит от ресурса, использование env как части имени считается лучшей практикой.

person Rajesh Gupta    schedule 30.10.2020