Menggunakan Ekstensi Skrip Kustom Azure Versi 2 dengan komputer virtual Linux

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan rencanakan yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.

Ekstensi Skrip Kustom Versi 2 mengunduh dan menjalankan skrip pada mesin virtual (VM) Azure. Gunakan ekstensi ini untuk konfigurasi pasca-penyebaran, penginstalan perangkat lunak, atau tugas konfigurasi atau manajemen lainnya. Anda dapat mengunduh skrip dari Azure Storage atau lokasi internet lain yang dapat diakses, atau Anda dapat memberikan skrip atau perintah ke runtime bahasa umum ekstensi.

Ekstensi Skrip Kustom terintegrasi dengan templat Azure Resource Manager. Anda juga dapat menjalankannya dengan menggunakan Azure CLI, Azure PowerShell, atau AZURE Virtual Machines REST API.

Artikel ini menjelaskan cara menggunakan Ekstensi Skrip Kustom dari Azure CLI, dan cara menjalankan ekstensi dengan menggunakan templat Azure Resource Manager. Artikel ini juga memberikan langkah-langkah pemecahan masalah untuk sistem Linux.

Ada dua versi Ekstensi Skrip Kustom:

  • Versi 1: Microsoft.OSTCExtensions.CustomScriptForLinux
  • Versi 2: Microsoft.Azure.Extensions.CustomScript

Gunakan Versi 2 untuk penyebaran baru dan yang sudah ada. Versi baru dimaksudkan untuk menjadi pengganti drop-in. Migrasi ini semudah mengubah nama dan versi. Anda tidak perlu mengubah konfigurasi ekstensi.

Prasyarat

Distribusi Linux yang didukung

Distribusi x64 ARM64
Alma Linux 9.x+ 9.x+
CentOS 7.x+, 8.x+ 7.x+
Debian 10+ 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Azure Linux 2.x 2.x
openSUSE 12.3+ Tidak Didukung
Oracle Linux 6.4+, 7.x+, 8.x+ Tidak Didukung
Red Hat Enterprise Linux 6.7+, 7.x+, 8.x+, 9.x+ 8.6+, 9.x+
Rocky Linux 9.x+ 9.x+
SLES 12.x+, 15.x+ 15.x SP4+
Ubuntu 18.04+, 20.04+, 22.04+ 20.04+, 22.04+

Lokasi skrip

Anda dapat mengatur ekstensi untuk menggunakan info mandat Azure Blob Storage Anda sehingga dapat mengakses Azure Blob Storage. Lokasi skrip dapat berada di mana saja, selama mesin virtual dapat merutekan ke titik akhir tersebut, misalnya GitHub atau server file internal.

Konektivitas internet

Untuk mengunduh skrip secara eksternal, seperti dari GitHub atau Azure Storage, Anda perlu membuka port firewall atau grup keamanan jaringan (NSG) lainnya. Misalnya, jika skrip terletak di Azure Storage, Anda dapat mengizinkan akses dengan menggunakan tag layanan Azure NSG untuk Storage.

Meskipun skrip ada di server lokal, Anda mungkin masih perlu membuka port firewall dan NSG lainnya.

Tips

  • Tingkat kegagalan tertinggi untuk ekstensi ini adalah karena kesalahan sintaks dalam skrip. Verifikasi bahwa skrip berjalan tanpa kesalahan. Masukkan lebih banyak pengelogan ke dalam skrip untuk membuatnya lebih mudah menemukan kegagalan.
  • Tulis skrip yang idempoten, jadi jika skrip dijalankan lagi beberapa kali secara tidak sengaja, hal tersebut tidak akan menyebabkan perubahan sistem.
  • Pastikan skrip tidak memerlukan input pengguna saat dijalankan.
  • Skrip diizinkan untuk dijalankan selama 90 menit. Apa pun yang lebih lama akan mengakibatkan kegagalan penyediaan ekstensi.
  • Jangan menempatkan reboot di dalam skrip. Memulai ulang akan menyebabkan masalah pada ekstensi lain yang sedang dipasang, dan ekstensi tidak akan berlanjut setelah reboot.
  • Jika Anda memiliki skrip yang akan menyebabkan reboot sebelum memasang aplikasi dan menjalanan skrip, jadwalkan reboot dengan menggunakan pekerjaan cron atau menggunakan alat seperti DSC, Chef, atau ekstensi Puppet.
  • Tidak disarankan untuk menjalankan skrip yang akan menyebabkan penghentian atau pembaruan Agen Linux Azure. Hal ini dapat membuat ekstensi berada dalam status transisi dan menyebabkan waktu habis.
  • Ekstensi hanya akan menjalankan skrip satu kali. Jika Anda ingin menjalankan skrip di setiap startup, Anda dapat menggunakan gambar cloud-init dan menggunakan modul Scripts Per Boot. Atau, Anda dapat menggunakan skrip untuk membuat unit layanan systemd.
  • Anda hanya dapat memiliki satu versi ekstensi yang diterapkan ke mesin virtual. Untuk menjalankan skrip kustom kedua, perbarui ekstensi yang ada dengan konfigurasi baru. Atau, Anda dapat menghapus Ekstensi Skrip Kustom dan menerapkannya kembali dengan skrip yang diperbarui
  • Jika ingin menjadwalkan kapan skrip akan berjalan, Anda harus menggunakan ekstensi untuk membuat pekerjaan cron.
  • Saat skrip berjalan, Anda hanya akan melihat status ekstensi dalam transisi dari portal Microsoft Azure atau CLI. Jika ingin pembaruan status yang lebih sering dari skrip yang sedang berjalan, buat solusi Anda sendiri.
  • Ekstensi Skrip Kustom tidak mendukung server proxy secara native. Namun, Anda dapat menggunakan alat transfer file, seperti Curl, yang mendukung server proksi dalam skrip Anda.
  • Waspadai lokasi direktori non-default yang mungkin diandalkan oleh skrip atau perintah Anda. Memiliki logika untuk menangani situasi ini.

Skema ekstensi

Konfigurasi Ekstensi Skrip Kustom menentukan hal-hal seperti lokasi skrip dan perintah yang akan dijalankan. Anda dapat menyimpan konfigurasi ini dalam file konfigurasi, menentukan file pada baris perintah, atau menentukan file dalam templat Azure Resource Manager.

Anda dapat menyimpan data sensitif dalam konfigurasi yang dilindungi, yang dienkripsi dan hanya didekripsi pada VM target. Konfigurasi yang dilindungi berguna saat perintah eksekusi menyertakan rahasia seperti kata sandi. Berikut contohnya:

{
  "name": "config-app",
  "type": "Extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2019-03-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "skipDos2Unix":false,
      "timestamp":123456789
    },
    "protectedSettings": {
       "commandToExecute": "<command-to-execute>",
       "script": "<base64-script-to-execute>",
       "storageAccountName": "<storage-account-name>",
       "storageAccountKey": "<storage-account-key>",
       "fileUris": ["https://.."],
       "managedIdentity" : "<managed-identity-identifier>"
    }
  }
}

Catatan

Properti managedIdentitytidak boleh digunakan bersama dengan properti storageAccountName atau storageAccountKey.

Nilai properti

Nama Nilai atau contoh Jenis Data
apiVersion 2019-03-01 date
penerbit Microsoft.Azure.Extensions string
jenis CustomScript string
typeHandlerVersion 2.1 int
fileUris https://github.com/MyProject/Archive/MyPythonScript.py array
commandToExecute python MyPythonScript.py \<my-param1> string
skrip IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= string
skipDos2Unix false Boolean
rentang waktu 123456789 bilangan bulat 32-bit
storageAccountName examplestorageacct string
storageAccountKey TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== string
managedIdentity { } atau { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" } atau { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } Objek JSON

Detail nilai properti

Properti Opsional atau diperlukan Detail
apiVersion Tidak berlaku Anda dapat menemukan versi API terbaru dengan menggunakan Penjelajah Sumber Daya atau dengan menggunakan perintah az provider list -o json di Azure CLI.
fileUris Opsional URL untuk file yang akan diunduh.
commandToExecute Diperlukan jika script tidak diatur Skrip titik masuk untuk dijalankan. Gunakan bidang ini sebagai ganti script jika perintah Anda berisi rahasia seperti kata sandi.
skrip Diperlukan jika commandToExecute tidak diatur Skrip yang dikodekan Base64 dan secara opsional gzip dijalankan oleh /bin/sh.
skipDos2Unix Opsional Atur nilai ini ke false jika Anda ingin melewati konversi dos2unix dari URL fil berbasis skip atau skrip.
rentang waktu Opsional Ubah nilai ini hanya untuk memicu tayangan ulang skrip. Setiap nilai bilangan bulat dapat diterima, asalkan berbeda dari nilai sebelumnya.
storageAccountName Opsional Nama akun penyimpanan. Jika Anda menentukan info masuk penyimpanan, semua nilai fileUris harus merupakan URL untuk blob Azure.
storageAccountKey Opsional Kunci akses akun penyimpanan.
managedIdentity Opsional Identitas terkelola untuk mengunduh file. Nilainya adalah clientId (opsional, string), yang merupakan ID klien dari identitas terkelola, dan objectId (opsional, string), yang merupakan ID objek dari identitas terkelola.

Pengaturan publik dikirim dalam teks yang jelas ke VM tempat skrip berjalan. Pengaturan yang dilindungi dienkripsi melalui kunci yang hanya diketahui oleh Azure dan VM. Pengaturan disimpan di mesin virtual selagi dikirimkan. Artinya, jika pengaturan dienkripsi, mereka disimpan sebagai dienkripsi di mesin virtual. Sertifikat yang digunakan untuk mendekripsi nilai yang dienkripsi disimpan di mesin virtual. Sertifikat juga digunakan untuk mendekripsi pengaturan, jika perlu, pada waktu proses.

Menggunakan pengaturan publik mungkin berguna untuk penelusuran kesalahan, tetapi kami sangat menyarankan Anda menggunakan pengaturan yang dilindungi.

Anda dapat mengatur nilai berikut di pengaturan publik atau yang dilindungi. Ekstensi menolak konfigurasi apa pun di mana nilai-nilai ini diatur dalam pengaturan publik dan terlindungi.

  • commandToExecute
  • script
  • fileUris

Properti: skipDos2Unix

Versi Ekstensi Skrip Kustom sebelumnya, , Microsoft.OSTCExtensions.CustomScriptForLinuxsecara otomatis mengonversi file DOS ke file UNIX dengan menerjemahkan \r\n ke \n. Terjemahan ini masih ada, dan aktif secara default. Konversi ini diterapkan ke semua file yang diunduh dari fileUris atau pengaturan skrip berdasarkan salah satu kriteria berikut:

  • Ekstensi ini .sh, .txt, .py, atau .pl. Pengaturan skrip selalu cocok dengan kriteria ini karena diasumsikan sebagai eksekusi skrip dengan /bin/sh. Pengaturan skrip disimpan sebagai script.sh pada VM.
  • File dimulai dengan #!.

Nilai defaultnya adalah false, yang berarti konversi dos2unix benar-benar dijalankan. Anda dapat melewati konversi dos2unix dengan mengatur skipDos2Unix ke true:

{
  "fileUris": ["<url>"],
  "commandToExecute": "<command-to-execute>",
  "skipDos2Unix": true
}

Properti: skrip

Ekstensi Skrip Kustom mendukung eksekusi skrip yang ditentukan pengguna. Pengaturan skrip menggabungkan commandToExecute dan fileUris menjadi satu pengaturan. Alih-alih harus menyiapkan file untuk diunduh dari Azure Storage atau gist GitHub, Anda dapat mengodekan skrip sebagai pengaturan. Anda dapat menggunakan skrip untuk mengganti commandToExecute dan fileUris.

Berikut adalah persyaratannya:

  • Skrip harus dikodekan sebagai Base64.
  • Skrip secara opsional dapat di-gzip.
  • Anda dapat menggunakan pengaturan skrip di pengaturan publik atau yang dilindungi.
  • Ukuran maksimum data parameter skrip adalah 256 KB. Jika skrip melebihi ukuran ini, skrip tidak berjalan.

Misalnya, skrip berikut disimpan ke file /script.sh/:

#!/bin/sh
echo "Creating directories ..."
mkdir /data
chown user:user /data
mkdir /appdata
chown user:user /appdata

Anda akan membangun pengaturan skrip Ekstensi Skrip Kustom yang benar dengan mengambil output dari perintah berikut:

cat script.sh | base64 -w0
{
  "script": "IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo="
}

Dalam kebanyakan kasus, skrip secara opsional dapat dimasukkan ke gzip untuk lebih mengurangi ukuran. Ekstensi Skrip Kustom secara otomatis mendeteksi penggunaan kompresi gzip.

cat script | gzip -9 | base64 -w 0

Ekstensi Skrip Kustom menggunakan algoritma berikut untuk menjalankan skrip:

  1. Tegaskan bahwa panjang nilai skrip tidak melebihi 256 KB.
  2. Base64 mendekode nilai skrip.
  3. Cobalah untuk mengeluarkan nilai yang dikodekan Base64 dari gzip.
  4. Tulis nilai yang didekodekan dan didekompresi secara opsional ke disk: /var/lib/waagent/custom-script/#/script.sh.
  5. Jalankan skrip dengan menggunakan _/bin/sh -c /var/lib/waagent/custom-script/#/script.sh.

Properti: managedIdentity

Catatan

Properti ini harus ditentukan dalam pengaturan yang dilindungi saja.

Ekstensi Skrip Kustom, versi 2.1 dan yang lebih baru, mendukung identitas terkelola untuk mengunduh file dari URL yang disediakan dalam fileUris pengaturan. Pendekatan ini memungkinkan Ekstensi Skrip Kustom untuk mengakses blob atau kontainer privat Azure Storage tanpa pengguna harus meneruskan rahasia seperti token tanda tangan akses bersama (SAS) atau kunci akun penyimpanan.

Untuk menggunakan fitur ini, tambahkan identitas yang ditetapkan sistem atau ditetapkan pengguna ke VM atau Virtual Machine Scale Set tempat Ekstensi Skrip Kustom diharapkan berjalan. Kemudian berikan akses identitas terkelola ke kontainer atau blob Azure Storage.

Untuk menggunakan identitas yang ditetapkan sistem pada VM target atau Virtual Machine Scale Set, atur managedidentity ke objek JSON kosong.

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : {}
}

Untuk menggunakan identitas yang ditetapkan pengguna pada VM target atau Virtual Machine Scale Set, konfigurasikan managedidentity dengan ID klien atau ID objek identitas terkelola.

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" }
}
{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" }
}

Catatan

Properti managedIdentitytidak boleh digunakan bersama dengan properti storageAccountName atau storageAccountKey.

Penyebaran templat

Anda dapat menyebarkan ekstensi mesin virtual Azure dengan menggunakan templat Azure Resource Manager. Skema JSON yang dirinci di bagian sebelumnya dapat digunakan dalam templat Azure Resource Manager untuk menjalankan Ekstensi Skrip Kustom selama penyebaran templat. Anda dapat menemukan contoh templat yang menyertakan Ekstensi Skrip Kustom di GitHub.

{
  "name": "config-app",
  "type": "extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2019-03-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      },
    "protectedSettings": {
      "commandToExecute": "sh hello.sh <param2>",
      "fileUris": ["https://github.com/MyProject/Archive/hello.sh"
      ]
    }
  }
}

Catatan

Nama properti ini peka huruf besar/kecil. Untuk menghindari masalah penyebaran, gunakan nama seperti yang ditunjukkan di sini.

Azure CLI

Saat Anda menggunakan Azure CLI untuk menjalankan Ekstensi Skrip Kustom, buat file atau file konfigurasi. Minimal, file konfigurasi harus berisi commandToExecute. az vm extension set Perintah mengacu pada file konfigurasi:

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --protected-settings ./script-config.json

