Pemecahan masalah kegagalan ekstensi Azure Windows VM

Sekilas templat Azure Resource Manager

Templat Azure Resource Manager memungkinkan Anda menentukan infrastruktur Azure IaaS secara deklaratif dalam bahasa JSON dengan menentukan dependensi antar sumber daya.

Lihat Membuat kerangka ekstensi untuk mempelajari lebih lanjut tentang pembuatan kerangka untuk menggunakan ekstensi.

Dalam artikel ini kita akan mempelajari tentang pemecahan masalah beberapa kegagalan ekstensi VM umum.

Menampilkan status ekstensi

Templat Azure Resource Manager dapat dieksekusi dari Microsoft Azure PowerShell. Setelah templat dijalankan, status ekstensi dapat dilihat dari Azure Resource Explorer atau alat baris perintah.

Berikut contohnya:

Azure PowerShell:

Get-AzVM -ResourceGroupName $RGName -Name $vmName -Status

Berikut sampel outputnya:

Extensions:  {
  "ExtensionType": "Microsoft.Compute.CustomScriptExtension",
  "Name": "myCustomScriptExtension",
  "SubStatuses": [
    {
      "Code": "ComponentStatus/StdOut/succeeded",
      "DisplayStatus": "Provisioning succeeded",
      "Level": "Info",
      "Message": "    Directory: C:\\temp\\n\\n\\nMode                LastWriteTime     Length Name
          \\n----                -------------     ------ ----                              \\n-a---          9/1/2015   2:03 AM         11
          test.txt                          \\n\\n",
                  "Time": null
      },
    {
      "Code": "ComponentStatus/StdErr/succeeded",
      "DisplayStatus": "Provisioning succeeded",
      "Level": "Info",
      "Message": "",
      "Time": null
    }
  ]
}

Pemecahan masalah kegagalan ekstensi

Verifikasi bahwa Agen mesin virtual sedang berjalan dan Siap

Agen mesin virtual diperlukan untuk mengelola, menginstal, dan menjalankan ekstensi. Jika Agen mesin virtual tidak berjalan atau gagal melaporkan status Siap ke platform Azure, ekstensi tidak akan berfungsi dengan benar.

Silakan lihat halaman berikut untuk memecahkan masalah Agen mesin virtual:

Periksa panduan pemecahan masalah ekstensi spesifik Anda

Beberapa ekstensi memiliki halaman tertentu yang menjelaskan cara memecahkan masalah mereka. Anda dapat menemukan daftar ekstensi dan halaman ini di Memecahkan Masalah ekstensi .

Lihat status ekstensi

Seperti dijelaskan di atas, status ekstensi dapat ditemukan dengan menjalankan cmdlet PowerShell:

Get-AzVM -ResourceGroupName $RGName -Name $vmName -Status

atau perintah CLI:

az vm extension show -g <RG Name> --vm-name <VM Name>  --name <Extension Name>

atau di portal Microsoft Azure, dengan menjelajah ke VM Blade / Pengaturan / Extensions. Anda kemudian dapat mengklik ekstensi dan memeriksa status dan pesannya.

Jalankan ulang ekstensi pada VM

Jika Anda menjalankan skrip pada VM menggunakan Custom Script Extension, Anda kadang-kadang dapat mengalami kesalahan di mana VM berhasil dibuat tetapi skrip telah gagal. Dalam kondisi ini, cara yang disarankan untuk memulihkan dari kesalahan ini adalah dengan menghapus ekstensi dan menjalankan ulang templat lagi. Catatan: Di masa depan, fungsionalitas ini akan ditingkatkan untuk menghapus kebutuhan untuk mencopot pemasangan ekstensi.

Menghapus ekstensi dari Microsoft Azure PowerShell

Remove-AzVMExtension -ResourceGroupName $RGName -VMName $vmName -Name "myCustomScriptExtension"

Setelah ekstensi dihapus, template dapat dieksekusi kembali untuk menjalankan skrip pada VM.

Memicu GoalState baru ke VM

