Mengembangkan skrip penyebaran di Bicep
Artikel ini menyediakan contoh untuk menunjukkan kepada Anda cara mengembangkan skrip penyebaran di Bicep.
Sumber daya skrip penyebaran mungkin memiliki durasi penyebaran. Untuk pengembangan dan pengujian skrip ini yang efisien, pertimbangkan untuk membuat lingkungan pengembangan khusus, seperti instans kontainer Azure (ACI) atau instans Docker. Untuk informasi selengkapnya, lihat Membuat lingkungan pengembangan.
Sintaks
File Bicep berikut adalah contoh sumber daya skrip penyebaran. Untuk informasi selengkapnya, lihat skema skrip penyebaran terbaru.
resource <symbolic-name> 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: '<resource-name>'
location: resourceGroup().location
tags: {}
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'<user-assigned-identity-id>': {}
}
}
kind: 'AzureCLI'
properties: {
storageAccountSettings: {
storageAccountName: '<storage-account-name>'
storageAccountKey: '<storage-account-key>'
}
containerSettings: {
containerGroupName: '<container-group-name>'
subnetIds: [
{
id: '<subnet-id>'
}
]
}
environmentVariables: []
azCliVersion: '2.52.0'
arguments: '<script-arguments>'
scriptContent: '''<azure-cli-or-azure-powershell-script>''' // or primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/inlineScript.ps1'
supportingScriptUris: []
timeout: 'P1D'
cleanupPreference: 'OnSuccess'
retentionInterval: 'P1D'
forceUpdateTag: '1'
}
}
Dalam skrip penyebaran Anda, tentukan nilai properti ini:
tags
: Tentukan tag skrip penyebaran. Jika layanan skrip penyebaran membuat dua sumber daya pendukung (akun penyimpanan dan instans kontainer), tag diteruskan ke kedua sumber daya. Anda dapat menggunakan tag untuk mengidentifikasi sumber daya. Cara lain untuk mengidentifikasi sumber daya pendukung ini adalah melalui akhirannya, yang berisi azscript. Untuk informasi selengkapnya, lihat Memantau dan memecahkan masalah skrip penyebaran.identity
: Untuk versi API skrip penyebaran atau yang2020-10-01
lebih baru, identitas terkelola yang ditetapkan pengguna bersifat opsional kecuali Anda perlu melakukan tindakan khusus Azure dalam skrip atau Anda menjalankan skrip penyebaran di jaringan privat. Versi2019-10-01-preview
API memerlukan identitas terkelola karena layanan skrip penyebaran menggunakannya untuk menjalankan skrip.Saat Anda menentukan
identity
properti , 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 dalam skrip penyebaran, Anda dapat memanggil Connect-AzAccount. Untuk informasi selengkapnya, lihat Mengonfigurasi izin minimum.kind
: Tentukan jenis skrip, baikAzurePowerShell
atauAzureCLI
. Selainkind
, Anda perlu menentukanazPowerShellVersion
properti atauazCliVersion
.storageAccountSettings
: Tentukan pengaturan untuk menggunakan akun penyimpanan yang ada. JikastorageAccountName
tidak ditentukan, akun penyimpanan akan dibuat secara otomatis. Untuk informasi selengkapnya, lihat Menggunakan akun penyimpanan yang sudah ada.containerSettings
: Sesuaikan nama instans kontainer Azure. Untuk informasi tentang mengonfigurasi nama grup kontainer, lihat Mengonfigurasi instans kontainer nanti di artikel ini. Untuk informasi tentang mengonfigurasisubnetIds
untuk menjalankan skrip penyebaran di jaringan privat, lihat Mengakses jaringan virtual privat.environmentVariables
: Tentukan variabel lingkungan yang akan diteruskan ke skrip.azPowerShellVersion
/azCliVersion
: Tentukan versi modul yang akan digunakan.Lihat daftar versi Azure CLI yang didukung.
Penting
Skrip penyebaran menggunakan gambar CLI yang tersedia dari Registri Artefak Microsoft. Biasanya diperlukan waktu sekitar satu bulan untuk mensertifikasi gambar CLI untuk skrip penyebaran. Jangan gunakan versi CLI yang dirilis dalam 30 hari terakhir. Untuk menemukan tanggal rilis untuk gambar, lihat Catatan rilis Azure CLI. Jika Anda menggunakan versi yang tidak didukung, pesan kesalahan mencantumkan versi yang didukung.
arguments
: Menentukan nilai parameter. Nilai dipisahkan oleh spasi.Skrip penyebaran membagi argumen menjadi array string dengan memanggil panggilan sistem CommandLineToArgvW . Langkah ini diperlukan karena argumen diteruskan sebagai properti perintah ke Azure Container Instances, dan properti perintah adalah array string.
Jika argumen berisi karakter yang lolos, lepaskan karakter dua kali. Misalnya, dalam contoh sintaks Bicep sebelumnya, argumennya adalah
-name \"John Dole\"
. String yang lolos adalah-name \\"John Dole\\"
.Untuk meneruskan parameter
object
Jenis Bicep sebagai argumen, konversikan objek menjadi string dengan menggunakan fungsi string(), lalu gunakan fungsi replace() untuk mengganti tanda kutip apa pun ("
) dengan tanda kutip yang diloloskan ganda (\\"
). Contohnya:replace(string(parameters('tables')), '"', '\\"')
Untuk informasi selengkapya, lihat sampel file Bicep.
scriptContent
: Menentukan konten skrip. Ini bisa menjadi skrip sebaris atau file skrip eksternal yang Anda impor dengan menggunakan fungsi loadTextContent . Untuk informasi selengkapnya, lihat Sebaris vs. file eksternal nanti di artikel ini. Untuk menjalankan skrip eksternal, gunakanprimaryScriptUri
sebagai gantinya.primaryScriptUri
: Tentukan URL yang dapat diakses publik ke skrip penyebaran utama dengan ekstensi file yang didukung. Untuk informasi selengkapnya, lihat Menggunakan skrip eksternal nanti di artikel ini.supportingScriptUris
: Tentukan array URL yang dapat diakses publik untuk mendukung file yang dipanggil baikscriptContent
atauprimaryScriptUri
. Untuk informasi selengkapnya, lihat Sebaris vs. file eksternal nanti di artikel ini.timeout
: Tentukan waktu maksimum yang diizinkan untuk eksekusi skrip, dalam format ISO 8601. Nilai defaultnya adalahP1D
.forceUpdateTag
: Mengubah nilai ini antara penyebaran file Bicep memaksa skrip penyebaran dijalankan lagi. Jika Anda menggunakannewGuid()
fungsi atauutcNow()
, Anda hanya dapat menggunakannya dalam nilai default untuk parameter. Untuk mempelajari selengkapnya, lihat Menjalankan skrip lebih dari sekali nanti di artikel ini.cleanupPreference
. Tentukan preferensi untuk membersihkan dua sumber daya penyebaran pendukung (akun penyimpanan dan instans kontainer) saat eksekusi skrip berada dalam status terminal. Pengaturan default adalahAlways
, yang memanggil penghapusan sumber daya pendukung terlepas dari status terminal (Succeeded
,Failed
, atauCanceled
). Untuk mempelajari selengkapnya, lihat Membersihkan sumber daya skrip penyebaran nanti di artikel ini.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 adalah antara 1 jam (PT1H
) dan 26 jam (PT26H
). Anda menggunakan properti ini ketikacleanupPreference
diatur keOnExpiration
. Untuk mempelajari selengkapnya, lihat Membersihkan sumber daya skrip penyebaran nanti di artikel ini.
Sampel lainnya
- Sampel 1: Buat brankas kunci dan gunakan skrip penyebaran untuk menetapkan sertifikat ke brankas kunci.
- Sampel 2: Buat grup sumber daya di tingkat langganan, buat brankas kunci di grup sumber daya, lalu gunakan skrip penyebaran untuk menetapkan sertifikat ke brankas kunci.
- 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: Buat identitas terkelola yang ditetapkan pengguna secara manual dan tetapkan izin untuk menggunakan Microsoft Graph API untuk membuat aplikasi Microsoft Entra. Dalam file Bicep, gunakan skrip penyebaran untuk membuat aplikasi Microsoft Entra dan perwakilan layanan, dan untuk menghasilkan ID objek dan ID klien.
File sebaris vs. eksternal
Skrip penyebaran dapat berada dalam file Bicep, atau Anda dapat menyimpannya secara eksternal sebagai file terpisah.
Menggunakan skrip sebaris
File Bicep berikut menunjukkan cara menggunakan skrip sebaris.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'inlineCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: 'set -e; output="Hello $1"; echo $output'
retentionInterval: 'P1D'
}
}
Sertakan set -e
dalam skrip Anda untuk mengaktifkan keluar segera jika perintah mengembalikan status bukan nol. Praktik ini menyederhanakan proses penelusuran kesalahan.
Memuat file skrip
Gunakan fungsi loadTextContent untuk mengambil file skrip sebagai string. Fungsi ini memungkinkan Anda mempertahankan skrip dalam file eksternal dan mengaksesnya sebagai skrip penyebaran. Jalur yang ditentukan untuk file skrip relatif terhadap file Bicep.
Anda dapat mengekstrak skrip sebaris dari file Bicep sebelumnya ke dalam file hello.sh , lalu menempatkan file ke dalam subfolder yang disebut skrip.
output="Hello $1"
echo $output
Kemudian, Anda dapat merevisi file Bicep sebelumnya seperti contoh berikut:
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'loadTextContentCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: loadTextContent('./scripts/hello.sh')
retentionInterval: 'P1D'
}
}
Menggunakan skrip eksternal
Anda dapat menggunakan file skrip eksternal alih-alih skrip sebaris. Hanya skrip PowerShell utama dengan ekstensi .ps1 yang didukung. Untuk skrip CLI, skrip utama dapat membawa ekstensi skrip Bash yang valid atau tidak memiliki ekstensi sama sekali. Untuk menggunakan file skrip eksternal, tukar scriptContent
dengan primaryScriptUri
.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'externalScriptCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/hello.sh'
arguments: '-name ${name}'
retentionInterval: 'P1D'
}
}
Berkas skrip eksternal harus bisa diakses. Untuk membantu mengamankan file skrip Anda yang disimpan di akun penyimpanan Azure, buat token tanda tangan akses bersama (SAS) dan sertakan dalam URI untuk templat. Atur kedaluwarsa untuk memungkinkan cukup waktu untuk menyelesaikan penyebaran. Untuk informasi selengkapnya, lihat Menyebarkan templat ARM privat dengan token SAS.
Anda bertanggung jawab untuk memastikan integritas skrip yang direferensikan 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. supportingScriptUris
Gunakan properti untuk menyediakan array URI ke file skrip pendukung jika perlu.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'supportingScriptCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: 'output="Hello $1"; echo $output; ./hello.sh "$1"'
supportingScriptUris: [
'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/master/samples/deployment-script/hello.sh'
]
retentionInterval: 'P1D'
}
}
Anda dapat memanggil file skrip pendukung dari skrip sebaris dan file skrip utama. Mendukung file skrip tidak memiliki batasan pada ekstensi file.
File pendukung disalin ke azscripts/azscriptinput saat runtime. Gunakan jalur relatif untuk mereferensikan file pendukung dari skrip sebaris dan file skrip utama.
Mengakses sumber daya Azure
Untuk mengakses sumber daya Azure, Anda harus mengonfigurasi identity
elemen . File Bicep berikut menunjukkan cara mengambil daftar brankas kunci Azure. Memberikan izin identitas manajemen penetapan pengguna untuk mengakses brankas kunci juga diperlukan.
param identity string
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'listKvCLI'
location: location
kind: 'AzureCLI'
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${identity}': {}
}
}
properties: {
azCliVersion: '2.52.0'
scriptContent: 'result=$(az keyvault list); echo $result | jq -c \'{Result: map({id: .id})}\' > $AZ_SCRIPTS_OUTPUT_PATH'
retentionInterval: 'P1D'
}
}
output result object = deploymentScript.properties.outputs
Catatan
Logika coba lagi untuk masuk Azure sekarang dibangun ke skrip pembungkus. Jika Anda memberikan izin dalam file Bicep yang sama dengan skrip penyebaran Anda, layanan skrip penyebaran mencoba masuk kembali selama 10 menit (dengan interval 10 detik) hingga penetapan peran identitas terkelola direplikasi.
Bekerja dengan output
Pendekatan untuk menangani output bervariasi berdasarkan jenis skrip yang Anda gunakan—Azure CLI atau Azure PowerShell.
Skrip penyebaran Azure CLI menggunakan variabel lingkungan bernama AZ_SCRIPTS_OUTPUT_PATH
untuk menunjukkan lokasi file untuk output skrip. Saat Anda menjalankan skrip penyebaran dalam file Bicep, shell Bash secara otomatis mengonfigurasi variabel lingkungan ini untuk Anda. Nilai yang telah ditentukan sebelumnya ditetapkan sebagai /mnt/azscripts/azscriptoutput/scriptoutputs.json
.
Output harus sesuai dengan struktur objek string JSON yang valid. Konten file harus diformat sebagai pasangan kunci/nilai. Misalnya, simpan array string sebagai { "MyResult": [ "foo", "bar"] }
. Menyimpan hanya hasil array, seperti [ "foo", "bar" ]
, tidak valid.
param name string = 'John Dole'
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'outputCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
arguments: name
scriptContent: 'jq -n -c --arg st "Hello ${name}" \'{"text": $st}\' > $AZ_SCRIPTS_OUTPUT_PATH'
retentionInterval: 'P1D'
}
}
output text string = deploymentScript.properties.outputs.text
Sampel sebelumnya menggunakan jq untuk membuat output. Alat jq dilengkapi dengan gambar kontainer. Untuk informasi selengkapnya, lihat Mengonfigurasi lingkungan pengembangan.
Menggunakan variabel lingkungan
Meneruskan string aman ke skrip penyebaran
Anda dapat mengatur variabel lingkungan (EnvironmentVariable
) dalam instans kontainer Anda untuk menyediakan konfigurasi dinamis aplikasi atau skrip yang dijalankan kontainer. Skrip penyebaran menangani variabel lingkungan yang tidak aman dan aman dengan cara yang sama seperti Azure Container Instances. Untuk informasi selengkapnya, lihat Mengatur variabel lingkungan dalam instans kontainer.
Ukuran maksimum yang diizinkan untuk variabel lingkungan adalah 64 KB.
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'passEnvVariablesCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
environmentVariables: [
{
name: 'UserName'
value: 'jdole'
}
{
name: 'Password'
secureValue: 'jDolePassword'
}
]
scriptContent: 'echo "Username is :$Username"; echo "Password is: $Password"'
retentionInterval: 'P1D'
}
}
Variabel lingkungan yang ditentukan sistem
Tabel berikut mencantumkan variabel lingkungan yang ditentukan sistem:
Variabel lingkungan | Nilai default (CLI) | Nilai default (PowerShell) | Cadangan sistem |
---|---|---|---|
AZ_SCRIPTS_AZURE_ENVIRONMENT |
AzureCloud |
AzureCloud |
Tidak |
AZ_SCRIPTS_CLEANUP_PREFERENCE |
Always |
Always |
Tidak |
AZ_SCRIPTS_OUTPUT_PATH |
/mnt/azscripts/azscriptoutput/scriptoutputs.json |
Tidak berlaku | Ya |
AZ_SCRIPTS_PATH_INPUT_DIRECTORY |
/mnt/azscripts/azscriptinput|/mnt/azscripts/azscriptinput |
Tidak berlaku | Ya |
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY |
/mnt/azscripts/azscriptoutput|/mnt/azscripts/azscriptoutput |
Tidak berlaku | Ya |
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME |
userscript.sh |
userscript.ps1 |
Ya |
AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME |
primaryscripturi.config |
primaryscripturi.config |
Ya |
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME |
supportingscripturi.config |
supportingscripturi.config |
Ya |
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME |
scriptoutputs.json |
scriptoutputs.json |
Ya |
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME |
executionresult.json |
executionresult.json |
Ya |
AZ_SCRIPTS_USER_ASSIGNED_IDENTITY |
Tidak berlaku | Tidak berlaku | No |
Untuk sampel penggunaan AZ_SCRIPTS_OUTPUT_PATH
, lihat Bekerja dengan output sebelumnya di artikel ini.
Untuk mengakses variabel lingkungan, gunakan kode berikut.
param location string = resourceGroup().location
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'listEnvVariablesCLI'
location: location
kind: 'AzureCLI'
properties: {
azCliVersion: '2.52.0'
scriptContent: 'echo "AZ_SCRIPTS_AZURE_ENVIRONMENT is : $AZ_SCRIPTS_AZURE_ENVIRONMENT",echo "AZ_SCRIPTS_CLEANUP_PREFERENCE is : $AZ_SCRIPTS_CLEANUP_PREFERENCE",echo "AZ_SCRIPTS_OUTPUT_PATH is : $AZ_SCRIPTS_OUTPUT_PATH",echo "AZ_SCRIPTS_PATH_INPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_INPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME is : $AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME",echo "AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME is : $AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME is : $AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME is : $AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME",echo "AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME is : $AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME",echo "AZ_SCRIPTS_USER_ASSIGNED_IDENTITY is : $AZ_SCRIPTS_USER_ASSIGNED_IDENTITY"'
retentionInterval: 'P1D'
}
}
Menggunakan akun penyimpanan yang sudah ada
Agar skrip berjalan dan memungkinkan pemecahan masalah, Anda memerlukan akun penyimpanan dan instans kontainer. Anda dapat menunjuk akun penyimpanan yang ada atau membiarkan layanan skrip membuat akun penyimpanan dan instans kontainer secara otomatis.
Berikut adalah persyaratan untuk menggunakan akun penyimpanan yang ada:
Tabel berikut mencantumkan jenis akun yang didukung. Kolom untuk tingkat mengacu pada nilai
-SkuName
parameter atau--sku
. Kolom untuk jenis yang didukung mengacu pada-Kind
parameter atau--kind
.Tingkat Jenis yang didukung Premium_LRS
FileStorage
Premium_ZRS
FileStorage
Standard_GRS
Storage
,StorageV2
Standard_GZRS
StorageV2
Standard_LRS
Storage
,StorageV2
Standard_RAGRS
Storage
,StorageV2
Standard_RAGZRS
StorageV2
Standard_ZRS
StorageV2
Kombinasi ini mendukung file share. Untuk informasi selengkapnya, lihat Membuat Azure file share dan Tipe akun penyimpanan.
Aturan firewall untuk akun penyimpanan belum didukung. Untuk informasi selengkapnya, lihat Mengonfigurasi firewall Azure Storage dan jaringan virtual.
Prinsip penyebaran harus memiliki izin untuk mengelola akun penyimpanan, yang mencakup membaca, membuat, dan menghapus berbagi file. Untuk informasi selengkapnya, lihat Mengonfigurasi izin minimum.
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 kode Bicep berikut ke elemen properti dari Microsoft.Resources/deploymentScripts
:
param storageAccountName string = 'myStorageAccount'
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
...
properties: {
...
storageAccountSettings: {
storageAccountName: storageAccountName
storageAccountKey: listKeys(resourceId('Microsoft.Storage/storageAccounts', storageAccountName), '2023-01-01').keys[0].value
}
}
}
Untuk sampel definisi lengkap Microsoft.Resources/deploymentScripts
, lihat Sintaks sebelumnya di artikel ini.
Saat Anda menggunakan akun penyimpanan yang sudah ada, layanan skrip membuat berbagi file yang memiliki nama unik. Untuk mempelajari cara layanan skrip membersihkan berbagi file, lihat Membersihkan sumber daya skrip penyebaran nanti di artikel ini.
Mengonfigurasi instans kontainer
Skrip penyebaran memerlukan instans kontainer Azure baru. Anda tidak dapat menentukan instans kontainer yang ada. Namun, Anda dapat menyesuaikan nama grup kontainer dengan menggunakan containerGroupName
. Jika Anda tidak menentukan nama grup, nama grup akan dibuat secara otomatis. Konfigurasi tambahan diperlukan untuk membuat instans kontainer ini. Untuk informasi selengkapnya, lihat Mengonfigurasi izin minimum.
Anda juga dapat menentukan subnetId
nilai untuk menjalankan skrip penyebaran di jaringan privat. Untuk informasi selengkapnya, lihat Mengakses jaringan virtual privat.
param containerGroupName string = 'mycustomaci'
param subnetId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet'
resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
...
properties: {
...
containerSettings: {
containerGroupName: containerGroupName
subnetIds: [
{
id: subnetId
}
]
}
}
}
Menjalankan skrip lebih dari sekali
Eksekusi skrip penyebaran adalah operasi yang tidak didemoten. Jika tidak ada perubahan pada salah deploymentScripts
satu properti sumber daya, termasuk skrip sebaris, skrip tidak berjalan saat Anda menyebarkan ulang file Bicep.
Layanan skrip penyebaran membandingkan nama sumber daya dalam file Bicep 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 utcNow sebagai nama sumber daya atau sebagai bagian dari nama sumber daya. Anda hanya dapat menggunakanutcNow
fungsi dalam nilai default untuk parameter.Mengubah nama sumber daya akan membuat sumber daya
deploymentScripts
baru. Ini bagus untuk menjaga riwayat eksekusi skrip.Tentukan nilai yang berbeda dalam properti
forceUpdateTag
. Misalnya, gunakanutcNow
sebagai nilai.
Menulis skrip penyebaran untuk memastikan idempotensi, sehingga tayangan ulang yang tidak disengaja tidak akan mengakibatkan perubahan sistem. Misalnya, saat Anda membuat sumber daya Azure melalui skrip penyebaran, validasi ketidakhadirannya sebelum pembuatan untuk memastikan bahwa skrip berhasil atau menghindari pembuatan sumber daya yang berlebihan.
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 file Bicep 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.
Membersihkan sumber daya skrip penyebaran
Keduanya secara otomatis membuat sumber daya pendukung tidak pernah dapat mengulurkan deploymentScript
sumber daya, kecuali kegagalan menghapusnya. Properti cleanupPreference
mengontrol siklus hidup sumber daya pendukung. Properti retentionInterval
mengontrol siklus deploymentScript
hidup sumber daya. Berikut cara menggunakan properti ini:
cleanupPreference
: Tentukan preferensi pembersihan dari dua sumber daya pendukung saat eksekusi skrip masuk dalam status terminal. Nilai yang didukung adalah:Always
: Hapus dua sumber daya pendukung setelah eksekusi skrip berada dalam status terminal. Jika Anda menggunakan akun penyimpanan yang sudah ada, layanan skrip akan menghapus berbagi file yang dibuat layanan.deploymentScripts
Karena sumber daya mungkin masih ada setelah sumber daya pendukung dibersihkan, layanan skrip mempertahankan hasil eksekusi skrip (misalnya,stdout
), output, dan mengembalikan nilai sebelum sumber daya dihapus.OnSuccess
: Hapus dua sumber daya pendukung hanya ketika eksekusi skrip berhasil. Jika Anda menggunakan akun penyimpanan yang sudah ada, layanan skrip akan menghapus berbagi file hanya saat eksekusi skrip berhasil.Jika eksekusi skrip tidak berhasil, layanan skrip menunggu hingga nilai kedaluwarsa
retentionInterval
sebelum membersihkan sumber daya pendukung lalu sumber daya skrip penyebaran.OnExpiration
: Hapus dua sumber daya pendukung hanya saat pengaturan kedaluwarsaretentionInterval
. Jika Anda menggunakan akun penyimpanan yang ada, layanan skrip akan menghapus berbagi file tetapi mempertahankan akun penyimpanan.
Instans kontainer dan akun penyimpanan dihapus sesuai dengan
cleanupPreference
nilai . Namun, jika skrip gagal dancleanupPreference
tidak diatur keAlways
, proses penyebaran secara otomatis menjaga kontainer 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 tidur, kontainer diatur ke status terminal dan tidak dapat diakses meskipun Anda belum menghapusnya.
retentionInterval
: Tentukan interval waktu bahwadeploymentScript
sumber daya akan dipertahankan sebelum kedaluwarsa dan dihapus.
Catatan
Kami tidak menyarankan Agar Anda menggunakan akun penyimpanan dan instans kontainer yang dihasilkan layanan skrip untuk tujuan lain. Dua sumber daya mungkin dihapus, tergantung pada siklus hidup skrip.
Langkah berikutnya
Dalam artikel ini, Anda mempelajari cara membuat sumber daya skrip penyebaran. Untuk mempelajari selengkapnya: