![](/img/trans.png)
[英]How to use the VPC id and subnets id values which were created from one Terraform plan to in another Terraform plan
[英]Reference variables from another Terraform plan
我已经使用Terraform在AWS中创建了具有主要和灾难恢复网站架构的设置。
主网站位于region1中,灾难恢复位于region2中。 该脚本创建为不同的计划或不同的目录。
对于region1,我创建了一个目录,该目录仅包含主要网站Terraform脚本以启动主要网站基础结构。
对于region2,我创建了另一个目录,该目录仅包含灾难恢复网站Terraform脚本以启动灾难恢复网站基础结构。
在我的主要网站脚本中,我需要灾难恢复网站的一些值,例如VPC对等连接ID,DMS端点ARN等。
如何从灾难恢复网站目录到主网站目录引用这些变量?
一种选择是使用terraform_remote_state
数据源从另一个状态文件中获取输出,如下所示:
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
数据源之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区域中的其他任何ID或需要引用的内容执行类似的操作。
值得注意的是,DMS资源没有任何数据源,因此您要么需要使用terraform_remote_state
数据源来获取任何ID(例如源端点ARN和目标端点ARN来设置aws_dms_replication_task
要么可以对其进行结构化,以便所有DMS发生在DR区域中,然后您只需引用其他区域的VPC ID , 数据库名称以及可能的KMS密钥ID ,这些都可以通过数据源完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.