Terraform: невозможно найти URI запроса при создании ресурса настроек c для диагностики Azure Key Vault - PullRequest
0 голосов
/ 10 марта 2020

Я развертываю хранилище ключей в Azure через шаблон ARM и ресурс «azurerm_template_deployment», но мне нужно включить параметры диагностики c и данные потоковой диагностики c в моей существующей рабочей области аналитики журналов.

Цель состоит в том, чтобы развернуть само хранилище ключей с параметрами диагностики c в том же «применении terraform»

При запуске применения terraform хранилище ключей само развертывается, но диагностика * Настройки 1021 * не включаются и завершаются с помощью следующего сообщения:

[error]Error: Error creating Monitor Diagnostics Setting "kv-diagnostics" for Resource "/subscriptions/----/resourceGroups/rg-test-001/providers/Microsoft.Resources/deployments/kv-diagnostics": insights.DiagnosticSettingsClient#CreateOrUpdate: Failure responding to request: StatusCode=404 -- Original Error: autorest/azure: Service returned an error. Status=404 Code="" Message="No HTTP resource was found that matches the request URI 'h_ttps://management.azure.com/subscriptions/---/resourceGroups/rg-test-001/providers/Microsoft.Resources/deployments/kv_test/providers/microsoft.insights/diagnosticSettings/kv-diagnostics?api-version=2017-05-01-preview'."

Ниже приведен мой код для ресурса диагностики c в Terraform:

resource "azurerm_monitor_diagnostic_setting" "kv-diag" {
  count              = length(var.kv_name)
  name               = "kv-diagnostics"
  target_resource_id = azurerm_template_deployment.kv[count.index].id
  log_analytics_workspace_id = azurerm_log_analytics_workspace.log.id

  log {
    ...
    }
  }

  metric {
    ...
    }
  }


}

Где azurerm_log_analytics_workspace.logs.id уже существует, а переменная var.kv_name представляет собой список имен (пока в списке только 1 имя). Вывод « terraform plan » показывает target_resource_id = (известный после применения), что имеет смысл, поскольку в идеальной ситуации хранилище ключей еще не развернуто, поэтому у него нет идентификатора.

Почему Azure выдает эту ошибку? Куда я иду не так?

1 Ответ

1 голос
/ 10 марта 2020

Вы можете экспортировать значение Id хранилища ключей из вашего шаблона azurerm_template_deployment с помощью выходных данных , а затем ссылочный идентификатор хранилища ключей вместо идентификатора развертывания шаблона в качестве кода в target_resource_id.

Например,

resource "azurerm_resource_group" "example" {
  name     = "nancy-resources"
  location = "West US"
}

resource "azurerm_template_deployment" "example" {
  name                = "nancytemplate-01"
  resource_group_name = azurerm_resource_group.example.name

  deployment_mode = "Incremental"

  template_body = <<DEPLOY

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "vaults_ancykeyvault_name": {
            "defaultValue": "nanvalut123",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.KeyVault/vaults",
            "apiVersion": "2016-10-01",
            "name": "[parameters('vaults_ancykeyvault_name')]",
            "location": "westus",

            "properties": {
                "sku": {
                    "family": "A",
                    "name": "standard"
                },
                "tenantId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                "accessPolicies": [
                    {
                        "tenantId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                        "objectId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                        "permissions": {
                            "keys": [
                                "Get",
                                "Create",
                                "Delete",
                                "List",
                                "Update",
                                "Import",
                                "Backup",
                                "Restore",
                                "Recover"
                            ],
                            "secrets": [
                                "Get",
                                "List",
                                "Set",
                                "Delete",
                                "Backup",
                                "Restore",
                                "Recover"
                            ],
                            "certificates": [
                                "Get",
                                "List",
                                "Delete",
                                "Create",
                                "Import",
                                "Update",
                                "ManageContacts",
                                "GetIssuers",
                                "ListIssuers",
                                "SetIssuers",
                                "DeleteIssuers",
                                "ManageIssuers",
                                "Recover"
                            ],
                            "storage": [
                                "get",
                                "list",
                                "delete",
                                "set",
                                "update",
                                "regeneratekey",
                                "setsas",
                                "listsas",
                                "getsas",
                                "deletesas"
                            ]
                        }
                    }
                ],
                "enabledForDeployment": false,
                "enabledForDiskEncryption": false,
                "enabledForTemplateDeployment": true
            }
        }



    ],

    "outputs": {
    "myKvID": {
      "type": "string",
      "value": "[resourceId('Microsoft.KeyVault/vaults',parameters('vaults_ancykeyvault_name'))]"
    }
  }
}

DEPLOY



}




resource "azurerm_log_analytics_workspace" "example" {
  name                = "nancytest-01"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  sku                 = "PerGB2018"
  retention_in_days   = 30
}

resource "azurerm_monitor_diagnostic_setting" "example" {
  name               = "nancymonitoring"

  target_resource_id = azurerm_template_deployment.example.outputs["myKvID"]
  log_analytics_workspace_id = azurerm_log_analytics_workspace.example.id

  log {
    category = "AuditEvent"
    enabled  = false

    retention_policy {
      enabled = false
    }
  }

  metric {
    category = "AllMetrics"

    retention_policy {
      enabled = false
    }
  }
}

output "exsitingKvID" {
  value = azurerm_template_deployment.example.outputs["myKvID"]
}

Результат

enter image description here

...