当 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 工作区,这些工作区是面临类似问题的其他开发人员提供的解决方案。但我不断收到同样的错误。
我尝试对问题进行排序 AzureDiagnosticSettings 发送请求失败:StatusCode=409 -- 原始错误:autorest/azure:服务返回错误。状态=并且我能够成功地提供要求。
您共享了一个脚本模块,该模块将这些设置应用到各个 Azure 区域,并为每个区域使用不同的 Log Analytics 工作区。当存在 Azure 资源冲突时,例如当您要创建的资源已存在或具有冲突的配置时,通常会发生此错误。
错误消息
StatusCode=409
表示存在冲突。这可能是由于:
**具有相同名称的现有诊断设置:**对于 Azure 中的给定目标资源,不能有多个具有相同名称的诊断设置。这甚至适用于不同地区。如果您的 Terraform 脚本生成重复的名称或尝试使用已存在的名称,您将收到此错误。
配置问题: 问题的可能原因是资源设置不正确,例如,使用了错误的 Log Analytics 工作区 ID 或 SignalR 服务 ID。
为了解决这个问题并满足您的要求,我们将确保:
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"
}
输出: