2017-09-25 61 views
0

我有兩個計劃,在這兩個計劃中,我創建了兩個不同的服務器(例如,否則它非常複雜)。在一個計劃,我outputing安全組這樣的值:從一個計劃到另一個計劃的資源輸出值

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

我有第二個計劃,其中我想使用這個值,我怎麼能實現它,我已經試過幾件事情,但沒有爲我工作。

我知道如何使用moduleoutput價值回報,但不知道我怎麼可以用一個計劃output到另一個。

回答

1

當在配置的頂級模塊(運行terraform plan的目錄)中使用輸出時,其值將記錄在Terraform狀態中。

爲了從另一個配置中使用此值,必須將狀態發佈到可由其他配置讀取的位置。通常的做法是使用Remote State

隨着對第一配置啓用遠程狀態,因此能夠從使用the terraform_remote_state data source所述配置讀取所得到的值。

例如,它可以通過使用類似如下的後端配置,以保持在亞馬遜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第一次配置,以便這個值將被實際記錄在狀態中。任何時候在第一個輸出發生變化時,第二個配置都必須重新應用。

+0

如果我有本地'state'文件,該怎麼辦? –