AzureDiagnosticSettings 发送请求失败:StatusCode=409 -- 原始错误:autorest/azure:服务返回错误。状态=<nil><nil>

问题描述 投票:0回答:1

当 var.environment ==“prod”时,我有这个 terraform 脚本为不同的 Azure Signal R 实例创建两个诊断设置。请注意,诊断设置是不同 Azure 区域中的两个 Azure Signal R 实例,也使用两个不同区域中的两个不同 Log Analytics 工作区。

resource "azurerm_monitor_diagnostic_setting" "Database_diagnostics_SignalR" {
  count = var.environment == "prod" ? 2 : 1
  name = var.environment != "prod" ? "${var.product}${var.environment}SignalRdiagnostics" : "${var.product}${var.environment}${keys(var.location)[count.index]}SignalRdiagnostics"
  target_resource_id = azurerm_signalr_service.product_signalr[count.index].id
  log_analytics_workspace_id =  var.log_analytics_workspace_ids[count.index]
  enabled_log {
    category_group = "allLogs"
  }
  metric {
    category = "AllMetrics"
  }
}

当我应用脚本时,出现此错误

 Error: creating Monitor Diagnostics Setting "xxx-UK1-SignalRdiagnostics" for Resource "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.SignalRService/signalR/xxx-signalr-UK1": diagnosticsettings.DiagnosticSettingsClient#CreateOrUpdate: Failure sending request: StatusCode=409 -- Original Error: autorest/azure: Service returned an error. Status=<nil> <nil>
│ 
│   with azurerm_monitor_diagnostic_setting.Database_diagnostics_SignalR[0],
│   on tests/signalr_and_pep/signalr_and_pep.tf line 126, in resource "azurerm_monitor_diagnostic_setting" "Database_diagnostics_SignalR":
│  126: resource "azurerm_monitor_diagnostic_setting" "Database_diagnostics_SignalR" {
│ 
╵
╷
│ Error: creating Monitor Diagnostics Setting "xxx-UK2-SignalRdiagnostics" for Resource "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.SignalRService/signalR/xxx-signalr-UK2": diagnosticsettings.DiagnosticSettingsClient#CreateOrUpdate: Failure sending request: StatusCode=409 -- Original Error: autorest/azure: Service returned an error. Status=<nil> <nil>
│ 
│   with azurerm_monitor_diagnostic_setting.Database_diagnostics_SignalR[1],
│   on tests/signalr_and_pep/signalr_and_pep.tf line 126, in resource "azurerm_monitor_diagnostic_setting" "Database_diagnostics_SignalR":
│  126: resource "azurerm_monitor_diagnostic_setting" "Database_diagnostics_SignalR" {

我已确保诊断设置具有不同的名称,并且它们针对两个不同区域中的两种不同的 Signal R 资源,并确保它们使用不同的 Log Analytics 工作区,这些工作区是面临类似问题的其他开发人员提供的解决方案。但我不断收到同样的错误。

terraform-provider-azure azure-diagnostics azure-signalr
1个回答
0
投票

我尝试对问题进行排序 AzureDiagnosticSettings 发送请求失败:StatusCode=409 -- 原始错误:autorest/azure:服务返回错误。状态=并且我能够成功地提供要求。

您共享了一个脚本模块,该模块将这些设置应用到各个 Azure 区域,并为每个区域使用不同的 Log Analytics 工作区。当存在 Azure 资源冲突时,例如当您要创建的资源已存在或具有冲突的配置时,通常会发生此错误。

错误消息

StatusCode=409
表示存在冲突。这可能是由于:

  1. **具有相同名称的现有诊断设置:**对于 Azure 中的给定目标资源,不能有多个具有相同名称的诊断设置。这甚至适用于不同地区。如果您的 Terraform 脚本生成重复的名称或尝试使用已存在的名称,您将收到此错误。

  2. 配置问题: 问题的可能原因是资源设置不正确,例如,使用了错误的 Log Analytics 工作区 ID 或 SignalR 服务 ID。

为了解决这个问题并满足您的要求,我们将确保:

  • 根据环境和位置,诊断设置具有唯一的名称。
  • SignalR 服务和 Log Analytics 工作区已正确定义和引用。
  • 条件逻辑用于根据
    var.environment
    值创建资源。

Terraform 配置:

   provider "azurerm" {
      features {}
    }
    
    variable "environment" {}
    variable "product" {}
    variable "location" {
      type = map(string)
    }
    variable "log_analytics_workspace_ids" {
      type = map(string)
    }
    
    
    resource "azurerm_resource_group" "example" {
      for_each = var.location
      
      name     = "${var.product}${var.environment}${each.key}RG"
      location = each.value
    }
    
    resource "azurerm_signalr_service" "product_signalr" {
      for_each = var.location
    
      name                = "${var.product}-${var.environment}-${each.key}-signalr"
      location            = azurerm_resource_group.example[each.key].location
      resource_group_name = azurerm_resource_group.example[each.key].name
      sku {
        name     = "Standard_S1"
        capacity = 1
      }
    }
    
    resource "azurerm_monitor_diagnostic_setting" "database_diagnostics_signalr" {
      for_each = var.environment == "dev" ? var.location : { "default" = var.location["default"] }
      
    
      name                       = "${var.product}${var.environment}${each.key}SignalRdiagnostics"
      target_resource_id         = azurerm_signalr_service.product_signalr[each.key].id
      log_analytics_workspace_id = var.log_analytics_workspace_ids[each.key]
      
      enabled_log {
        category = "AllLogs"
      }
    
      metric {
        category = "AllMetrics"
        enabled  = true
      }
    }

terraform.tfvars:

environment = "dev"
product = "myapp"

location = {
  "EastUS" = "eastus"
  "WestUS" = "westus"
}

log_analytics_workspace_ids = {
  "EastUS" = "/subscriptions/xxxx/resourceGroups/myapp-prod-EastUS/providers/Microsoft.OperationalInsights/workspaces/myappLogAnalyticsEastUS"
  "WestUS" = "/subscriptions/xxxx/resourceGroups/myapp-prod-WestUS/providers/Microsoft.OperationalInsights/workspaces/myappLogAnalyticsWestUS"
}

输出:

enter image description here

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.