-1

我使用 Terraform 在 AWS 中创建了一个包含主要和灾难恢复网站架构的设置。

主站在region1,容灾在region2。该脚本被创建为不同的计划或不同的目录。

对于 region1,我创建了一个目录,其中仅包含主网站 Terraform 脚本来启动主网站基础设施。

对于 region2,我创建了另一个目录,其中仅包含灾难恢复网站 Terraform 脚本来启动灾难恢复网站基础架构。

在我的主网站脚本中,我需要一些灾难恢复网站的值,例如 VPC 对等连接 ID、DMS 端点 ARN 等。

如何将这些变量从灾难恢复网站目录引用到主网站目录?

4

1 回答 1

2

一种选择是使用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}"
}

您需要对任何其他 ID 或您需要在 DR 区域中引用的事物执行类似的操作。

值得注意的是,DMS 资源没有任何数据源,因此您需要使用数据terraform_remote_state源来获取任何 ID(例如源和目标端点 ARN 来设置aws_dms_replication_task事情发生在 DR 区域,然后您只需要参考其他区域的VPC ID数据库名称和可能的KMS 密钥 ID,这些都可以通过数据源完成。

于 2019-03-22T08:52:55.000 回答