【问题标题】: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
        ]
      }
    
      ...
    }
    

    【讨论】:

    • 谢谢!这正是我想要的行为。
    猜你喜欢
    • 2020-01-12
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多