Terraform terraform_remote_state Частичная конфигурация

Моя команда сильно полагается на удаленное состояние S3 из Terraform. Мы используем функцию -backend-config интерфейса командной строки, чтобы указать конфигурацию S3 при инициализации проектов, поэтому наш фактический код терраформирования выглядит так:

terraform {
  backend "s3" {}
}

Вышеупомянутое отлично работает до тех пор, пока все атрибуты S3 указаны в CLI с -backend-config.

Мы хотели бы использовать аналогичную стратегию для ссылки на эти состояния в другом месте наших конфигураций. Поскольку параметры для серверной части являются динамическими и указываются в интерфейсе командной строки, мы стремимся сделать то же самое.

data "terraform_remote_state" "dns" {
  backend = "s3"
  config {
    key = "configurations/production/dns/terraform.tfstate"
  }
}

В приведенном выше примере мы пропустили обязательные параметры region и bucket, что, конечно же, приводит к сбою плана / применения (с not a valid region:).

Есть ли метод, с помощью которого мы можем указать регион и сегмент для ссылок на удаленное состояние из интерфейса командной строки вместо их жесткого кодирования?


person Tanaki    schedule 14.08.2017    source источник
comment
Как вы указываете атрибуты S3 для конфигурации серверной части? Вы вызываете Terraform через вспомогательный скрипт?   -  person ydaetskcoR    schedule 15.08.2017


Ответы (1)


Блок backend довольно особенный, потому что он обрабатывается так рано в рабочем процессе Terraform, и поэтому у него нет доступа к обычным функциям Terraform, таким как переменные. Поэтому у него есть свой специальный механизм для его настройки.

С другой стороны, источник данных terraform_remote_state - это просто обычный источник данных, поэтому с ним можно использовать любую обычную стратегию интерполяции. Например, чтобы передать настройки из интерфейса командной строки, вы можете использовать переменные:

variable "dns_state_region" {
}

variable "dns_state_key" {
}

data "terraform_remote_state" "dns" {
  backend = "s3"
  config {
    region = "${var.dns_state_region}"
    key    = "${var.dns_state_key}"
  }
}

Затем вы можете передать их команде terraform plan:

$ terraform plan \
    -var="dns_state_region=us-west-1" \
    -var="dns_state_key=configurations/production/dns/terraform.tfstate"
person Martin Atkins    schedule 15.08.2017