Справочные переменные из другого плана Terraform - PullRequest
0 голосов
/ 22 марта 2019

Я создал настройку с архитектурой веб-сайтов основного и аварийного восстановления в AWS с использованием Terraform.

Основной веб-сайт находится в регионе 1, а аварийное восстановление - в регионе 2.Этот скрипт создается как разные планы или разные каталоги.

Для региона 1 я создал один каталог, который содержит только сценарий Terraform основного веб-сайта для запуска инфраструктуры основного сайта.

Для региона 2 я создалдругой каталог, который содержит только веб-сайт аварийного восстановления. Сценарий Terraform для запуска инфраструктуры веб-сайта аварийного восстановления.

В моем сценарии основного веб-сайта мне нужны некоторые значения веб-сайта аварийного восстановления, такие как идентификатор пирингового соединения VPC, ARN конечной точки DMS.и т.д.

Как я могу связать эти переменные из каталога сайта аварийного восстановления с каталогом основного сайта?

1 Ответ

2 голосов
/ 22 марта 2019

Один из вариантов - использовать источник данных terraform_remote_state для извлечения выходных данных из другого файла состояния, например:

VPC / main.tf

resource "aws_vpc" "foo" {
  cidr_block = "10.0.0.0/16"
}

output "vpc_id" {
  value = "${aws_vpc.foo.id}"
}

Маршрут / main.tf

data "terraform_remote_state" "vpc" {
  backend = "s3"
  config {
    bucket = "mybucket"
    key    = "path/to/my/key"
    region = "us-east-1"
  }
}

resource "aws_route_table" "rt" {
  vpc_id = "${data.terraform_remote_state.vpc.vpc_id}"
}

Однако почти всегда лучше просто использовать собственные источники данных поставщика, если они существуют для нужного вам ресурса.

Так что в вашем случае вам нужно будет использовать источники данных, такие как aws_vpc_peering_connection источник данных, чтобы иметь возможность устанавливать кросс-маршрутизацию VPC с помощью чего-то вроде этого:

data "aws_vpc_peering_connection" "pc" {
  vpc_id          = "${data.aws_vpc.foo.id}"
  peer_cidr_block = "10.0.0.0/16"
}

resource "aws_route_table" "rt" {
  vpc_id = "${aws_vpc.foo.id}"
}

resource "aws_route" "r" {
  route_table_id            = "${aws_route_table.rt.id}"
  destination_cidr_block    = "${data.aws_vpc_peering_connection.pc.peer_cidr_block}"
  vpc_peering_connection_id = "${data.aws_vpc_peering_connection.pc.id}"
}

Вам нужно будет сделать аналогичные вещи для любых других идентификаторов или вещей, на которые вы должны ссылаться в вашем регионе DR.

Стоит отметить, что нет никаких источников данных для ресурсов DMS, поэтому вам нужно либо использовать источник данных terraform_remote_state для получения любых идентификаторов (таких как ARN источника и целевой конечной точки для настройки aws_dms_replication_task или вы могли бы структурировать вещи так, чтобы все вещи DMS происходили в области DR, и тогда вам нужно только сослаться на VPC ID , имен базы данных и потенциально идентификаторы ключей KMS , что можно сделать из источников данных.

...