从一个计划到另一个计划的资源产出价值

时间:2017-09-25 17:29:06

标签: terraform terraform-template-file

我有两个计划,其中我正在创建两个不同的服务器(例如,否则它真的很复杂)。在一个计划中,我输出安全组的值,如下所示:

output "security_group_id" {
  value = "${aws_security_group.security_group.id}"
}

我有第二个计划,在这个计划中,我想要使用这个价值,我是如何实现它的,我已经尝试了几件事,但对我来说没什么用。

我知道如何使用output返回module值,但不知道如何将一个计划的output用于另一个计划。

2 个答案:

答案 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"
  }
}