繁体   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