Terraform报告对运行的每个计划的Application Insights key的更改
我有几个Azure资源是使用for_each属性创建的,然后这些资源也有一个Application Insights资源是使用for_each属性创建的 以下是创建azurerm_应用程序的代码:Terraform报告对运行的每个计划的Application Insights key的更改,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我有几个Azure资源是使用for_each属性创建的,然后这些资源也有一个Application Insights资源是使用for_each属性创建的 以下是创建azurerm_应用程序的代码: resource "azurerm_application_insights" "applicationInsights" { for_each = toset(keys(merge(local.appServices, local.f
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计划时,我们总是看到terraform报告APPINSIGHTS\u INSTRUMENTATIONKEY值的“更改”。当我将app settings key/value列表中的此值与为其创建的实际AI instrumentation key进行比较时,它确实匹配
这是其他人的共同问题吗?我认为插装键永远不会改变,特别是因为Terraform创建了所有这些Application Insights资源并将其分配给每个应用程序
这就是我如何将每个Application Insights资源与其相应的应用程序关联起来,并为每个属性创建一个for_
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_设置中的键/值列表,Terraform检测到这是某种变化,而值本身没有变化。这是我知道的唯一一种方法,可以将一组Application Insights资源分配给多个web应用程序,每个应用程序使用for_,以减少配置代码。您是否可以在您的问题中添加资源“azurerm_function_app”“fnapp”的TF代码?但这并不特定于function app。我在其他Azure资源中也看到过类似的情况,主要是应用网关、Azure防火墙、Azure NSG。例如,当更改向这些资源中的任何资源添加/修改一条规则时,TF计划将显示非资源的销毁/创建。继续应用时,实际上没有任何更改。我还得出结论,它可能只是重新组织了资源中的不同项目,尽管在NSG的案例中,我意识到所发生的只是Azure对资源的新(与产品更新相关)属性,这些属性在最初的TF代码中缺失。我可以看到已经提出了一个问题,这可能与你的有关-不过还没有更新。
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
}