2017-07-18 35 views
1

我使用Terraform到部署中心輻射型VPC架構,其中中轉/管理/基礎設施VPC作爲通信樞紐。帶Terraform的AWS:如何在每個VPC是單獨的.tf時將VPC ID映射爲對等?

項目組織拆分爲模塊&現場環境,並且實時環境被拆分,使得每個VPC都有自己的子目錄。當我想創建一個VPC對等資源時,我遇到的問題是動態檢索VPC ID - 顯然,如果我在一個扁平的main.tf文件中實例化所有模塊,這不會成爲問題,但是,這是我想要避免的。

是否有可能解決這個問題Terraform?在我看來,對於任何解決方案,我認爲需要靜態提供數據,將兩個VPC映射到一起,但問題在於VPC ID是在資源創建時分配的,並不是我事先知道的事情。

我必須打平我的「活」 .tf文件或有另一種方式?我是否完全用我的文件模式做錯了什麼?

謝謝!

+1

你能澄清,如果你正在使用Terraform模塊或者只是文件夾用'tf'文件?這應該可以引用資源輸出。答案略有不同,具體取決於您是否使用模塊。但是,如果你只是在文件夾中使用'tf'文件,你可以將它視爲「平坦」。這些文件按照https://www.terraform.io/docs/configuration/load.html按字母順序加載。 –

+1

是的,我正在使用模塊。 「實時環境」文件將它們輸入並傳入必要的變量。 的問題是,如果我使用VPC模塊和實例「富」和「欄」,然後實例的VPC窺視模塊「巴茲」「富」之間以及「欄」,然後我在本質上必須有充分的VPC實例在我試圖避免的同一個文件中。 感謝您的回覆! – tellof

回答

1

我們創建的「層」的環境中,我們建立的VPC和子網的基礎網絡層,然後在共享的基礎設施層,然後單獨應用slice,是應用層的一部分。現在,每個圖層的terraform代碼都位於其自己的文件夾中,並具有自己的狀態文件。這使我們可以更新上層而不必遍歷整個terraform管理基礎架構的世界。

現在經常上層需要從較低層的值。在應用程序層創建ec2需要來自基礎層的vpc和子網信息。我們通過data.terraform_remote_state執行此操作。我們用於環境的所有狀態文件都位於s3存儲桶中,並具有可預測的文件名。因此,在應用切片我們應該這樣做:

data "terraform_remote_state" "base" { 
    backend = "s3" 
    config { 
     bucket = "remote-state-bucket" 
     key = "environment-staging/base-layer.tfstate" 
     region = "some-region" 
    } 
} 

,然後我們可以抓住該基定義爲這樣的輸出圖層屬性:

value = "${data.terraform_remote_state.base.some_output}" 
+0

我沒有考慮「可預測的文件名」部分。 謝謝! – tellof