Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform报告对运行的每个计划的Application Insights key的更改_Terraform_Terraform Provider Azure - Fatal编程技术网

Terraform报告对运行的每个计划的Application Insights key的更改

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

我有几个Azure资源是使用for_each属性创建的,然后这些资源也有一个Application Insights资源是使用for_each属性创建的

以下是创建azurerm_应用程序的代码:

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
}