【问题标题】:Azure Terraform ignore_changes on private dns zone group with DeployIfNotExists policy具有 DeployIfNotExists 策略的私有 dns 区域组上的 Azure Terraform ignore_changes
【发布时间】:2021-09-14 10:18:07
【问题描述】:

我遇到了一个问题,即 Terraform 尝试更改由 DeployIfNotExists 策略部署的资源。此策略会自动为专用终结点 (source) 创建一个 DNS 条目。通常,我会使用ignore_changes,但这仅适用于首先由 Terraform 部署的资源,然后将忽略 Terraform 之外的所有未来更改。

如何在没有 private_dns_zone_group 的情况下部署专用终结点,以防止将来的任何部署删除由 Azure 策略部署的 private_dns_zone_group

resource "azurerm_private_endpoint" "private_endpoint" {
  name                = var.private_endpoint_name
  location            = var.location
  resource_group_name = var.resource_group_name
  subnet_id           = var.private_subnet_id

  private_service_connection {
    name                           = var.private_service_connection_name
    is_manual_connection           = false
    private_connection_resource_id = azurerm_app_service.app_service.id
    subresource_names              = ["sites"]
  }

  # This cannot be included, otherwise the DeployIfNotExists policy will not run
  # private_dns_zone_group {
  #   name                 = "deployedByPolicy"
  #   private_dns_zone_ids = []
  # }

  lifecycle {
    ignore_changes = [
      private_dns_zone_group
    ]
  }
}

【问题讨论】:

  • 如果你只是从你的代码中删除块它不起作用? private_dns_zone_group 块是可选的,因此只需省略它,您就可以创建您的 pe,而无需通过 terraform 将其添加到 dns 区域
  • 当你不部署它时,它会在Azure使用策略创建它时被删除。
  • 奇怪的是我不知道!您是否还通过 terraform 管理azurerm_private_dns_zone?您认为这可能是导致问题的原因吗?奇怪的是,terraform 会通过省略私有 dnz 区域组来了解私有 dns 区域中存在的内容。
  • azurerm_private_dns_zone 不受 terraform 管理,它在中心订阅(云采用框架)内。所以私有 dns 区域组是问题所在,它始终是私有端点的子资源。

标签: azure terraform azure-policy azure-private-dns-zone


【解决方案1】:

很明显,问题来自内置的 Azure 策略。

您可以创建一个自定义策略,它将直接在 Azure 私有 DNS 区域上创建一条记录。

【讨论】:

    【解决方案2】:

    我不确定在此期间发生了什么,但我让它按预期工作。我必须说我更新到最新的 azurerm 提供程序并删除了状态。当您private_endpoint 中包含 private_dns_zone_group 并明确忽略更改时,它会起作用。

    resource "azurerm_private_endpoint" "private_endpoint" {
      name                = var.private_endpoint_name
      location            = var.location
      resource_group_name = var.resource_group_name
      subnet_id           = var.private_subnet_id
    
      private_service_connection {
        name                           = var.private_service_connection_name
        is_manual_connection           = false
        private_connection_resource_id = azurerm_app_service.app_service.id
        subresource_names              = ["sites"]
      }
    
      # Ignore, because managed by DeployIfNotExists policy 
      lifecycle {
        ignore_changes = [
          private_dns_zone_group
        ]
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-07-01
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 2021-01-07
      • 2019-06-08
      • 2019-06-21
      相关资源
      最近更新 更多