Bagikan melalui


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 akan segera tersedia.

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

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 akan mengirimkan skrip ke mesin virtual, mengeksekusinya, 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 akan mengembalikan daftar lengkap Perintah Eksekusi yang sebelumnya digunakan bersama dengan propertinya.

az vm run-command list --vm-name "myVM" --resource-group "myRG"

Dapatkan status eksekusi dan hasil

Perintah ini akan mengambil progres eksekusi saat ini, termasuk output terbaru, waktu mulai/akhir, 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 akan mengirimkan skrip ke mesin virtual, mengeksekusinya, 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>”

Cantumkan semua sumber daya RunCommand yang disebarkan di mesin virtual

Perintah ini akan mengembalikan daftar lengkap Perintah Eksekusi yang sebelumnya digunakan bersama dengan propertinya.

Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"

Dapatkan status eksekusi dan hasil

Perintah ini akan mengambil progres eksekusi saat ini, termasuk output terbaru, waktu mulai/akhir, 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 Jalankan Perintah (Berhasil, Gagal, dll.), kode keluar, output standar, dan kesalahan standar yang dihasilkan dengan menjalankan skrip menggunakan Perintah Jalankan. ExitCode bukan nol menunjukkan eksekusi yang gagal.

$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 commandIdsebelumnya. 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 untuk 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.

GET /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.