簡體   English   中英

如何從另一個 Terraform 配置更新資源

[英]How to update resource from another Terraform configuration

我正在嘗試在 Azure 中構建中心輻射型拓撲

  • 集線器 .NET - 包括具有默認規則的 Azure 防火牆,有自己的 TF state 文件
  • Spoke .NET - 包括其他 Azure 資源(Blob、Key vault 等),有許多 Spoke .NET(每個項目/環境)每個都有自己的 TF state 文件。

問題:部署每個 Spoke .NET 后,有一個隨機生成的 Blob 存儲名稱,我需要在其他 TF 配置中傳遞和更新 Azure 防火牆規則。

問題:是否可以自動完成?

可能的解決方案:我將terraform apply Spoke .NET 並使用隨機生成的 blob 存儲名稱作為 output。將其傳遞給 .sh 腳本,該腳本將更新 Hub .NET 與防火牆使用的.tfvars 文件。 然后terraform apply此集線器 .NET 配置。 在銷毀任何 Spoke .NET 時,我也必須反向執行此操作。 但這不是很優雅。 有沒有更好的辦法? 也許使用 Terragrunt 鈎子?

在 terragrunt 的情況下,您可以輕松地將一個模塊(即 Hub .NET)的輸出作為輸入傳遞給依賴它的模塊(即 Spoke .NET)。 代碼片段如下所示:

hub-.net/terragrunt.hcl :

dependency "spoke-a-vnet" {
  config_path = "../spoke-a-vnet"
  mock_ouptuts = {
    blob-name = ""
  }
}

dependency "spoke-b-vnet" {
  config_path = "../spoke-b-vnet"
  mock_ouptuts = {
    blob-name = ""
  }
}

inputs {
  blob-names = [dependency.spoke-a-vnet.outputs.blob-name, dependency.spoke-v-vnet.outputs.blob-name]
}

然后在您的 Hub .NET 模塊中,您將配置一個行為,如果它等於"" ,則應該跳過 blob-name 。

在 Spoke 移除操作期間,您需要運行兩個步驟:

  1. 為相關的 Spoke .NET 模塊運行destroy
  2. 之后為 Hub .NET 模塊運行apply (實際上是重新應用),其中模擬值""將作為 blob 存儲輸入生效並因此被跳過(基於上述條件方法)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM