#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/…