一种选择是使用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,这些都可以通过数据源完成。