Bagikan melalui


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 yang 2020-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. Versi 2019-10-01-preview API memerlukan identitas terkelola karena layanan skrip penyebaran menggunakannya untuk menjalankan skrip.

    Saat Anda menentukan identity properti , layanan skrip memanggil Connect-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, baik AzurePowerShell atau AzureCLI. Selain kind, Anda perlu menentukan azPowerShellVersion properti atau azCliVersion .

  • storageAccountSettings: Tentukan pengaturan untuk menggunakan akun penyimpanan yang ada. Jika storageAccountName 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 mengonfigurasi subnetIds 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, gunakan primaryScriptUri 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 baik scriptContent atau primaryScriptUri. 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 adalah P1D.

  • forceUpdateTag: Mengubah nilai ini antara penyebaran file Bicep memaksa skrip penyebaran dijalankan lagi. Jika Anda menggunakan newGuid() fungsi atau utcNow() , 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 adalah Always, yang memanggil penghapusan sumber daya pendukung terlepas dari status terminal (Succeeded, Failed, atau Canceled). 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 ketika cleanupPreference diatur ke OnExpiration. 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 ke true. 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 menggunakan utcNow 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, gunakan utcNow 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 kedaluwarsa retentionInterval . 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 dan cleanupPreference tidak diatur ke Always, 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 bahwa deploymentScript 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: