我有两个计划,其中我正在创建两个不同的服务器(例如,否则它真的很复杂)。在一个计划中,我输出安全组的值,如下所示:
output "security_group_id" {
value = "${aws_security_group.security_group.id}"
}
我有第二个计划,在这个计划中,我想要使用这个价值,我是如何实现它的,我已经尝试了几件事,但对我来说没什么用。
我知道如何使用output
返回module
值,但不知道如何将一个计划的output
用于另一个计划。
答案 0 :(得分:1)
当在配置的顶级模块(运行terraform plan
的目录)中使用输出时,其值将记录在Terraform状态。
要从其他配置使用此值,必须将状态发布到其他配置可以读取的位置。通常的方法是使用Remote State。
为 first 配置启用远程状态后,可以使用the terraform_remote_state
data source从 second 配置中读取结果值。
例如,可以通过使用如下所示的后端配置来保持Amazon S3中第一个配置的状态:
terraform {
backend "s3" {
bucket = "example-s3-bucket"
key = "example-bucket-key"
region = "us-east-1"
}
}
将此添加到第一个配置后,Terraform将提示您运行terraform init
以初始化新后端,其中包括迁移要存储在S3上的现有状态。
然后在第二个配置中,可以通过向terraform_remote_state
数据源提供相同的配置来检索此内容:
data "terraform_remote_state" "example" {
backend = "s3"
config {
bucket = "example-s3-bucket"
key = "example-bucket-key"
region = "us-east-1"
}
}
resource "aws_instance" "foo" {
# ...
vpc_security_group_ids = "${data.terraform_remote_state.example.security_group_id}"
}
请注意,由于第二个配置是从第一个配置读取状态,因此需要terraform apply
第一个配置,以便实际将该值记录在该状态中。每当第一个输出发生变化时,必须重新应用第二个配置。
答案 1 :(得分:0)
对于local
后端,该过程相同。第一步,我们需要声明以下代码段以发布状态。
terraform {
backend local {
path = "./terraform.tfstate"
}
}
执行terraform init and terraform apply
命令时,请注意在.terraform
目录中将创建新的terraform.tfsate
文件,其中包含后端信息,并告诉terraform使用以下tfstate
文件
现在在第二种配置中,我们需要使用此代码段使用data source
导入输出
data "terraform_remote_state" "test" {
backend = "local"
config {
path = "${path.module}/../regionalvpc/terraform.tfstate"
}
}