Menjalankan skrip di VM Linux Anda dengan menggunakan Run Command terkelola
Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel
Penting
Perintah Jalankan Terkelola saat ini tersedia di Azure CLI, PowerShell, dan API saat ini. Fungsionalitas portal ada di peta jalan.
Fitur Perintah Eksekusi menggunakan agen mesin virtual (VM) untuk menjalankan skrip dalam mesin virtual Azure Linux. Anda dapat menggunakan skrip ini untuk manajemen komputer atau aplikasi umum. Skrip tersebut dapat membantu Anda dengan cepat mendiagnosis dan memulihkan akses mesin virtual dan masalah jaringan, serta membuat mesin virtual kembali ke kondisi yang baik.
Perintah Eksekusi terkelola yang diperbarui menggunakan saluran agen mesin virtual yang sama untuk menjalankan skrip dan menyediakan peningkatan berikut pada Perintah Eksekusi berorientasi tindakan asli:
- Dukungan untuk Perintah Eksekusi yang diperbarui melalui templat penyebaran ARM
- Eksekusi paralel dari beberapa skrip
- Eksekusi skrip secara berurutan
- Batas waktu skrip yang ditentukan pengguna
- Dukungan untuk skrip yang sudah berjalan lama (jam/hari)
- Melewati rahasia (parameter, kata sandi) dengan cara yang aman
Prasyarat
Penting
Agen Tamu Linux minimum yang didukung adalah versi 2.4.0.2 Versi lama tidak mendukung RunCommand Terkelola
Linux Distro didukung
Linux Distro | x64 | ARM64 |
---|---|---|
Alma Linux | 9.x+ | Tidak Didukung |
Debian | 10+ | Tidak Didukung |
Flatcar Linux | 3374.2.x+ | Tidak Didukung |
Azure Linux | 2.x | Tidak Didukung |
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+ | Tidak Didukung |
Rocky Linux | 9.x+ | Tidak Didukung |
SLES | 12.x+, 15.x+ | Tidak Didukung |
Ubuntu | 18.04+, 20.04+, 22.04+ | Tidak Didukung |
Membatasi akses ke Run Command
Mencantumkan perintah jalankan atau memperlihatkan detail perintah memerlukan Microsoft.Compute/locations/runCommands/read
izin pada tingkat Langganan. Peran Pembaca bawaan dan tingkat yang lebih tinggi memiliki izin ini.
Menjalankan perintah memerlukan izin Microsoft.Compute/virtualMachines/runCommand/write
. Peran Kontributor Komputer Virtual dan tingkat yang lebih tinggi memiliki izin ini.
Anda dapat menggunakan salah satu peran bawaan atau membuat peran kustom untuk menggunakan Run Command.
Azure CLI
Contoh berikut menggunakan az vm run-command untuk menjalankan skrip shell pada mesin virtual Azure Linux.
Menjalankan skrip dengan mesin virtual
Perintah ini mengirimkan skrip ke VM, menjalankannya, dan mengembalikan output yang ditangkap.
az vm run-command create --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --script "echo Hello World!"
Cantumkan semua sumber daya RunCommand yang disebarkan di mesin virtual
Perintah ini mengembalikan daftar lengkap Perintah Jalankan yang disebarkan sebelumnya bersama dengan propertinya.
az vm run-command list --vm-name "myVM" --resource-group "myRG"
Dapatkan status eksekusi dan hasil
Perintah ini mengambil kemajuan eksekusi saat ini, termasuk output terbaru, waktu mulai/selesai, kode keluar, dan status terminal eksekusi.
az vm run-command show --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --expand instanceView
Catatan
Bidang output dan kesalahan di instanceView
terbatas pada 4KB terakhir.
Jika Anda ingin mengakses output dan kesalahan penuh, Anda memiliki opsi untuk meneruskan output dan data kesalahan ke blob penambahan penyimpanan menggunakan -outputBlobUri
parameter dan -errorBlobUri
saat menjalankan Perintah Jalankan menggunakan Set-AzVMRunCommand
atau Set-AzVMssRunCommand
.
Menghapus sumber daya RunCommand dari mesin virtual
Hapus sumber daya RunCommand yang sebelumnya digunakan pada mesin virtual. Jika eksekusi skrip masih berlangsung, eksekusi akan dihentikan.
az vm run-command delete --name "myRunCommand" --vm-name "myVM" --resource-group "myRG"
PowerShell
Menjalankan skrip dengan mesin virtual
Perintah ini mengirimkan skrip ke VM, menjalankannya, dan mengembalikan output yang ditangkap.
Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
Menjalankan skrip pada Mesin Virtual menggunakan parameter SourceScriptUri
OutputBlobUri
dan ErrorBlobUri
adalah parameter opsional.
Set-AzVMRunCommand -ResourceGroupName -VMName -RunCommandName -SourceScriptUri “< SAS URI of a storage blob with read access or public URI>" -OutputBlobUri “< SAS URI of a storage append blob with read, add, create, write access>” -ErrorBlobUri “< SAS URI of a storage append blob with read, add, create, write access>”
Menjalankan Perintah Eksekusi yang berjalan lama pada VM
Waktu eksekusi harus berjalan lebih lama dari batas waktu default 90 menit. Ini harus berjalan selama 100 menit (lihat parameter 6.000 detik -TimeoutInSecond) yang disediakan skrip diharapkan berjalan selama itu. Setelah 100 menit, eksekusi skrip akan berhenti.
Set-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -AsyncExecution -TimeoutInSecond 6000
Cantumkan semua sumber daya RunCommand yang disebarkan di mesin virtual
Perintah ini mengembalikan daftar lengkap Perintah Jalankan yang disebarkan sebelumnya bersama dengan propertinya.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"
Dapatkan status eksekusi dan hasil
Perintah ini mengambil kemajuan eksekusi saat ini, termasuk output terbaru, waktu mulai/selesai, kode keluar, dan status terminal eksekusi.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand instanceView
Membuat atau memperbarui Jalankan Perintah pada VM menggunakan SourceScriptURI (URL SAS blob penyimpanan)
Buat atau perbarui Jalankan Perintah pada VM Windows menggunakan URL SAS blob penyimpanan yang berisi skrip PowerShell.
SourceScriptUri
dapat menjadi URL SAS lengkap blob penyimpanan atau URL publik.
Catatan
URL SAS harus menyediakan akses baca ke blob. Waktu kedaluwarsa 24 jam disarankan untuk URL SAS. URL SAS dapat dihasilkan pada portal Azure menggunakan opsi blob, atau token SAS menggunakan New-AzStorageBlobSASToken
. Jika menghasilkan token SAS menggunakan New-AzStorageBlobSASToken
, URL SAS Anda = "URL blob dasar" + "?" + "token SAS dari New-AzStorageBlobSASToken"
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptURI>
Mendapatkan Tampilan Instans Perintah Eksekusi untuk VM setelah Membuat atau Memperbarui Perintah Jalankan
Dapatkan Perintah Jalankan untuk VM dengan Tampilan Instans. Tampilan Instans berisi status eksekusi Perintah Jalankan (Berhasil, Gagal, dll.), kode keluar, output standar, dan kesalahan standar yang dihasilkan dengan menjalankan skrip menggunakan Perintah Jalankan. ExitCode nonzero menunjukkan eksekusi yang tidak berhasil.
$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView
Output yang diharapkan:
ExecutionState : Succeeded
ExecutionMessage :
ExitCode : 0
Output :
output : uid=0(root) gid=0(root) groups=0(root)
HelloWorld
Error :
StartTime : 10/27/2022 9:10:52 PM
EndTime : 10/27/2022 9:10:55 PM
Statuses :
InstanceView.ExecutionState
-Status skrip Jalankan Perintah pengguna. Lihat status ini untuk mengetahui apakah skrip Anda berhasil atau tidak.
ProvisioningState
- Status provisi ekstensi umum secara end to end ( apakah platform ekstensi dapat memicu skrip Jalankan Perintah atau tidak).
Membuat atau memperbarui Jalankan Perintah pada VM menggunakan SourceScript (teks skrip)
Buat atau perbarui Jalankan Perintah pada VM yang meneruskan konten skrip langsung ke parameter -SourceScript. Gunakan ;
untuk memisahkan beberapa perintah.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
Membuat atau memperbarui Jalankan Perintah pada VM menggunakan SourceCommandId
Buat atau perbarui Jalankan Perintah pada VM menggunakan yang sudah ada commandId
sebelumnya. CommandId yang tersedia dapat diambil menggunakan Get-AzVMRunCommandDocument.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId ipconfig
Membuat, atau memperbarui Jalankan Perintah pada VM menggunakan OutputBlobUri, ErrorBlobUri untuk mengalirkan output standar dan pesan kesalahan standar ke output, dan kesalahan Tambahkan blob
Buat atau perbarui Jalankan Perintah pada VM dan streaming output standar dan pesan kesalahan standar untuk output dan kesalahan Tambahkan blob.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -OutputBlobUri <OutputBlobUri> -ErrorBlobUri <errorbloburi>
Catatan
Blob output dan kesalahan harus berjenis AppendBlob
dan URL SAS-nya harus menyediakan akses baca, tambahkan, buat, tulis ke blob. Waktu kedaluwarsa 24 jam disarankan untuk URL SAS. Jika output atau blob kesalahan tidak ada, blob jenis AppendBlob akan dibuat. URL SAS dapat dihasilkan pada portal Azure menggunakan opsi blob, atau token SAS menggunakan New-AzStorageBlobSASToken. Jika menghasilkan token SAS menggunakan New-AzStorageBlobSASToken
, URL SAS = URL blob dasar + "?" + token SAS dari New-AzStorageBlobSASToken
.
Buat atau perbarui Jalankan Perintah pada VM, jalankan Perintah Jalankan sebagai pengguna lain menggunakan parameter RunAsUser dan RunAsPassword
Buat atau perbarui Jalankan Perintah pada VM, jalankan Perintah Jalankan sebagai pengguna lain menggunakan RunAsUser
parameter dan RunAsPassword
. Agar RunAs berfungsi dengan baik, hubungi admin VM, dan pastikan pengguna ditambahkan pada VM, pengguna memiliki akses ke sumber daya yang diakses oleh Perintah Jalankan (Direktori, File, Jaringan, dll.), dan jika VM Windows, layanan 'Masuk Sekunder' berjalan pada VM.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -RunAsUser myusername -RunAsPassword mypassword
Membuat atau memperbarui Jalankan Perintah pada sumber daya Virtual Machine Scale Sets menggunakan SourceScriptUri (URL SAS blob penyimpanan).
Buat atau perbarui Jalankan Perintah pada sumber daya Virtual Machine Scale Sets menggunakan URL SAS blob penyimpanan yang berisi skrip bash.
Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Catatan
Catatan URL SAS harus menyediakan akses baca ke blob. Waktu kedaluwarsa 24 jam disarankan untuk URL SAS. URL SAS dapat dihasilkan pada portal Azure menggunakan opsi blob, atau token SAS menggunakan New-AzStorageBlobSASToken. Jika menghasilkan token SAS menggunakan New-AzStorageBlobSASToken, URL SAS = URL blob dasar + "?" + token SAS dari New-AzStorageBlobSASToken
.
Membuat atau memperbarui Jalankan Perintah pada instans VM menggunakan parameter Parameter dan ProtectedParameter (Parameter Publik dan Terlindungi ke skrip)
$PublicParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam1';value='publicParam1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam2';value='publicParam2value'})
$ProtectedParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret1';value='secret1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret2';value='secret2value'})
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -Parameter $PublicParametersArray -ProtectedParameter $ProtectedParametersArray
Gunakan ProtectedParameter
untuk meneruskan input sensitif apa pun ke skrip seperti kata sandi, kunci, dll.
- Windows: Parameter dan ProtectedParameters diteruskan ke skrip karena argumen diteruskan ke skrip dan berjalan seperti ini
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
- Linux: Parameter Bernama dan nilainya diatur ke konfigurasi lingkungan, yang harus dapat diakses dalam
.sh
skrip. Untuk argumen Nameless, teruskan string kosong ke input nama. Argumen tanpa nama diteruskan ke skrip dan berjalan seperti ini -myscript.sh publicParam1value publicParam2value secret1value secret2value
Menghapus sumber daya RunCommand dari mesin virtual
Hapus sumber daya RunCommand yang sebelumnya digunakan pada mesin virtual. Jika eksekusi skrip masih berlangsung, eksekusi akan dihentikan.
Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"
REST API
Untuk meyebarkan Perintah Eksekusi baru, jalankan PUT pada mesin virtual secara langsung dan tentukan nama unik untuk instans Perintah Eksekusi.
PUT /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01
{
"location": "<location>",
"properties": {
"source": {
"script": "Write-Host Hello World!",
"scriptUri": "<SAS URI of a storage blob with read access or public URI>",
"commandId": "<Id>"
},
"parameters": [
{
"name": "param1",
"value": "value1"
},
{
"name": "param2",
"value": "value2"
}
],
"protectedParameters": [
{
"name": "secret1",
"value": "value1"
},
{
"name": "secret2",
"value": "value2"
}
],
"runAsUser": "userName",
"runAsPassword": "userPassword",
"timeoutInSeconds": 3600,
"outputBlobUri": "< SAS URI of a storage append blob with read, add, create, write access>",
"errorBlobUri": "< SAS URI of a storage append blob with read, add, create, write access >"
}
}
Catatan
- Anda dapat memberikan skrip sebaris, URI skrip, atau ID perintah skrip bawaan sebagai sumber input. URI skrip adalah URI SAS blob penyimpanan dengan akses baca atau URI publik.
- Hanya satu jenis input sumber yang didukung untuk satu eksekusi perintah.
- Perintah Jalankan mendukung penulisan output dan kesalahan ke Blob penyimpanan menggunakan parameter outputBlobUri dan errorBlobUri, yang dapat digunakan untuk menyimpan output skrip besar. Gunakan URI SAS dari blob penambahan penyimpanan dengan akses baca, tambahkan, buat, tulis. Blob harus berjenis AppendBlob. Menulis output skrip atau blob kesalahan akan gagal jika tidak. Blob akan ditimpa jika sudah ada. Blob akan dibuat jika tidak ada.
Cantumkan instans Perintah Eksekusi yang berjalan pada mesin virtual
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01
Dapatkan detail output untuk penyebaran Perintah Eksekusi tertentu
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2019-12-01
Menghapus penyebaran Perintah Jalankan tertentu
Menghapus instans Perintah Jalankan
DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2019-12-01
Menyebarkan skrip dalam urutan yang dipesan
Untuk menyebarkan skrip secara berurutan, gunakan templat penyebaran, tentukan hubungan dependsOn
di antara skrip berurutan.
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"secondRunCommand",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":<full resourceID of the previous other Run Command>,
"properties":{
"source":{
"script":"echo Hello World!"
},
"timeoutInSeconds":60
}
}
Menjalankan beberapa Perintah Eksekusi secara berurutan
Secara default, jika Anda menyebarkan beberapa sumber daya RunCommand menggunakan templat penyebaran, sumber daya tersebut akan dieksekusi secara bersamaan di mesin virtual. Jika Anda memiliki ketergantungan pada skrip dan urutan eksekusi yang disukai, Anda dapat menggunakan properti dependsOn
untuk menjalankannya secara berurutan.
Dalam contoh ini, secondRunCommand akan mengeksekusi setelah FirstRunCommand.
{
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion":"1.0.0.0",
"resources":[
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"[concat(parameters('vmName'),'/firstRunCommand')]",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":[
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
],
"properties":{
"source":{
"script":"echo First: Hello World!"
},
"parameters":[
{
"name":"param1",
"value":"value1"
},
{
"name":"param2",
"value":"value2"
}
],
"timeoutInSeconds":20
}
},
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"[concat(parameters('vmName'),'/secondRunCommand')]",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":[
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'),'runcommands/firstRunCommand')]"
],
"properties":{
"source":{
"scriptUri":"http://github.com/myscript.ps1"
},
"timeoutInSeconds":60
}
}
]
}
Langkah berikutnya
Untuk mempelajari tentang cara lain menjalankan skrip dan perintah dari jarak jauh di komputer virtual Anda, lihat Menjalankan skrip di komputer virtual Linux Anda.