Menggunakan skrip penyebaran dalam templat ARM
Pelajari cara menggunakan skrip penyebaran di templat Azure Resource Manager (ARM). deploymentScripts
Dengan sumber daya, pengguna dapat menjalankan skrip dalam penyebaran ARM dan meninjau hasil eksekusi.
Tip
Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari selengkapnya, lihat Skrip penyebaran.
Skrip ini dapat digunakan untuk melakukan langkah-langkah kustom seperti:
- Menambahkan pengguna ke direktori.
- Melakukan operasi data plane, misalnya, menyalin blob atau database benih.
- Mencari dan memvalidasi kunci lisensi.
- Membuat sertifikat yang ditandatangani sendiri.
- Buat objek di ID Microsoft Entra.
- Mencari blok Alamat IP dari sistem kustom.
Manfaat skrip penyebaran:
- Mudah untuk di-code, gunakan, dan di-debug. Anda dapat mengembangkan skrip penyebaran di lingkungan pengembangan favorit Anda. Skrip dapat di-embed dalam templat atau dalam file skrip eksternal.
- Anda dapat menentukan bahasa dan platform skrip. Saat ini, skrip penyebaran Azure PowerShell dan Azure CLI di lingkungan Linux didukung.
- Memungkinkan melewati argumen baris perintah ke skrip.
- Dapat menentukan output skrip dan meneruskannya kembali ke penyebaran.
Sumber daya skrip penyebaran hanya tersedia di wilayah tempat Instans Kontainer Azure tersedia. Lihat Ketersediaan sumber daya untuk Azure Container Instances di wilayah Azure. Saat ini, skrip penyebaran hanya menggunakan jaringan publik.
Penting
Layanan skrip penyebaran memerlukan dua sumber daya pendukung untuk eksekusi dan pemecahan masalah skrip: akun penyimpanan dan instans kontainer. Anda dapat menentukan akun penyimpanan yang ada, jika tidak, layanan skrip membuatnya untuk Anda. Dua sumber daya pendukung yang dibuat secara otomatis biasanya dihapus oleh layanan skrip saat eksekusi skrip penyebaran masuk dalam status terminal. Anda ditagih untuk sumber daya pendukung hingga dihapus. Untuk informasi harga, lihat Harga Instans Kontainer dan Microsoft Azure Storage. Untuk mempelajari lebih lanjut, lihat Membersihkan sumber daya skrip penyebaran.
Catatan
Coba lagi logika untuk masuk Azure sekarang disertakan ke skrip wrapper. Jika Anda memberikan izin ke templat yang sama dengan skrip penyebaran Anda, layanan skrip penyebaran mencoba masuk kembali selama 10 menit dengan interval 10 detik hingga penetapan peran identitas terkelola berhasil direplikasi.
Sumber daya pelatihan
Jika Anda lebih suka mempelajari tentang skrip penyebaran melalui panduan langkah demi langkah, lihat Memperluas templat ARM dengan menggunakan skrip penyebaran.
Mengonfigurasi izin minimum
Untuk API skrip penyebaran versi 2020-10-01 atau yang lebih baru, ada dua prinsip yang terlibat dalam eksekusi skrip penyebaran:
Prinsip penyebaran (prinsip yang digunakan untuk menyebarkan templat): prinsip digunakan untuk membuat sumber daya yang mendasari yang diperlukan agar sumber daya skrip penyebaran dapat dijalankan — akun penyimpanan dan instans kontainer Azure. Untuk mengonfigurasi izin hak istimewa paling sedikit, tetapkan peran kustom dengan properti berikut ke prinsip penyebaran:
{ "roleName": "deployment-script-minimum-privilege-for-deployment-principal", "description": "Configure least privilege for the deployment principal in deployment script", "type": "customRole", "IsCustom": true, "permissions": [ { "actions": [ "Microsoft.Storage/storageAccounts/*", "Microsoft.ContainerInstance/containerGroups/*", "Microsoft.Resources/deployments/*", "Microsoft.Resources/deploymentScripts/*" ], } ], "assignableScopes": [ "[subscription().id]" ] }
Jika Penyimpanan Azure dan penyedia sumber daya Instans Kontainer Azure belum terdaftar, Anda juga perlu menambahkan
Microsoft.Storage/register/action
danMicrosoft.ContainerInstance/register/action
.Prinsip skrip penyebaran: Prinsip ini hanya diperlukan jika skrip penyebaran perlu melakukan autentikasi ke Azure dan memanggil Azure CLI/PowerShell. Ada dua cara untuk menentukan prinsip skrip penyebaran:
- Tentukan identitas terkelola yang ditetapkan pengguna di properti
identity
(lihat Contoh templat). Ketika ditentukan, layanan skrip memanggilConnect-AzAccount -Identity
sebelum meminta skrip penyebaran. Identitas terkelola harus memiliki akses yang diperlukan untuk menyelesaikan operasi dalam skrip. Saat ini, hanya identitas terkelola yang ditetapkan pengguna yang didukung untuk propertiidentity
. Untuk masuk dengan identitas yang berbeda, gunakan metode kedua dalam daftar ini. - Teruskan kredensial perwailan layanan sebagai variabel lingkungan yang aman, dan kemudian dapat menghubungi Connect-AzAccount atau az login dalam skrip penyebaran.
Jika identitas terkelola digunakan, prinsip penyebaran memerlukan peran Operator Identitas Terkelola (peran bawaan) yang ditetapkan ke sumber daya identitas terkelola.
- Tentukan identitas terkelola yang ditetapkan pengguna di properti
Contoh templat
JSON berikut adalah contohnya. Untuk informasi selengkapnya, lihat skema templat terbaru.
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "runPowerShellInline",
"location": "[resourceGroup().location]",
"tags": {
"tagName1": "tagValue1",
"tagName2": "tagValue2"
},
"kind": "AzurePowerShell", // or "AzureCLI"
"identity": {
"type": "userAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myID": {}
}
},
"properties": {
"forceUpdateTag": "1",
"containerSettings": {
"containerGroupName": "mycustomaci"
},
"storageAccountSettings": {
"storageAccountName": "myStorageAccount",
"storageAccountKey": "myKey"
},
"azPowerShellVersion": "9.7", // or "azCliVersion": "2.47.0",
"arguments": "-name \\\"John Dole\\\"",
"environmentVariables": [
{
"name": "UserName",
"value": "jdole"
},
{
"name": "Password",
"secureValue": "jDolePassword"
}
],
"scriptContent": "
param([string] $name)
$output = 'Hello {0}. The username is {1}, the password is {2}.' -f $name,${Env:UserName},${Env:Password}
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
", // or "primaryScriptUri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.ps1",
"supportingScriptUris":[],
"timeout": "PT30M",
"cleanupPreference": "OnSuccess",
"retentionInterval": "P1D"
}
}
Catatan
Contoh tersebut adalah untuk tujuan demonstrasi. Properti scriptContent
dan primaryScriptUri
tidak bisa ada secara bersamaan dalam sebuah templat.
Catatan
scriptContentmemperlihatkan skrip dengan beberapa baris. portal Microsoft Azure dan pipeline Azure DevOps tidak dapat mengurai skrip penyebaran dengan beberapa baris. Anda dapat merantai perintah PowerShell (menggunakan titik koma atau \r\n atau \n) ke dalam satu baris, atau menggunakan properti primaryScriptUri
dengan file skrip eksternal. Ada banyak alat escape/ unescape string JSON gratis yang tersedia. Contohnya,https://www.freeformatter.com/json-escape.html.
Detail nilai properti:
identity
: Untuk deployment script API versi 2020-10-01 atau yang lebih baru, identitas terkelola yang ditetapkan pengguna bersifat opsional kecuali Jika Anda perlu melakukan tindakan khusus Azure dalam skrip. Untuk API versi 2019-10-01-preview, identitas terkelola diperlukan karena layanan skrip penyebaran menggunakannya untuk menjalankan skrip. Ketika properti identitas ditentukan, layanan skrip memanggilConnect-AzAccount -Identity
sebelum memanggil skrip pengguna. Saat ini, hanya identitas terkelola yang ditetapkan pengguna yang didukung. Untuk masuk dengan identitas yang berbeda, Anda dapat memanggil Connect-AzAccount dalam skrip.tags
: Tag skrip penyebaran. Jika layanan skrip penyebaran menghasilkan akun penyimpanan dan instans kontainer, tag diteruskan ke kedua sumber daya, yang dapat digunakan untuk mengidentifikasinya. Cara lain untuk mengidentifikasi sumber daya ini adalah melalui akhirannya, yang berisi "azscript". Untuk informasi selengkapnya, lihat Memantau dan memecahkan masalah skrip penyebaran.kind
: Menentukan jenis skrip. Saat ini, skrip Azure PowerShell dan Azure CLI didukung. Nilainya adalah AzurePowerShell dan AzureCLI.forceUpdateTag
: Mengubah nilai ini antara penyebaran template memaksa skrip penyebaran untuk menjalankan kembali. Jika Anda menggunakan fungsinewGuid()
atauutcNow()
, kedua fungsi hanya dapat digunakan dalam nilai default untuk parameter. Untuk mempelajari lebih lanjut, lihat Menjalankan skrip lebih dari sekali.containerSettings
: Tentukan pengaturan untuk menyesuaikan Instans Kontainer Azure. Skrip penerapan memerlukan Instans Kontainer Azure baru. Anda tidak dapat menentukan Instans Kontainer Azure yang sudah ada. Namun, Anda dapat menyesuaikan nama grup kontainer dengan menggunakancontainerGroupName
. Jika tidak ditentukan, nama grup dibuat secara otomatis.storageAccountSettings
: Tentukan pengaturan untuk menggunakan akun penyimpanan yang ada. JikastorageAccountName
tidak ditentukan, akun penyimpanan akan dibuat secara otomatis. Lihat Menggunakan akun penyimpanan yang sudah ada.azPowerShellVersion
/azCliVersion
: Menentukan versi model yang akan digunakan. Lihat daftar versi Azure PowerShell yang didukung. Versi menentukan gambar kontainer mana yang akan digunakan:- Versi Az yang lebih besar dari atau sama dengan 9 menggunakan Ubuntu 22.04.
- Versi Az lebih besar dari atau sama dengan 6 tetapi kurang dari 9 menggunakan Ubuntu 20.04.
- Versi Az kurang dari 6 menggunakan Ubuntu 18.04.
Penting
Dianjurkan untuk meningkatkan ke versi terbaru Ubuntu, karena Ubuntu 18.04 mendekati akhir masa pakainya dan tidak akan lagi menerima pembaruan keamanan melebihi 31 Mei 2023.
Lihat daftar versi Azure CLI yang didukung.
Penting
Skrip penerapan menggunakan gambar CLI yang tersedia dari Microsoft Container Registry (MCR). Biasanya diperlukan waktu sekitar satu bulan untuk mensertifikasi gambar CLI untuk skrip penyebaran. Jangan gunakan versi CLI yang dirilis dalam waktu 30 hari. Untuk menemukan tanggal rilis untuk gambar, lihat Catatan rilis Azure CLI. Jika versi yang tidak didukung digunakan, pesan kesalahan mencantumkan versi yang didukung.
arguments
: Menentukan nilai parameter. Nilai dipisahkan oleh spasi.Deployment Scripts membagi argumen menjadi array string dengan memanggil panggilan sistem CommandLineToArgvW. Langkah ini diperlukan karena argumen diteruskan sebagai properti perintah ke Instans Kontainer Azure, dan properti perintah adalah array string.
Jika argumen berisi karakter yang lolos, gunakan JsonEscaper untuk lolos dari karakter dua kali. Tempelkan string escaped asli Anda ke dalam alat, lalu pilih Escape. Alat ini mengeluarkan string double escaped. Misalnya, dalam templat sampel sebelumnya, Argumennya adalah
-name \"John Dole\"
. String yang lolos adalah-name \\\"John Dole\\\"
.Untuk meneruskan parameter template ARM dari tipe objek sebagai argumen, konversikan objek menjadi string dengan menggunakan fungsi string(), lalu gunakan fungsi replace() untuk mengganti
\"
apa pun menjadi\\\"
. Contohnya:replace(string(parameters('tables')), '\"', '\\\"')
Untuk informasi selengkapnya, lihat contoh templat.
environmentVariables
: Tentukan variabel lingkungan untuk meneruskan ke skrip. Untuk informasi selengkapnya, lihat Mengembangkan skrip penyebaran.scriptContent
: Menentukan konten skrip. Untuk menjalankan skrip eksternal, gunakanprimaryScriptUri
sebagai gantinya. Misalnya, lihat Menggunakan skrip sebaris dan Menggunakan skrip eksternal.primaryScriptUri
: Tentukan URL yang dapat diakses publik ke skrip penyebaran utama dengan ekstensi file yang didukung. Untuk informasi selengkapnya, lihat Menggunakan skrip eksternal.supportingScriptUris
: Tentukan array URL yang dapat diakses publik untuk mendukung file yang dipanggil baikscriptContent
atauprimaryScriptUri
. Untuk informasi selengkapnya, lihat Menggunakan skrip eksternal.timeout
: Menentukan waktu eksekusi skrip maksimum yang diizinkan yang ditentukan dalam format ISO 8601. Nilai default adalah P1D.cleanupPreference
. Tentukan preferensi membersihkan dua sumber daya penyebaran pendukung, akun penyimpanan dan instans kontainer, saat eksekusi skrip masuk dalam status terminal. Pengaturan default adalah Always, yang berarti menghapus sumber daya pendukung meskipun status terminal (Berhasil, Gagal, Dibatalkan). Untuk mempelajari lebih lanjut, lihat Membersihkan sumber daya skrip penerapan.retentionInterval
: Tentukan interval di mana layanan mempertahankan sumber daya skrip penyebaran setelah eksekusi skrip penyebaran mencapai status terminal. Sumber daya skrip penyebaran dihapus ketika durasi ini kedaluwarsa. Durasi didasarkan pada pola ISO 8601 . Interval retensi antara 1 dan 26 jam (PT26H). Properti ini digunakan ketikacleanupPreference
diatur ke OnExpiration. Untuk mempelajari lebih lanjut, lihat Membersihkan sumber daya skrip penerapan.
Sampel lainnya
- Sampel 1: buat brankas kunci dan gunakan skrip penyebaran untuk menetapkan sertifikat ke key vault.
- Sampel 2: buat grup sumber daya di tingkat langganan, buat brankas kunci di grup sumber daya, lalu gunakan skrip penyebaran untuk menetapkan sertifikat ke key vault.
- Sampel 3: buat identitas terkelola yang ditetapkan pengguna, tetapkan peran kontributor ke identitas di tingkat grup sumber daya, buat brankas kunci, lalu gunakan skrip penyebaran untuk menetapkan sertifikat ke brankas kunci.
- Sampel 4: skenarionya sama dengan Sampel 1 dalam daftar ini. Grup sumber daya baru dibuat untuk menjalankan skrip penyebaran. Templat ini adalah templat tingkat langganan.
- Sampel 5: skenarionya sama dengan Sampel 4. Templat ini merupakan templat tingkat grup sumber daya.
- Sampel 6: Buat identitas terkelola yang ditetapkan pengguna secara manual dan tetapkan izin untuk menggunakan Microsoft Graph API untuk membuat aplikasi Microsoft Entra; dalam templat ARM, gunakan skrip penyebaran untuk membuat aplikasi Microsoft Entra dan perwakilan layanan, dan menghasilkan ID objek dan ID klien.
Menggunakan skrip sebaris
Templat berikut ini memiliki satu sumber daya yang ditentukan dengan tipe Microsoft.Resources/deploymentScripts
tersebut. Bagian yang disorot adalah skrip sebaris.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string",
"defaultValue": "\\\"John Dole\\\""
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "runPowerShellInlineWithOutput",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azPowerShellVersion": "8.3",
"scriptContent": "
param([string] $name)
$output = \"Hello {0}\" -f $name
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"arguments": "[concat('-name', ' ', parameters('name'))]",
"timeout": "PT1H",
"cleanupPreference": "OnSuccess",
"retentionInterval": "P1D"
}
}
],
"outputs": {
"result": {
"value": "[reference('runPowerShellInlineWithOutput').outputs.text]",
"type": "string"
}
}
}
Catatan
Karena skrip penyebaran sebaris diapit dalam tanda kutip ganda, string di dalam skrip penyebaran harus diberi tanda escape menggunakan garis miring terbalik (\) atau diapit dalam tanda kutip tunggal. Anda juga dapat mempertimbangkan menggunakan substitusi string seperti yang ditunjukkan pada sampel JSON sebelumnya.
Skrip mengambil satu parameter, dan output nilai parameter. DeploymentScriptOutputs
digunakan untuk menyimpan output. Di bagian output, garis value
memperlihatkan cara mengakses nilai yang disimpan. Write-Output
digunakan untuk tujuan debugging. Untuk mempelajari cara mengakses file output, lihat Memantau dan memecahkan masalah skrip penyebaran. Untuk deskripsi properti, lihat Contoh templat.
Untuk menjalankan skrip, pilihTry ituntuk membuka Cloud Shell, lalu tempelkan kode berikut ke panel shell.
$resourceGroupName = Read-Host -Prompt "Enter the name of the resource group to be created"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.json"
Write-Host "Press [ENTER] to continue ..."
Output-nya terlihat seperti:
Menggunakan skrip eksternal
Selain skrip sebaris, Anda juga dapat menggunakan file skrip eksternal. Hanya skrip PowerShell utama dengan ekstensi file ps1 yang didukung. Untuk skrip CLI, skrip utama dapat memiliki ekstensi apa pun (atau tanpa ekstensi), selama skrip adalah skrip bash yang valid. Untuk menggunakan file skrip eksternal, ganti scriptContent
dengan primaryScriptUri
. Contohnya:
"primaryScriptUri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.ps1",
Untuk informasi selengkapnya, lihat contoh templat.
Berkas skrip eksternal harus bisa diakses. Untuk mengamankan file skrip Anda yang disimpan di akun penyimpanan Azure, buat token SAS dan sertakan dalam URI untuk templat. Atur waktu kedaluwarsa untuk memungkinkan cukup waktu menyelesaikan penerapan. Untuk informasi selengkapnya, lihat Menggunakan templat ARM pribadi dengan token SAS.
Anda bertanggung jawab untuk memastikan integritas skrip yang dirujuk oleh skrip penyebaran, baik primaryScriptUri
atau supportingScriptUris
. Hanya rujuk skrip yang Anda percayai.
Gunakan skrip pendukung
Anda dapat memisahkan logika yang rumit menjadi satu atau beberapa file skrip pendukung. Properti supportingScriptUris
ini memungkinkan Anda untuk memberikan berbagai URI ke file skrip pendukung jika diperlukan:
"scriptContent": "
...
./Create-Cert.ps1
...
"
"supportingScriptUris": [
"https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/create-cert.ps1"
],
File skrip pendukung dapat dipanggil dari skrip sebaris dan file skrip utama. Mendukung file skrip tidak memiliki batasan pada ekstensi file.
Berkas pendukung disalin ke azscripts/azscriptinput
pada waktu proses. Gunakan jalur relatif untuk mereferensikan file pendukung dari skrip sebaris dan file skrip utama.
Bekerja dengan output dari skrip PowerShell
Templat berikut menunjukkan bagaimana melewati nilai antara dua sumber daya deploymentScripts
:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string",
"defaultValue": "John Dole"
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "scriptInTemplate1",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azPowerShellVersion": "8.3",
"timeout": "PT1H",
"arguments": "[concat('-name', ' ', concat('\\\"', parameters('name'), '\\\"'))]",
"scriptContent": "
param([string] $name)
$output = 'Hello {0}' -f $name
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"cleanupPreference": "Always",
"retentionInterval": "P1D"
}
},
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "scriptInTemplate2",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"dependsOn": [
"scriptInTemplate1"
],
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azPowerShellVersion": "8.3",
"timeout": "PT1H",
"arguments": "[concat('-textToEcho', ' ', concat('\\\"', reference('scriptInTemplate1').outputs.text, '\\\"'))]",
"scriptContent": "
param([string] $textToEcho)
Write-Output $textToEcho
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $textToEcho
",
"cleanupPreference": "Always",
"retentionInterval": "P1D"
}
}
],
"outputs": {
"result": {
"value": "[reference('scriptInTemplate2').outputs.text]",
"type": "string"
}
}
}
Di sumber daya pertama, Anda mendefinisikan variabel yang disebut $DeploymentScriptOutputs
, dan menggunakannya untuk menyimpan nilai output. Untuk mengakses nilai output dari sumber daya lain dalam templat, gunakan:
reference('<ResourceName>').outputs.text
Bekerja dengan output dari skrip CLI
Berbeda dengan skrip penyebaran Azure PowerShell, CLI/bash tidak mengekspos variabel umum untuk menyimpan output skrip. Sebagai gantinya, ia menggunakan variabel lingkungan bernama AZ_SCRIPTS_OUTPUT_PATH
untuk menunjukkan lokasi file output skrip. Saat menjalankan skrip penyebaran dalam templat ARM, shell Bash secara otomatis mengonfigurasi variabel lingkungan ini untuk Anda. Nilai yang telah ditentukan sebelumnya ditetapkan sebagai /mnt/azscripts/azscriptoutput/scriptoutputs.json. Output diperlukan untuk sesuai dengan struktur objek string JSON yang valid. Konten file harus diformat sebagai pasangan kunci-nilai. Misalnya, array string harus disimpan sebagai { "MyResult": [ "foo", "bar"] }. Menyimpan hanya hasil array, seperti [ "foo", "bar" ], dianggap tidak valid.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"identity": {
"type": "string"
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "runBashWithOutputs",
"location": "[resourceGroup().location]",
"kind": "AzureCLI",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[parameters('identity')]": {
}
}
},
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"AzCliVersion": "2.40.0",
"timeout": "PT30M",
"arguments": "'foo' 'bar'",
"environmentVariables": [
{
"name": "UserName",
"value": "jdole"
},
{
"name": "Password",
"secureValue": "jDolePassword"
}
],
"scriptContent": "result=$(az keyvault list); echo \"arg1 is: $1\"; echo \"arg2 is: $2\"; echo \"Username is: $UserName\"; echo \"password is: $Password\"; echo $result | jq -c '{Result: map({id: .id})}' > $AZ_SCRIPTS_OUTPUT_PATH",
"cleanupPreference": "OnExpiration",
"retentionInterval": "P1D"
jq digunakan dalam sampel sebelumnya. Disertai dengan gambar kontainer. Lihat Mengonfigurasi lingkungan pengembangan.
Gunakan nama akun penyimpanan yang ada
Akun penyimpanan dan instans kontainer diperlukan untuk eksekusi dan pemecahan masalah skrip. Anda memiliki opsi untuk menentukan akun penyimpanan yang ada, jika tidak, akun penyimpanan bersama dengan instans kontainer secara otomatis dibuat oleh layanan skrip. Persyaratan untuk menggunakan akun penyimpanan yang ada:
Jenis akun penyimpanan yang didukung adalah:
SKU Jenis yang Didukung Premium_LRS FileStorage Premium_LRS FileStorage Standard_GRS Storage, StorageV2 Standard_GZRS StorageV2 Standard_LRS Storage, StorageV2 Standard_RAGRS Storage, StorageV2 Standard_RAGZRS StorageV2 Standard_LRS StorageV2 Kombinasi ini mendukung file share. Untuk informasi selengkapnya, lihat Membuat Azure file share dan Tipe akun penyimpanan.
Aturan firewall akun penyimpanan belum didukung. Untuk informasi selengkapnya, lihat Mengonfigurasi firewall Azure Storage dan jaringan virtual.
Deployment principal harus memiliki izin untuk mengelola akun penyimpanan, yang mencakup membaca, membuat, menghapus file share.
Properti
allowSharedKeyAccess
akun penyimpanan harus diatur ketrue
. Satu-satunya cara untuk memasang akun penyimpanan di Azure Container Instance (ACI) adalah melalui kunci akses.
Untuk menentukan akun penyimpanan yang sudah ada, tambahkan JSON berikut ke elemen properti Microsoft.Resources/deploymentScripts
:
"storageAccountSettings": {
"storageAccountName": "myStorageAccount",
"storageAccountKey": "myKey"
},
storageAccountName
: tentukan nama akun penyimpanan.storageAccountKey
: tentukan salah satu kunci akun penyimpan. Anda dapat menggunakan listKeys() fungsi untuk mengambil kunci. Contohnya:"storageAccountSettings": { "storageAccountName": "[variables('storageAccountName')]", "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value]" }
Lihat Sample templates untuk sampel definisi Microsoft.Resources/deploymentScripts
yang lengkap.
Saat akun penyimpanan yang ada digunakan, layanan skrip membuat file share dengan nama yang unik. Lihat Membersihkan sumber daya skrip penyebaran untuk cara layanan skrip membersihkan file share.
Mengembangkan skrip penyebaran
Menangani kesalahan yang tidak menentukan
Anda dapat mengontrol bagaimana PowerShell merespons kesalahan nonterminasi dengan menggunakan $ErrorActionPreference
variabel dalam skrip penyebaran Anda. Jika variabel tidak diatur dalam skrip penyebaran Anda, layanan skrip menggunakan nilai default Continue.
Layanan skrip mengatur status penyediaan sumber daya gagal ketika skrip menemui kesalahan terlepas dari pengaturan $ErrorActionPreference
.
Menggunakan variabel lingkungan
Skrip penerapan menggunakan variabel lingkungan ini:
Variabel lingkungan | Nilai default | Cadangan sistem |
---|---|---|
AZ_SCRIPTS_AZURE_ENVIRONMENT | AzureCloud | N |
AZ_SCRIPTS_CLEANUP_PREFERENCE | OnExpiration | N |
AZ_SCRIPTS_OUTPUT_PATH | <AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY>/<AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME> | Y |
AZ_SCRIPTS_PATH_INPUT_DIRECTORY | /mnt/azscripts/azscriptinput | Y |
AZ_SCRIPTS_PATH_INPUT_DIRECTORY | /mnt/azscripts/azscriptinput | Y |
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME | Azure PowerShell: userscript.ps1; Azure CLI: userscript.sh | Y |
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME | primaryscripturi.config | Y |
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME | supportingscripturi.config | Y |
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME | scriptoutputs.jspada | Y |
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME | executionresult.jspada | Y |
AZ_SCRIPTS_USER_ASSIGNED_IDENTITY | /subscriptions/ | N |
Untuk informasi selengkapnya tentang menggunakan AZ_SCRIPTS_OUTPUT_PATH
, lihat Bekerja dengan output dari skrip CLI.
Berikan string aman ke skrip penyebaran
Mengatur variabel lingkungan (EnvironmentVariable) dalam instans kontainer Anda memungkinkan Anda untuk memberikan konfigurasi dinamis dari aplikasi atau skrip yang dijalankan oleh kontainer. Skrip penyebaran menangani variabel lingkungan yang tidak aman dan aman dengan cara yang sama seperti Azure Container Instance. Untuk informasi selengkapnya, lihat Mengatur variabel lingkungan dalam instans kontainer. Misalnya, lihat Contoh templat.
Ukuran maksimum yang diperbolehkan untuk variabel lingkungan adalah 64 KB.
Memantau dan memecahkan masalah skrip penyebaran
Layanan skrip membuat akun penyimpanan (kecuali Jika Anda menentukan akun penyimpanan yang ada) dan instans kontainer untuk eksekusi skrip. Jika sumber daya ini secara otomatis dibuat oleh layanan skrip, kedua sumber daya memiliki akhiran azscripts
dalam nama sumber daya.
Skrip pengguna, hasil eksekusi, dan file stdout disimpan dalam file share akun penyimpanan. Ada folder bernama azscripts
. Dalam folder, ada dua folder lagi untuk file input dan output: azscriptinput
dan azscriptoutput
.
Folder output berisi executionresult.json dan file output skrip. Anda dapat melihat pesan kesalahan eksekusi skrip executionresult.jsdi. Ouput file dibuat hanya ketika skrip berhasil dijalankan. Folder input berisi file skrip PowerShell sistem dan file skrip penerapan pengguna. Anda dapat mengganti file skrip penyebaran pengguna dengan file yang direvisi, dan menjalankan ulang skrip penyebaran dari instans kontainer Azure.
Menggunakan portal Azure
Setelah Anda menerapkan sumber daya skrip penyebaran, sumber daya tercantum di bawah grup sumber daya di portal Microsoft Azure. Screenshot berikut ini memperlihatkan halaman Overview dari sumber daya skrip penyebaran:
Halaman overview menampilkan beberapa informasi penting tentang sumber daya, seperti status Penyediaan, akun Penyimpanan, instans kontainer, dan Log.
Dari menu sebelah kiri, Anda dapat melihat konten skrip penyebaran, argumen yang diteruskan ke skrip, dan output. Anda juga dapat mengekspor templat untuk skrip penyebaran termasuk skrip penyebaran.
Menggunakan PowerShell
Menggunakan Azure PowerShell, Anda bisa mengelola skrip penyebaran di lingkup langganan atau grup sumber daya:
- Get-AzDeploymentScript: Mendapatkan atau mencantumkan skrip penyebaran.
- Get-AzDeploymentScriptLog: Mendapatkan log eksekusi skrip penyebaran.
- Remove-AzDeploymentScript: Menghapus skrip penyebaran dan sumber daya terkait.
- Get-AzDeploymentScriptLog: Menyimpan log eksekusi skrip penyebaran.
Output Get-AzDeploymentScript
mirip dengan:
Name : runPowerShellInlineWithOutput
Id : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0618rg/providers/Microsoft.Resources/deploymentScripts/runPowerShellInlineWithOutput
ResourceGroupName : myds0618rg
Location : centralus
SubscriptionId : aaaabbbb-0000-cccc-1111-dddd2222eeee
ProvisioningState : Succeeded
Identity : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/mydentity1008rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami
ScriptKind : AzurePowerShell
AzPowerShellVersion : 9.7
StartTime : 5/11/2023 7:46:45 PM
EndTime : 5/11/2023 7:49:45 PM
ExpirationDate : 5/12/2023 7:49:45 PM
CleanupPreference : OnSuccess
StorageAccountId : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0618rg/providers/Microsoft.Storage/storageAccounts/ftnlvo6rlrvo2azscripts
ContainerInstanceId : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0618rg/providers/Microsoft.ContainerInstance/containerGroups/ftnlvo6rlrvo2azscripts
Outputs :
Key Value
================== ==================
text Hello John Dole
RetentionInterval : P1D
Timeout : PT1H
Gunakan Azure CLI
Menggunakan Azure CLI, Anda bisa mengelola skrip penyebaran di lingkup langganan atau grup sumber daya:
- az deployment-scripts delete: menghapus skrip penyebaran.
- az deployment-scripts list: membuat daftar skrip penyebaran.
- az deployment-scripts show: Mengambil kembali skrip penyebaran.
- az deployment-scripts show-log: menampilkan log skrip penyebaran.
Output daftar perintah mirip dengan:
[
{
"arguments": "'foo' 'bar'",
"azCliVersion": "2.40.0",
"cleanupPreference": "OnExpiration",
"containerSettings": {
"containerGroupName": null
},
"environmentVariables": null,
"forceUpdateTag": "20231101T163748Z",
"id": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.Resources/deploymentScripts/runBashWithOutputs",
"identity": {
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "userAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourcegroups/myidentity/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami": {
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"principalId": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
}
},
"kind": "AzureCLI",
"location": "centralus",
"name": "runBashWithOutputs",
"outputs": {
"Result": [
{
"id": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/mytest/providers/Microsoft.KeyVault/vaults/mykv1027",
"resourceGroup": "mytest"
}
]
},
"primaryScriptUri": null,
"provisioningState": "Succeeded",
"resourceGroup": "mytest",
"retentionInterval": "1 day, 0:00:00",
"scriptContent": "result=$(az keyvault list); echo \"arg1 is: $1\"; echo $result | jq -c '{Result: map({id: .id})}' > $AZ_SCRIPTS_OUTPUT_PATH",
"status": {
"containerInstanceId": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/mytest/providers/Microsoft.ContainerInstance/containerGroups/eg6n7wvuyxn7iazscripts",
"endTime": "2023-11-01T16:39:12.080950+00:00",
"error": null,
"expirationTime": "2023-11-02T16:39:12.080950+00:00",
"startTime": "2023-11-01T16:37:53.139700+00:00",
"storageAccountId": null
},
"storageAccountSettings": {
"storageAccountKey": null,
"storageAccountName": "dsfruro267qwb4i"
},
"supportingScriptUris": null,
"systemData": {
"createdAt": "2023-10-31T19:06:57.060909+00:00",
"createdBy": "someone@contoso.com",
"createdByType": "User",
"lastModifiedAt": "2023-11-01T16:37:51.859570+00:00",
"lastModifiedBy": "someone@contoso.com",
"lastModifiedByType": "User"
},
"tags": null,
"timeout": "0:30:00",
"type": "Microsoft.Resources/deploymentScripts"
}
]
Menggunakan REST API
Anda bisa mendapatkan informasi penyebaran sumber daya skrip penyebaran di tingkat grup resource dan tingkat langganan dengan menggunakan REST API:
/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/microsoft.resources/deploymentScripts/<DeploymentScriptResourceName>?api-version=2020-10-01
/subscriptions/<SubscriptionID>/providers/microsoft.resources/deploymentScripts?api-version=2020-10-01
Contoh berikut menggunakan ARMClient:
armclient login
armclient get /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourcegroups/myrg/providers/microsoft.resources/deploymentScripts/myDeployementScript?api-version=2020-10-01
Output mirip dengan:
{
"kind": "AzurePowerShell",
"identity": {
"type": "userAssigned",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"userAssignedIdentities": {
"/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myidentity1008rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami": {
"principalId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444"
}
}
},
"location": "centralus",
"systemData": {
"createdBy": "someone@contoso.com",
"createdByType": "User",
"createdAt": "2023-05-11T02:59:04.7501955Z",
"lastModifiedBy": "someone@contoso.com",
"lastModifiedByType": "User",
"lastModifiedAt": "2023-05-11T02:59:04.7501955Z"
},
"properties": {
"provisioningState": "Succeeded",
"forceUpdateTag": "20220625T025902Z",
"azPowerShellVersion": "9.7",
"scriptContent": "\r\n param([string] $name)\r\n $output = \"Hello {0}\" -f $name\r\n Write-Output $output\r\n $DeploymentScriptOutputs = @{}\r\n $DeploymentScriptOutputs['text'] = $output\r\n ",
"arguments": "-name \\\"John Dole\\\"",
"retentionInterval": "P1D",
"timeout": "PT1H",
"containerSettings": {},
"status": {
"containerInstanceId": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.ContainerInstance/containerGroups/64lxews2qfa5uazscripts",
"storageAccountId": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.Storage/storageAccounts/64lxews2qfa5uazscripts",
"startTime": "2023-05-11T02:59:07.5951401Z",
"endTime": "2023-05-11T03:00:16.7969234Z",
"expirationTime": "2023-05-12T03:00:16.7969234Z"
},
"outputs": {
"text": "Hello John Dole"
},
"cleanupPreference": "OnSuccess"
},
"id": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.Resources/deploymentScripts/runPowerShellInlineWithOutput",
"type": "Microsoft.Resources/deploymentScripts",
"name": "runPowerShellInlineWithOutput"
}
REST API berikut mengembalikan log:
/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/microsoft.resources/deploymentScripts/<DeploymentScriptResourceName>/logs?api-version=2020-10-01
Ini hanya berfungsi sebelum sumber daya skrip penyebaran dihapus.
Untuk melihat sumber daya deploymentScripts di portal, pilih Show hidden types:
Membersihkan sumber daya skrip penyebaran
Kedua sumber daya pendukung yang dibuat secara otomatis tidak pernah dapat mengulurkan deploymentScript
sumber daya, kecuali ada kegagalan menghapusnya. Siklus hidup sumber daya pendukung dikendalikan oleh cleanupPreference
properti , siklus hidup sumber daya dikendalikan deploymentScript
oleh retentionInterval
properti :
cleanupPreference
: Tentukan preferensi pembersihan dua sumber daya pendukung saat eksekusi skrip masuk dalam status terminal. Nilai yang didukung adalah:Selalu: Hapus dua sumber daya pendukung setelah eksekusi skrip berada dalam status terminal. Jika akun penyimpanan yang ada digunakan, layanan skrip akan menghapus berbagi file yang dibuat oleh layanan.
deploymentScripts
Karena sumber daya mungkin masih ada setelah sumber daya pendukung dibersihkan, layanan skrip mempertahankan hasil eksekusi skrip, misalnya, stdout, output, dan nilai pengembalian sebelum sumber daya dihapus.OnSuccess: Hapus dua sumber daya pendukung hanya ketika eksekusi skrip berhasil. Jika akun penyimpanan yang ada digunakan, layanan skrip akan menghapus berbagi file hanya saat eksekusi skrip berhasil.
Jika eksekusi skrip tidak berhasil, layanan skrip menunggu hingga kedaluwarsa
retentionInterval
sebelum membersihkan sumber daya pendukung lalu sumber daya skrip penyebaran.OnExpiration: Hapus dua sumber daya pendukung hanya saat pengaturan kedaluwarsa
retentionInterval
. Jika akun penyimpanan yang ada digunakan, layanan skrip akan menghapus berbagi file yang dibuat di akun penyimpanan.
Instans kontainer dan akun penyimpanan dihapus sesuai dengan
cleanupPreference
. Namun, jika skrip gagal dancleanupPreference
tidak diatur ke Selalu, proses penyebaran secara otomatis menjaga kontainer tetap berjalan selama satu jam atau sampai kontainer dibersihkan. Anda dapat menggunakan waktu untuk memecahkan masalah skrip. Jika Anda ingin menjaga kontainer tetap berjalan setelah penyebaran berhasil, tambahkan langkah sleep ke skrip Anda. Misalnya, tambahkan Start-Sleep ke akhir skrip Anda. Jika Anda tidak menambahkan langkah sleep, kontainer diatur ke status terminal dan tidak dapat diakses meskipun belum dihapus.retentionInterval
: Tentukan interval waktu bahwadeploymentScript
sumber daya akan dipertahankan dan setelah itu akan kedaluwarsa dan dihapus.
Catatan
Tidak disarankan untuk menggunakan akun penyimpanan dan instans kontainer yang dihasilkan oleh layanan skrip untuk tujuan lain. Dua sumber daya mungkin dihapus tergantung pada siklus hidup skrip.
Akun penyimpanan dan instans kontainer yang dibuat secara otomatis tidak dapat dihapus jika skrip penyebaran disebarkan ke grup sumber daya dengan kunci CanNotDelete. Untuk mengatasi masalah ini, Anda dapat menyebarkan skrip penyebaran ke grup sumber daya lain tanpa kunci. Lihat Sampel 4 dan Sampel 5 dalam Templat sampel.
Jalankan skrip lebih dari sekali
Eksekusi skrip penyebaran adalah operasi yang tidak didemoten. Jika tidak ada sumber daya properti deploymentScripts
(termasuk skrip sebaris) yang diubah, skrip tidak dijalankan saat Anda melakukan redeploy template. Layanan skrip penyebaran membandingkan nama sumber daya dalam templat dengan sumber daya yang ada dalam grup sumber daya yang sama. Ada dua opsi jika Anda ingin menjalankan skrip penyebaran yang sama beberapa kali:
Ubah nama sumber daya
deploymentScripts
Anda. Misalnya, gunakan fungsi template utcNow sebagai nama sumber daya atau sebagai bagian dari nama sumber daya. Mengubah nama sumber daya akan membuat sumber dayadeploymentScripts
baru. Ini bagus untuk menjaga riwayat eksekusi skrip.Catatan
Fungsi
utcNow
ini hanya dapat digunakan dalam nilai default untuk parameter.Tentukan nilai yang berbeda dalam properti templat
forceUpdateTag
. Misalnya, gunakanutcNow
sebagai nilai.
Catatan
Tulis skrip penyebaran yang idempotent. Hal ini memastikan ketika menjalankannya lagi secara tidak sengaja, tidak akan menyebabkan perubahan sistem. Misalnya, jika skrip penyebaran digunakan untuk membuat sumber daya Azure, verifikasi sumber daya tidak ada sebelum membuatnya, sehingga skrip akan berhasil atau Anda tidak membuat sumber daya lagi.
Mengonfigurasi lingkungan pengembangan
Anda dapat menggunakan gambar kontainer yang telah dikonfigurasi sebelumnya sebagai lingkungan pengembangan skrip penyebaran Anda. Untuk informasi selengkapnya, lihat Mengonfigurasi lingkungan pengembangan untuk skrip penyebaran dalam templat.
Setelah skrip berhasil diuji, Anda dapat menggunakannya sebagai skrip penyebaran di templat Anda.
Kode kesalahan skrip penyebaran
Kode kesalahan | Deskripsi |
---|---|
DeploymentScriptInvalidOperation | Definisi sumber daya skrip penyebaran dalam templat berisi nama properti yang tidak valid. |
DeploymentScriptResourceConflict | Tidak dapat menghapus sumber daya skrip penyebaran yang dalam status nonterminal dan eksekusi belum melebihi 1 jam. Atau tidak dapat menjalankan ulang skrip penyebaran yang sama dengan pengidentifikasi sumber daya yang sama (langganan, nama grup sumber daya, dan nama sumber daya yang sama) tetapi konten isi skrip yang berbeda pada saat yang sama. |
DeploymentScriptOperationFailed | Operasi skrip penyebaran gagal secara internal. Hubungi dukungan Microsoft. |
DeploymentScriptStorageAccountAccessKeyNotSpecified | Kunci akses belum ditentukan untuk akun penyimpanan yang ada. |
DeploymentScriptContainerGroupContainsInvalidContainers | Grup kontainer yang dibuat oleh layanan skrip penyebaran dimodifikasi secara eksternal, dan kontainer yang tidak valid ditambahkan. |
DeploymentScriptContainerGroupInNonterminalState | Dua atau lebih sumber daya skrip penyebaran menggunakan nama instans kontainer Azure yang sama dalam grup sumber daya yang sama, dan salah satunya belum menyelesaikan eksekusinya. |
DeploymentScriptStorageAccountInvalidKind | Akun penyimpanan yang ada dari tipe BlobBlobStorage atau BlobStorage tidak mendukung file share, dan tidak dapat digunakan. |
DeploymentScriptStorageAccountInvalidKindAndSku | Akun penyimpanan yang ada tidak mendukung file share. Untuk daftar jenis akun penyimpanan yang didukung, lihat Menggunakan akun penyimpanan yang sudah ada. |
DeploymentScriptStorageAccountNotFound | Akun penyimpanan tidak ada atau telah dihapus oleh proses atau alat eksternal. |
DeploymentScriptStorageAccountWithServiceEndpointEnabled | Akun penyimpanan yang ditentukan memiliki titik akhir layanan. Akun penyimpanan dengan titik akhir layanan tidak didukung. |
DeploymentScriptStorageAccountInvalidAccessKey | Kunci akses tidak valid yang ditentukan untuk akun penyimpanan yang ada. |
DeploymentScriptStorageAccountInvalidAccessKeyFormat | Format kunci akun penyimpanan tidak valid. Lihat Mengelola kunci akses akun penyimpanan. |
DeploymentScriptExceededMaxAllowedTime | Waktu eksekusi skrip penyebaran melebihi nilai batas waktu yang ditentukan dalam definisi sumber daya skrip penyebaran. |
DeploymentScriptInvalidOutputs | Output skrip penyebaran bukan objek JSON yang valid. |
DeploymentScriptContainerInstancesServiceLoginFailure | Identitas terkelola yang ditetapkan pengguna tidak dapat masuk setelah 10 upaya dengan interval 1 menit. |
DeploymentScriptContainerGroupNotFound | Grup Kontainer yang dibuat oleh layanan skrip penyebaran dihapus oleh alat atau proses eksternal. |
DeploymentScriptDownloadFailure | Gagal mengunduh skrip pendukung. Lihat Menggunakan skrip pendukung. |
DeploymentScriptError | Skrip pengguna menghasilkan kesalahan. |
DeploymentScriptBootstrapScriptExecutionFailed | Skrip bootstrap menghasilkan kesalahan. Skrip Bootstrap adalah skrip sistem yang mengatur eksekusi skrip penyebaran. |
DeploymentScriptExecutionFailed | Kesalahan yang tak diketahui selama eksekusi skrip penyebaran. |
DeploymentScriptContainerInstancesServiceUnavailable | Saat membuat instans kontainer Azure (ACI), ACI menhasilkan kesalahan layanan yang tidak tersedia. |
DeploymentScriptContainerGroupInNonterminalState | Saat membuat instans kontainer Azure (ACI), skrip penyebaran lain menggunakan nama ACI yang sama dalam lingkup yang sama (langganan, nama grup sumber daya, dan nama sumber daya yang sama). |
DeploymentScriptContainerGroupNameInvalid | Nama instans kontainer Azure (ACI) yang ditentukan tidak memenuhi persyaratan ACI. Lihat Memecahkan masalah umum di Azure Container Instances. |
Menggunakan Microsoft Graph dalam skrip penyebaran
Skrip penyebaran dapat menggunakan Microsoft Graph untuk membuat dan bekerja dengan objek di ID Microsoft Entra.
Perintah
Saat menggunakan skrip penyebaran Azure CLI, Anda dapat menggunakan perintah dalam az ad
grup perintah untuk bekerja dengan aplikasi, perwakilan layanan, grup, dan pengguna. Anda juga dapat langsung memanggil MICROSOFT Graph API dengan menggunakan az rest
perintah .
Saat menggunakan skrip penyebaran Azure PowerShell, Anda dapat menggunakan Invoke-RestMethod
cmdlet untuk langsung memanggil API Microsoft Graph.
Izin
Identitas yang digunakan skrip penyebaran Anda perlu diotorisasi untuk bekerja dengan Microsoft Graph API, dengan izin yang sesuai untuk operasi yang dilakukannya. Anda harus mengotorisasi identitas di luar penyebaran templat Anda, seperti dengan membuat identitas terkelola yang ditetapkan pengguna sebelumnya dan menetapkan peran aplikasi untuk Microsoft Graph. Untuk informasi selengkapnya, lihat contoh mulai cepat ini.
Mengakses jaringan virtual privat
Dengan Microsoft.Resources/deploymentScripts versi 2023-08-01, Anda dapat menjalankan skrip penyebaran di jaringan privat dengan beberapa konfigurasi tambahan.
Buat identitas terkelola yang ditetapkan pengguna, dan tentukan di
identity
properti . Untuk menetapkan identitas, lihat Identitas.Buat akun penyimpanan dengan
allowSharedKeyAccess
diatur ketrue
, dan tentukan skrip penyebaran untuk menggunakan akun penyimpanan yang ada. Untuk menentukan akun penyimpanan yang sudah ada, lihat Menggunakan akun penyimpanan yang sudah ada. Beberapa konfigurasi tambahan diperlukan untuk akun penyimpanan.Buka akun penyimpanan di portal Azure.
Dari menu sebelah kiri, pilih Kontrol Akses (IAM), lalu pilih tab Penetapan peran.
Storage File Data Privileged Contributor
Tambahkan peran ke identitas terkelola penetapan pengguna.Dari menu sebelah kiri, di bawah Keamanan + jaringan, pilih Jaringan, lalu pilih Firewall dan jaringan virtual.
Pilih Diaktifkan dari jaringan virtual dan alamat IP yang dipilih.
Di bawah Jaringan virtual, tambahkan subnet. Pada cuplikan layar, subnet disebut dspvnVnet.
Di bawah Pengecualian, pilih Izinkan layanan Azure pada daftar layanan tepercaya untuk mengakses akun penyimpanan ini.
Templat ARM berikut menunjukkan cara mengonfigurasi lingkungan untuk menjalankan skrip penyebaran:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": {
"type": "string",
"maxLength": 10
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"userAssignedIdentityName": {
"type": "string",
"defaultValue": "[format('{0}Identity', parameters('prefix'))]"
},
"storageAccountName": {
"type": "string",
"defaultValue": "[format('{0}stg{1}', parameters('prefix'), uniqueString(resourceGroup().id))]"
},
"vnetName": {
"type": "string",
"defaultValue": "[format('{0}Vnet', parameters('prefix'))]"
},
"subnetName": {
"type": "string",
"defaultValue": "[format('{0}Subnet', parameters('prefix'))]"
}
},
"resources": [
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2023-09-01",
"name": "[parameters('vnetName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/16"
]
},
"enableDdosProtection": false,
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"addressPrefix": "10.0.0.0/24",
"serviceEndpoints": [
{
"service": "Microsoft.Storage"
}
],
"delegations": [
{
"name": "Microsoft.ContainerInstance.containerGroups",
"properties": {
"serviceName": "Microsoft.ContainerInstance/containerGroups"
}
}
]
}
}
]
}
},
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"networkAcls": {
"bypass": "AzureServices",
"virtualNetworkRules": [
{
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), parameters('subnetName'))]",
"action": "Allow",
"state": "Succeeded"
}
],
"defaultAction": "Deny"
},
"allowSharedKeyAccess": true
},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetName'))]"
]
},
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"apiVersion": "2023-07-31-preview",
"name": "[parameters('userAssignedIdentityName')]",
"location": "[parameters('location')]"
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"scope": "[format('Microsoft.Storage/storageAccounts/{0}', parameters('storageAccountName'))]",
"name": "[guid(tenantResourceId('Microsoft.Authorization/roleDefinitions', '69566ab7-960f-475b-8e7c-b3118f30c6bd'), resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]",
"properties": {
"principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')), '2023-07-31-preview').principalId]",
"roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', '69566ab7-960f-475b-8e7c-b3118f30c6bd')]",
"principalType": "ServicePrincipal"
},
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName'))]"
]
}
]
}
Anda dapat menggunakan templat ARM berikut untuk menguji penyebaran:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
},
"storageAccountName": {
"type": "string"
},
"vnetName": {
"type": "string"
},
"subnetName": {
"type": "string"
},
"userAssignedIdentityName": {
"type": "string"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2023-08-01",
"name": "[format('{0}DS', parameters('prefix'))]",
"location": "[parameters('location')]",
"identity": {
"type": "userAssigned",
"userAssignedIdentities": {
"[format('{0}', resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')))]": {}
}
},
"kind": "AzureCLI",
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azCliVersion": "2.47.0",
"storageAccountSettings": {
"storageAccountName": "[parameters('storageAccountName')]"
},
"containerSettings": {
"subnetIds": [
{
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), parameters('subnetName'))]"
}
]
},
"scriptContent": "echo \"Hello world!\"",
"retentionInterval": "P1D",
"cleanupPreference": "OnExpiration"
}
}
]
}
Langkah berikutnya
Dalam artikel ini, Anda telah mempelajari cara menggunakan skrip penyebaran. Untuk menelusuri tutorial skrip penyebaran: