Terraform сообщает об изменении ключа Application Insights для каждого запущенного плана

#terraform #terraform-provider-azure

Вопрос:

У меня есть несколько ресурсов Azure, созданных с использованием свойства for_each, а затем у этих ресурсов также есть ресурс Application Insights, созданный с использованием for_each.

Вот код, который создает azurerm_application_insights:

 resource "azurerm_application_insights" "applicationInsights" {
  for_each            = toset(keys(merge(local.appServices, local.functionApps)))
  name                = lower(join("-", ["wb", var.deploymentEnvironment, var.location, each.key, "ai"]))
  location            = var.location
  resource_group_name = azurerm_resource_group.rg.name
  application_type    = "web"
  lifecycle {
    ignore_changes = [tags]
  }
}
 

Я заметил, что каждый раз, когда мы запускаем план терраформирования в некоторых средах, мы всегда видим, как Terraform сообщает об «изменении» значения APPINSIGHTS_INSTRUMENTATIONKEY. Когда я сравниваю это значение в списке ключей/значений настроек приложения с фактическим ключом инструментария искусственного интеллекта, созданным для него, оно совпадает.

  Terraform will perform the following actions:
 
   # module.primaryRegion.module.functionapp["fnapp1"].azurerm_function_app.fnapp will be updated in-place
   ~ resource "azurerm_function_app" "fnapp" {
       ~ app_settings                   = {
           # Warning: this attribute value will be marked as sensitive and will
           # not display in UI output after applying this change
           ~ "APPINSIGHTS_INSTRUMENTATIONKEY" = (sensitive) 
             # (1 unchanged element hidden)
 

Является ли это общей проблемой для других людей? Я бы подумал, что ключ инструментария никогда не изменится, тем более что Terraform-это то, что создало все эти ресурсы Application Insights и назначает их каждому приложению.

Вот как я связываю каждый ресурс Application Insights с соответствующим приложением с помощью свойства for_each

 module "webapp" {
  for_each              = local.appServices
  source                = "../webapp"
  name                  = lower(join("-", ["wb", var.deploymentEnvironment, var.location, each.key, "app"]))
  location              = var.location
  resource_group_name   = azurerm_resource_group.rg.name
  app_service_plan_id   = each.value.app_service_plan_id
  app_settings          = merge({"APPINSIGHTS_INSTRUMENTATIONKEY" = azurerm_application_insights.applicationInsights[each.key].instrumentation_key}, each.value.app_settings)
  allowed_origins       = each.value.allowed_origins
  deploymentEnvironment = var.deploymentEnvironment
}
 

Мне интересно, является ли слияние просто переупорядочиванием списка ключей/значений в app_settings для приложения, и Terraform обнаруживает это как какое-то изменение, а само значение не меняется. Это единственный известный мне способ назначить кучу ресурсов Application Insights многим веб-приложениям с помощью for_each для сокращения кода конфигурации.

Комментарии:

1. Не могли бы вы также добавить код TF для ресурса «azurerm_function_app» «fnapp» в свой вопрос?

2. Однако это не относится конкретно к функциональному приложению.

3. Я видел, как нечто подобное происходило с другими ресурсами Azure, в основном шлюзами приложений, брандмауэром Azure, сетевыми сетями Azure. Например, при изменении добавления/изменения одного правила к любому из этих ресурсов в плане TF будет показано уничтожение/создание для нересурсов. При подаче заявки на самом деле ничего не меняется. Я также пришел к выводу, что это, вероятно, просто реорганизует различные элементы в ресурсе, хотя в случае NSGS я понял, что происходящее было просто новыми (связанными с обновлением продукта) атрибутами ресурса Azure, которые отсутствовали в исходном коде TF.

4. Я вижу, что уже была поднята проблема, которая может быть связана с вашей — хотя обновлений пока нет. github.com/terraform-providers/terraform-provider-azurerm/…