Использование переменных в бэкэнде terraform «s3»

#terraform #terraform-provider-aws

Вопрос:

Я написал ниже конфигурацию серверной части в terraform:

 terraform { 
  backend "s3" {
      bucket     = "${var.application_name}"
      region     = "${var.AWS_REGION}"
      key        = "tf-scripts/${var.application_name}-tfstate"
     }
 }
 

при запуске terraform init я получаю сообщение об ошибке ниже:

     terraform init
Initializing the backend...
╷
│ Error: Variables not allowed
│ 
│   on backend.tf line 4, in terraform:
│    4:       bucket     = "${var.application_name}"
│ 
│ Variables may not be used here.
╵

╷
│ Error: Variables not allowed
│ 
│   on backend.tf line 5, in terraform:
│    5:       region     = "${var.AWS_REGION}"
│ 
│ Variables may not be used here.
╵

╷
│ Error: Variables not allowed
│ 
│   on backend.tf line 6, in terraform:
│    6:       key        = "tf-scripts/${var.application_name}-tfstate"
│ 
│ Variables may not be used here.
 

Может ли кто-нибудь помочь мне в достижении того же самого?

Комментарии:

1. Вы не можете использовать переменные в этом месте. Конфигурация должна быть постоянной. Если вы хотите динамически настроить серверную часть, вам нужно написать сценарий-оболочку или предоставить конфигурацию серверной части с помощью аргументов terraform.io/docs/language/settings/backends/…

2. террагрант-это хороший проект, который по сути является оболочкой для терраформирования конфигураций. Вот ссылка на их страницу быстрого запуска: terragrunt.gruntwork.io/docs/getting-started/quick-start Они также упоминают бэкэнды.

3. Здесь мы создаем стек AWS с использованием terraform, где также создается s3, я хочу сохранить конкретное состояние стека tf в корзине s3 того же стека. Любое решение для этого будет оценено по достоинству.

4. Вам просто нужно изменить имя ключа. Если вам нужны разные ресурсы в одном файле состояния, они должны быть частью одного и того же развертывания.

5. Мы можем управлять всеми состояниями в одном бэкэнде s3, но хотим, чтобы ключи создавались только динамически, вероятно, на основе значений временных меток. Я попытался использовать метку времени (), но все равно получил сообщение об ошибке, в котором говорится, что вызовы функций здесь не разрешены. Есть какие-нибудь предположения?