我已经使用Terraform在AWS中创建了具有主要和灾难恢复网站架构的设置。
主网站位于Region1中,灾难恢复位于Region2中。该脚本创建为不同的计划或不同的目录。
对于region1,我创建了一个目录,该目录仅包含主要网站Terraform脚本以启动主要网站基础结构。
对于region2,我创建了另一个目录,该目录仅包含灾难恢复网站Terraform脚本以启动灾难恢复网站基础结构。
在我的主要网站脚本中,我需要一些灾难恢复网站的值,例如VPC对等连接ID,DMS端点ARN等。
如何从灾难恢复网站目录到主网站目录引用这些变量?
答案 0 :(得分:2)
一种选择是使用terraform_remote_state
data source从另一个状态文件中获取输出,如下所示:
resource "aws_vpc" "foo" {
cidr_block = "10.0.0.0/16"
}
output "vpc_id" {
value = "${aws_vpc.foo.id}"
}
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或需要引用的内容执行类似的操作。
值得注意的是,DMS资源没有任何数据源,因此您要么需要使用terraform_remote_state
数据源来获取所有ID(例如源{{3}和目标端点ARN, }}或结构化,以便所有DMS内容都发生在DR区域中,然后您只需要引用其他区域的aws_dms_replication_task
,VPC ID和可能的database names即可所有这些都是通过数据源完成的。