Частичный удаленный бэкэнд Terraform не может содержать интерполяции?
Я пытаюсь настроить рабочее пространство Terraform Enterprise в Jenkins на лету. Для этого мне нужно иметь возможность динамически устанавливать имя удаленной рабочей области в моем main.tf. Как это:
# Using a single workspace:
terraform {
backend "remote" {
hostname = "app.xxx.xxx.com"
organization = "YYYY"
# new workspace variable
workspaces {
name = "${var.workspace_name}"
}
}
}
Теперь, когда я бегу:
terraform init -backend-config="workspace_name=testtest"
Я получил:
Error loading backend config: 1 error(s) occurred:
* terraform.backend: configuration cannot contain interpolations
The backend configuration is loaded by Terraform extremely early, before
the core of Terraform can be initialized. This is necessary because the backend
dictates the behavior of that core. The core is what handles interpolation
processing. Because of this, interpolations cannot be used in backend
configuration.
If you'd like to parameterize backend configuration, we recommend using
partial configuration with the "-backend-config" flag to "terraform init".
Возможно ли то, что я хочу сделать с помощью terraform?
2 ответа
Вы не можете поставить какие-либо переменные "${var.workspace_name}"
или интерполяции в Backend Remote State Store. Тем не менее, вы можете создать файл рядом со своими значениями Backend, это может выглядеть так в main.tf
файл:
# Terraform backend State-Sotre
terraform {
backend "s3" {}
}
и в dev.backend.tfvars
например:
bucket = "BUCKET_NAME"
encrypt = true
key = "BUCKET_KEY"
dynamodb_table = "DYNAMODB_NAME"
region = "AWS_REGION"
role_arn = "IAM_ROLE_ARN"
Вы также можете использовать частичную настройку для s3 Backend. Надеюсь, это поможет.
Эй, я нашел правильный способ сделать это:
Хотя синтаксис немного сложнее, удаленный бэкэнд поддерживает частичную инициализацию бэкэнда. Это означает, что конфигурация может содержать внутренний блок, например:
terraform {
backend "remote" { }
}
Затем Terraform может быть инициализирован с помощью динамически устанавливаемой конфигурации бэкэнда, подобной этой (замена ORG и WORKSPACE соответствующими значениями):
terraform init -backend-config "organization=ORG" -backend-config 'workspaces=[{name="WORKSPACE"}]'