Atau, Anda dapat menentukan pengaturan dalam perintah sebagai string berformat JSON. Pendekatan ini memungkinkan konfigurasi ditentukan selama eksekusi dan tanpa file konfigurasi terpisah.

az vm extension set \
  --resource-group exttest \
  --vm-name exttest \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --protected-settings '{"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],"commandToExecute": "./config-music.sh"}'

Contoh: Konfigurasi publik dengan file skrip

Contoh ini menggunakan file skrip berikut bernama script-config.json:

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
  "commandToExecute": "./config-music.sh"
}
  1. Buat file skrip dengan menggunakan editor teks pilihan Anda atau dengan menggunakan perintah CLI berikut:

    cat <<EOF > script-config.json
    {
      "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  2. Jalankan perintah berikut:

    az vm extension set \
      --resource-group myResourceGroup \
      --vm-name myVM --name customScript \
      --publisher Microsoft.Azure.Extensions \
      --settings ./script-config.json
    

Contoh: Konfigurasi publik tanpa file skrip

Contoh ini menggunakan konten berformat JSON berikut:

{
  "commandToExecute": "apt-get -y update && apt-get install -y apache2"
}

Jalankan perintah berikut:

az vm extension set \
  --resource-group tim0329vmRG \
  --vm-name tim0329vm --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings '{"commandToExecute": "apt-get -y update && apt-get install -y apache2"}'

Contoh: File konfigurasi publik dan dilindungi

Gunakan file konfigurasi publik untuk menentukan URI file skrip:

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
}

Gunakan file konfigurasi yang dilindungi untuk menentukan perintah yang akan dijalankan:

{
  "commandToExecute": "./config-music.sh"
}
  1. Buat file konfigurasi publik dengan menggunakan editor teks pilihan Anda atau dengan menggunakan perintah CLI berikut:

    cat <<EOF > script-config.json
    {
      "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
    }
    EOF
    
  2. Buat file konfigurasi yang dilindungi dengan menggunakan editor teks pilihan Anda atau dengan menggunakan perintah CLI berikut:

    cat <<EOF > protected-config.json
    {
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  3. Jalankan perintah berikut:

    az vm extension set \
      --resource-group myResourceGroup \
      --vm-name myVM \
      --name customScript \
      --publisher Microsoft.Azure.Extensions \
      --settings ./script-config.json \
      --protected-settings ./protected-config.json
    

Virtual Machine Scale Sets

Jika Anda menyebarkan Ekstensi Skrip Kustom dari portal Azure, Anda tidak memiliki kontrol atas kedaluwarsa token SAS untuk mengakses skrip di akun penyimpanan Anda. Penyebaran awal berfungsi, tetapi ketika token SAS akun penyimpanan kedaluwarsa, operasi penskalaan berikutnya gagal karena Ekstensi Skrip Kustom tidak dapat lagi mengakses akun penyimpanan.

Kami menyarankan agar Anda menggunakan PowerShell, Azure CLI, atau templat Azure Resource Manager saat Anda menyebarkan Ekstensi Skrip Kustom pada Set Skala Komputer Virtual. Dengan cara ini, Anda dapat memilih untuk menggunakan identitas terkelola atau memiliki kontrol langsung atas kedaluwarsa token SAS untuk mengakses skrip di akun penyimpanan Anda selama yang Anda butuhkan.

Pemecahan Masalah

Saat Ekstensi Skrip Kustom berjalan, skrip dibuat atau diunduh ke direktori yang mirip dengan contoh berikut. Output perintah juga disimpan ke dalam direktori ini di stdout dan file stderr.

sudo ls -l /var/lib/waagent/custom-script/download/0/

Untuk memecahkan masalah, pertama-tama periksa log Agen Linux dan pastikan bahwa ekstensi berjalan:

sudo cat /var/log/waagent.log

Cari eksekusi ekstensi. Ini terlihat seperti:

2018/04/26 17:47:22.110231 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] [Enable] current handler state is: notinstalled
2018/04/26 17:47:22.306407 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Download, message=Download succeeded, duration=167
2018/04/26 17:47:22.339958 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Initialize extension directory
2018/04/26 17:47:22.368293 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Update settings file: 0.settings
2018/04/26 17:47:22.394482 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Install extension [bin/custom-script-shim install]
2018/04/26 17:47:23.432774 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Install, message=Launch command succeeded: bin/custom-script-shim install, duration=1007
2018/04/26 17:47:23.476151 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Enable extension [bin/custom-script-shim enable]
2018/04/26 17:47:24.516444 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Enable, message=Launch command succeeded: bin/custom-sc

