4

Azure で VM 診断を有効にするのは非常に面倒です。ARM テンプレート、Azure PowerShell SDK、および Azure CLI を使用して動作するようになりました。しかし、Terraform と azurerm_virtual_machine_extension リソースを使用して、Windows VM と Linux VM の両方で VM 診断を有効にしようと何日も試みてきました。まだ機能していません。

ここに私がこれまでに持っているものがあります(この投稿のために単純化するためにこれを少し調整したので、手動編集で何も壊れていないことを願っています):

  resource "azurerm_virtual_machine_extension" "vm-linux" {
  count                      = "${local.is_windows_vm == "false" ? 1 : 0}"
  depends_on                 = ["azurerm_virtual_machine_data_disk_attachment.vm"]
  name                       = "LinuxDiagnostic"
  location                   = "${var.location}"
  resource_group_name        = "${var.resource_group_name}"
  virtual_machine_name       = "${local.vm_name}"
  publisher                  = "Microsoft.Azure.Diagnostics"
  type                       = "LinuxDiagnostic"
  type_handler_version       = "3.0"
  auto_upgrade_minor_version = "true"

  # The JSON file referenced below was created by running "az vm diagnostics get-default-config", and adding/verifying the "__DIAGNOSTIC_STORAGE_ACCOUNT__" and "__VM_RESOURCE_ID__" placeholders.
  settings = <<SETTINGS
    {
      "ladCfg": "${base64encode(replace(replace(file("${path.module}/.diag-settings/linux_diag_config.json"), "__DIAGNOSTIC_STORAGE_ACCOUNT__", "${module.vm_storage_account.name}"), "__VM_RESOURCE_ID__", "${local.metricsresourceid}"))}",
      "storageAccount": "${module.vm_storage_account.name}"
    }
SETTINGS

  # SAS token below: Do not include the leading question mark, as per https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/diagnostics-linux.
  protected_settings = <<SETTINGS
    {
      "storageAccountName": "${module.vm_storage_account.name}",
      "storageAccountSasToken": "${replace(data.azurerm_storage_account_sas.current.sas, "/^\\?/", "")}",
      "storageAccountEndPoint": "https://core.windows.net/"
    }
SETTINGS
}

resource "azurerm_virtual_machine_extension" "vm-win" {
  count                      = "${local.is_windows_vm == "true" ? 1 : 0}"
  depends_on                 = ["azurerm_virtual_machine_data_disk_attachment.vm"]
  name                       = "Microsoft.Insights.VMDiagnosticsSettings"
  location                   = "${var.location}"
  resource_group_name        = "${var.resource_group_name}"
  virtual_machine_name       = "${local.vm_name}"
  publisher                  = "Microsoft.Azure.Diagnostics"
  type                       = "IaaSDiagnostics"
  type_handler_version       = "1.9"
  auto_upgrade_minor_version = "true"

  # The JSON file referenced below was created by running "az vm diagnostics get-default-config --is-windows-os", and adding/verifying the "__DIAGNOSTIC_STORAGE_ACCOUNT__" and "__VM_RESOURCE_ID__" placeholders.
  settings = <<SETTINGS
    {
      "wadCfg": "${base64encode(replace(replace(file("${path.module}/.diag-settings/windows_diag_config.json"), "__DIAGNOSTIC_STORAGE_ACCOUNT__", "${module.vm_storage_account.name}"), "__VM_RESOURCE_ID__", "${local.metricsresourceid}"))}",
      "storageAccount": "${module.vm_storage_account.name}"
    }
SETTINGS

  protected_settings = <<SETTINGS
    {
      "storageAccountName": "${module.vm_storage_account.name}",
      "storageAccountSasToken": "${data.azurerm_storage_account_sas.current.sas}",
      "storageAccountEndPoint": "https://core.windows.net/"
    }
SETTINGS
}

コメントに従って、Linux と Windows の両方で、コード ベース内の JSON ファイルから診断の詳細を読み込んでいることに注意してください。これらは Azure によって提供される既定の構成であるため、有効である必要があります。

これらをデプロイすると、Linux VM 拡張機能は正常にデプロイされますが、Azure ポータルでは、拡張機能に「生成された mdsd 構成で検出された問題」と表示されます。VM の「診断設定」を見ると、「エラーが発生しました: TypeError: オブジェクトはプロパティまたはメソッド 'diagnosticMonitorConfiguration' をサポートしていません」と表示されます。Windows VM 拡張機能は、「構成の読み取りに失敗しました」と言って、デプロイに完全に失敗します。ポータルで拡張機能を表示すると、次のエラーが表示されます。

"code": "ComponentStatus//failed/-3",
"level": "Error",
"displayStatus": "Provisioning failed",
"message": "Error starting the diagnostics extension"

そして、「診断設定」ペインを見ると、終わりのない「. . .」でハングします。アニメーション。

ただし、両方の VM 拡張機能の「terraform apply」出力を見ると、デコードされた設定は意図したとおりに見え、正しく置き換えられたプレースホルダーと構成ファイルが一致しています。

これを機能させる方法に関する提案はありますか?

前もって感謝します!

4

3 に答える 3