Terraform 从一个计划到另一个计划的资源输出值
我有两个计划,在这两个计划中,我创建了两个不同的服务器(举个例子,否则会非常复杂)。在一个计划中,我输出安全组的值,如下所示:Terraform 从一个计划到另一个计划的资源输出值,terraform,terraform-template-file,Terraform,Terraform Template File,我有两个计划,在这两个计划中,我创建了两个不同的服务器(举个例子,否则会非常复杂)。在一个计划中,我输出安全组的值,如下所示: output "security_group_id" { value = "${aws_security_group.security_group.id}" } 我有第二个计划,在这个计划中,我想利用这个价值,我如何才能实现它,我已经尝试了几件事,但都不管用 我知道如何使用模块返回的输出值,但不知道如何将一个计划的输出用于另一个计划。当在配置的顶级模块(运行地形计
output "security_group_id" {
value = "${aws_security_group.security_group.id}"
}
我有第二个计划,在这个计划中,我想利用这个价值,我如何才能实现它,我已经尝试了几件事,但都不管用
我知道如何使用
模块返回的输出
值,但不知道如何将一个计划的输出
用于另一个计划。当在配置的顶级模块(运行地形计划
的目录)中使用输出时,其值将记录在地形状态中
为了使用其他配置中的此值,必须将状态发布到其他配置可以读取的位置。实现这一点的通常方法是使用
在为第一个配置启用远程状态的情况下,可以使用从第二个配置读取结果值
例如,可以使用如下后端配置来保持Amazon S3中第一个配置的状态:
terraform {
backend "s3" {
bucket = "example-s3-bucket"
key = "example-bucket-key"
region = "us-east-1"
}
}
将此添加到第一个配置后,Terraform将提示您运行Terraform init
以初始化新的后端,其中包括迁移要存储在S3上的现有状态
然后,在第二种配置中,可以通过向terraform\u remote\u状态提供相同的配置来检索:
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应用第一个配置
。当第一个配置中的输出更改时,必须重新应用第二个配置。对于本地
后端,过程相同。在第一步中,我们需要声明以下代码段来发布状态
terraform {
backend local {
path = "./terraform.tfstate"
}
}
当您执行terraform init和terraform apply
命令时,请注意在.terraform
目录新建terraform.tfsate
文件将被创建,其中包含后端信息,并告诉terraform使用以下tfstate
文件
现在,在第二种配置中,我们需要使用数据源
通过使用此代码段导入输出
data "terraform_remote_state" "test" {
backend = "local"
config {
path = "${path.module}/../regionalvpc/terraform.tfstate"
}
}
如果我有本地<代码>状态代码>文件怎么办?避免使用本地状态文件,尽管你不想使用本地文件。