Dalam output sebelumnya:

  • Enable adalah saat perintah mulai berjalan.
  • Download berkaitan dengan pengunduhan paket Ekstensi Skrip Kustom dari Azure, bukan file skrip yang ditentukan dalam fileUris.

Ekstensi Skrip Azure menghasilkan log, yang dapat Anda temukan di sini:

sudo cat /var/log/azure/custom-script/handler.log

Carilah eksekusi individu. Ini terlihat seperti:

time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=start
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=pre-check
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="comparing seqnum" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="seqnum saved" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="reading configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="read configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating json schema"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="json schema valid"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsing configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsed configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating configuration logically"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validated configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="creating output directory" path=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="created output directory"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 files=1
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download start"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download complete" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing protected commandToExecute" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executed command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=enabled
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=end

Di sini Anda dapat melihat:

  • Perintah enable yang memulai log ini.
  • Pengaturan diteruskan ke ekstensi.
  • Ekstensi yang mengunduh file dan hasil tindakan tersebut.
  • Perintah sedang dijalankan dan hasilnya.

Anda juga dapat mengambil status eksekusi Ekstensi Skrip Kustom termasuk argumen aktual yang diteruskan sebagai commandToExecute menggunakan Azure CLI:

az vm extension list -g myResourceGroup --vm-name myVM

Hasilnya akan terlihat seperti teks berikut:

[
  {
    "autoUpgradeMinorVersion": true,
    "forceUpdateTag": null,
    "id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/customscript",
    "resourceGroup": "rgname",
    "settings": {
      "commandToExecute": "sh script.sh > ",
      "fileUris": [
        "https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh",
        "https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh"
      ]
    },
    "tags": null,
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "typeHandlerVersion": "2.0",
    "virtualMachineExtensionType": "CustomScript"
  },
  {
    "autoUpgradeMinorVersion": true,
    "forceUpdateTag": null,
    "id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/OmsAgentForLinux",
    "instanceView": null,
    "location": "eastus",
    "name": "OmsAgentForLinux",
    "protectedSettings": null,
    "provisioningState": "Succeeded",
    "publisher": "Microsoft.EnterpriseCloud.Monitoring",
    "resourceGroup": "rgname",
    "settings": {
      "workspaceId": "workspaceid"
    },
    "tags": null,
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "typeHandlerVersion": "1.0",
    "virtualMachineExtensionType": "OmsAgentForLinux"
  }
]

Masalah sintaksis Azure CLI

Azure CLI dapat berjalan di beberapa lingkungan shell, tetapi dengan sedikit variasi format. Jika Anda mendapatkan hasil yang tidak diharapkan dengan perintah Azure CLI, lihat Cara berhasil menggunakan Azure CLI.

Langkah berikutnya

Untuk melihat kode, masalah saat ini, dan versi, lihat custom-script-extension-linux.