Anda mungkin memperhatikan bahwa ekstensi belum dijalankan, atau gagal dijalankan karena "Pembuat Sertifikat CRP Windows Azure" yang hilang (sertifikat itu digunakan untuk mengamankan pengangkutan pengaturan yang dilindungi ekstensi). Sertifikat tersebut akan diregenerasi secara otomatis dengan menghidupkan ulang Agen Tamu Windows dari dalam Virtual Machine:

  • Membuka Pengelola Tugas
  • Masuk ke tab Detail
  • Temukan proses WindowsAzureGuestAgent.exe
  • Klik kanan, dan pilih "Akhiri Tugas". Proses akan dimulai ulang secara otomatis

Anda juga dapat memicu GoalState baru ke VM, dengan mengeksekusi "VM Reapply". VM Reapply adalah API yang diperkenalkan pada tahun 2020 untuk menerapkan kembali status VM. Sebaiknya lakukan ini pada saat Anda dapat mentolerir waktu henti VM yang singkat. Meskipun Reapply sendiri tidak menyebabkan VM reboot, dan sebagian besar memanggil Reapply tidak akan mem-boot ulang VM, ada risiko yang sangat kecil bahwa beberapa pembaruan tertunda lainnya untuk model VM akan diterapkan saat Reapply memicu status tujuan baru, dan perubahan lain itu mungkin memerlukan restart.

portal Microsoft Azure:

Di portal, pilih VM dan di panel kiri di bawah Support + troubleshooting, pilih Redeploy + reapply, lalu pilih Reapply.

Microsoft Azure PowerShell (ganti Nama RG dan Nama VM dengan nilai Anda) :

Set-AzVM -ResourceGroupName <RG Name> -Name <VM Name> -Reapply

Azure CLI (ganti Nama RG dan Nama VM dengan nilai Anda) :

az vm reapply -g <RG Name> -n <VM Name>

Jika "VM Reapply" tidak berfungsi, Anda dapat menambahkan Disk Data kosong baru ke VM dari Portal Manajemen Microsoft Azure, lalu menghapusnya nanti setelah sertifikat ditambahkan kembali.

Lihatlah log ekstensi di dalam mesin virtual

Jika langkah-langkah sebelumnya tidak berfungsi dan jika ekstensi Anda masih dalam keadaan gagal, langkah selanjutnya adalah melihat lognya di dalam Mesin Virtual.

Pada mesin virtual Windows, log ekstensi biasanya akan berada di

C:\WindowsAzure\Logs\Plugins

Dan pengaturan Ekstensi dan file status akan berada di

C:\Packages\Plugins

Pada VM Linux, log ekstensi biasanya berada di

/var/log/azure/

Dan pengaturan Ekstensi dan file status akan berada di

/var/lib/waagent/

Setiap ekstensi berbeda, tetapi mereka biasanya mengikuti prinsip-prinsip yang sama:

Paket ekstensi dan biner diunduh di mesin virtual (misalnya "/var/lib/waagent/custom-script/download/1" untuk Linux, atau "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads\0" untuk Windows).

Konfigurasi dan pengaturannya diteruskan dari Azure Platform ke penghandel ekstensi melalui Agen mesin virtual (misalnya "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/config" untuk Linux, atau "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\RuntimeSettings" untuk Windows)

Penghandel ekstensi di dalam mesin virtual menulis ke file status (misalnya. "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/status/1.status" untuk Linux, atau "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Status" untuk Windows) yang kemudian akan dilaporkan ke Azure Platform. Status itu adalah yang dilaporkan melalui PowerShell, CLI atau di bilah ekstensi mesin virtual di portal Microsoft Azure.

Laporan itu juga menulis rincian log eksekusinya (misalnya "/var/log/azure/custom-script/handler.log" untuk Linux, atau "C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\CustomScriptHandler.log" untuk Windows).

Jika mesin virtual dibuat ulang dari mesin virtual yang sudah ada

Bisa terjadi bahwa Anda membuat mesin virtual Azure berdasarkan Disk khusus yang berasal dari mesin virtual Azure lain. Dalam hal ini, mungkin saja VM lama berisi ekstensi, dan juga akan memiliki file binari, log, dan status yang tersisa. Model mesin virtual baru tidak akan menyadari status ekstensi mesin virtual sebelumnya, dan mungkin melaporkan status yang salah untuk ekstensi ini. Kami sangat menyarankan untuk menghapus ekstensi dari mesin virtual lama sebelum membuat yang baru, dan kemudian menginstal ulang ekstensi ini setelah mesin virtual baru dibuat. Hal yang sama dapat terjadi ketika Anda membuat gambar umum dari mesin virtual Azure yang ada. Kami mengundang Anda untuk menghapus ekstensi untuk menghindari keadaan yang tidak konsisten dari ekstensi.

