0

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

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

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
    ]
  }
}
4

2 回答 2

0

显然,这里的问题来自内置的 Azure 策略。

您可以创建一个自定义策略,该策略将直接在Azure Private DNS Zone上创建一条记录。

于 2021-10-29T14:06:38.277 回答
0

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

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
    ]
  }
}
于 2021-10-29T14:23:47.317 回答