Terraform выводит «Ошибка: переменные не разрешены» при выполнении плана - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть переменная, объявленная в моем variables.tf, например:

variable "MyAmi" {
  type = map(string)
}

, но когда я делаю:

terraform plan -var 'MyAmi=xxxx'

, я получаю:

Error: Variables not allowed

  on <value for var.MyAmi> line 1:
  (source code not available)

Variables may not be used here.

Пример минимального кода:

test.tf

provider "aws" {
}

# S3
module "my-s3" {
  source = "terraform-aws-modules/s3-bucket/aws"

  bucket = "${var.MyAmi}-bucket"
}

variables.tf

variable "MyAmi" {
  type = map(string)
}

terraform plan -var 'MyAmi=test'

Error: Variables not allowed

  on <value for var.MyAmi> line 1:
  (source code not available)

Variables may not be used here.

Есть предложения?

1 Ответ

1 голос
/ 05 ноября 2019

Я вижу две вещи, которые могут быть причиной ошибки, которую вы видите. Ссылка на terraform plan документацию .

  1. При запуске terraform plan он автоматически загрузит любые файлы .tfvars в текущем каталоге. Если ваш файл .tfvars находится в другом каталоге, вы должны предоставить его как параметр -var-file. В своем вопросе вы говорите, что ваши переменные находятся в файле variables.tf, что означает, что команда terraform plan не будет автоматически загружать этот файл. ИСПРАВЛЕНИЕ: переименуйте variables.tf в variables.tfvars

  2. При использовании параметра -var вы должны убедиться, что то, что вы передаете в него, будет правильно интерпретировано HCL. Если переменная, которую вы пытаетесь передать, является картой, то она должна обрабатываться как карта.

Вместо terraform plan -var 'MyAmi=xxxx' Я бы ожидал что-то более похожее на terraform plan -var 'MyAmi={"us-east-1":"ami-123", "us-east-2":"ami-456"}'.

См. Эту документацию для получения дополнительной информации об объявлении переменных и конкретной передаче их через командную строку.

...