Masalah yang diketahui

PowerShell tidak dikenali sebagai perintah internal atau eksternal

Anda melihat entri kesalahan berikut dalam output ekstensi RunCommand:

RunCommandExtension failed with "'powershell' isn't recognized as an internal or external command,"

Analisis

Ekstensi berjalan di bawah akun Sistem Lokal, jadi sangat mungkin bahwa powershell.exe berfungsi dengan baik ketika Anda RDP ke VM, tetapi gagal saat dijalankan dengan RunCommand.

Solusi

  • Periksa apakah PowerShell tercantum dengan benar dalam variabel lingkungan PATH:
    • Buka Panel Kontrol
    • Sistem dan Keamanan
    • Sistem
    • Tab Tingkat Lanjut -> Variabel Lingkungan
  • Di bawah 'Variabel sistem' klik edit dan pastikan bahwa PowerShell berada dalam variabel lingkungan PATH (biasanya: "C:\Windows\System32\WindowsPowerShell\v1.0")
  • Reboot VM atau mulai ulang layanan WindowsAzureGuestAgent lalu coba Jalankan Perintah lagi.

Perintah tidak dikenali sebagai perintah internal atau eksternal

Anda melihat yang berikut ini di file C:\WindowsAzure\Logs\Plugins<ExtensionName><Version>\CommandExecution.log:

Execution Error: '<command>' isn't recognized as an internal or external command, operable program or batch file.

Analisis

Ekstensi berjalan di bawah akun Sistem Lokal, jadi sangat mungkin bahwa powershell.exe berfungsi dengan baik ketika Anda RDP ke VM, tetapi gagal saat dijalankan dengan RunCommand.

Solusi

  • Buka Prompt Perintah di VM dan jalankan perintah untuk mereprodule kesalahan. Agen VM menggunakan cmd.exe Administrator dan Anda mungkin memiliki beberapa perintah yang telah dikonfigurasi sebelumnya untuk dijalankan setiap kali cmd dimulai.
  • Kemungkinan juga variabel PATH Anda salah dikonfigurasi, tetapi ini akan tergantung pada perintah yang mengalami masalah.

VMAccessAgent gagal dengan Tidak dapat memperbarui pengaturan Koneksi Desktop Jauh untuk akun Administrator. Kesalahan: System.Runtime.InteropServices.COMException (0x800706D9): Tidak ada lagi titik akhir yang tersedia dari pemeta titik akhir.

Anda akan melihat hal berikut dalam status ekstensi:

Type Microsoft.Compute.VMAccessAgent
Version 2.4.8
Status Provisioning failed
Status level Error
Status message Cannot update Remote Desktop Connection settings for Administrator account. Error: System.Runtime.InteropServices.COMException (0x800706D9): There are no more endpoints available from the endpoint mapper. (Exception from HRESULT: 0x800706D9) at NetFwTypeLib.INetFwRules.GetEnumerator() at 
Microsoft.WindowsAzure.GuestAgent.Plugins.JsonExtensions.VMAccess.RemoteDesktopManager.EnableRemoteDesktopFirewallRules() 
at Microsoft.WindowsAzure.GuestAgent.Plugins.JsonExtensions.VMAccess.RemoteDesktopManager.EnableRemoteDesktop() at

Analisis

Kesalahan ini bisa terjadi ketika layanan Windows Firewall tidak berjalan.

Solusi

Periksa apakah layanan Windows Firewall diaktifkan dan berjalan. Jika tidak, aktifkan dan mulai - lalu coba lagi untuk menjalankan VMAccessAgent.

Sertifikat jarak jauh tidak valid menurut prosedur validasi.

Anda melihat yang berikut ini di WaAppAgent.log

System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.
Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

Analisis

VM Anda mungkin kehilangan sertifikat Baltimore CyberTrust Root di "Otoritas Sertifikasi Akar Tepercaya".

Solusi

Buka konsol sertifikat dengan certmgr.msc, dan periksa apakah sertifikat ada di sana.

Kemungkinan masalah lainnya adalah rantai sertifikat dipecah oleh alat Inspeksi SSL pihak ketiga, seperti ZScaler. Alat semacam itu harus dikonfigurasi untuk melewati inspeksi SSL.