【问题标题】:Terraform state sync with external changesTerraform 状态与外部更改同步
【发布时间】:2021-07-29 06:39:32
【问题描述】:
我在 Azure 中使用 terraform 管理我的基础架构。但是,在某些情况下,当其他服务也在更改基础架构时,状态可能会不同步。
例如,我让 terraform 创建了一个应用程序网关。但我也有一个启用了 AGIC 的 AKS 集群,它在应用程序网关内动态更新/更改规则、侦听器等。因此,如果在 AGIC 进行一些更改后重新运行 terraform,则 terraform 不知道并且想要重置为它知道的默认配置。
也许这是不可能的,但有没有一种自动的方式来同步这两者?每次必须进入 terraform 配置并手动添加 AGIC 所做的更改是不可行的。此时,是否值得使用 terraform 管理应用程序网关?
【问题讨论】:
标签:
azure
terraform
azure-aks
terraform-provider-azure
azure-application-gateway
【解决方案1】:
如果您真的想使用 Terraform 创建 Application Gateway,您可能应该对将由 AKS 修改的属性使用生命周期元参数 ignore_changes。这并不完美,但至少他们可以分担责任而不会相互覆盖。
ignore_changes 功能旨在在资源被
使用对未来可能更改的数据的引用创建,但
创建后不应影响所述资源。在一些罕见的
情况下,远程对象的设置被外部进程修改
Terraform,然后 Terraform 将尝试在下一个“修复”
跑步。为了让 Terraform 分担管理
具有单独进程的单个对象,ignore_changes
元参数指定 Terraform 应该的资源属性
计划更新关联的远程对象时忽略。
例如:
resource "azurerm_application_gateway" "example" {
...
lifecycle {
ignore_changes = [
http_listener,
request_routing_rule,
backend_http_settings
]
}
...
}