Bagikan melalui


Mengonfigurasi lingkungan pengembangan untuk skrip penyebaran dalam file Bicep

Pelajari cara membuat lingkungan pengembangan untuk mengembangkan dan menguji skrip penyebaran dengan gambar skrip penyebaran. Anda dapat membuat instans kontainer Azure atau menggunakan Docker. Kedua opsi tersebut dibahas dalam artikel ini.

Prasyarat

Kontainer Azure PowerShell

Jika Anda tidak memiliki skrip penerapan Azure PowerShell, Anda bisa membuat hello.ps1 dengan menggunakan konten berikut:

param([string] $name)
$output = 'Hello {0}' -f $name
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
param([string] $name, [string] $subscription)
$output = 'Hello {0}' -f $name
#Write-Output $output

Connect-AzAccount -UseDeviceAuthentication
Set-AzContext -subscription $subscription

$kv = Get-AzKeyVault
#Write-Output $kv

$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['greeting'] = $output
$DeploymentScriptOutputs['kv'] = $kv.resourceId
Write-Output $DeploymentScriptOutputs

Dalam skrip penyebaran Azure PowerShell, variabel $DeploymentScriptOutputs digunakan untuk menyimpan nilai output. Untuk informasi selengkapnya tentang bekerja dengan output Azure PowerShell, lihat Bekerja dengan output.

Kontainer Azure CLI

Untuk gambar kontainer Azure CLI, Anda bisa membuat file hello.sh dengan menggunakan konten berikut:

FIRSTNAME=$1
LASTNAME=$2
OUTPUT="{\"name\":{\"displayName\":\"$FIRSTNAME $LASTNAME\",\"firstName\":\"$FIRSTNAME\",\"lastName\":\"$LASTNAME\"}}"
echo -n "Hello "
echo $OUTPUT | jq -r '.name.displayName'

Dalam skrip penyebaran Azure CLI, variabel lingkungan yang disebut AZ_SCRIPTS_OUTPUT_PATH menyimpan lokasi file output skrip. Variabel lingkungan tidak tersedia dalam kontainer lingkungan pengembangan. Untuk informasi selengkapnya tentang bekerja dengan output Azure CLI, lihat Bekerja dengan output dari skrip CLI.

Menggunakan instans kontainer Azure PowerShell

Untuk menulis skrip Azure PowerShell di komputer, Anda perlu membuat akun penyimpanan dan memasang akun penyimpanan ke instans kontainer. Sehingga Anda dapat mengunggah skrip Anda ke akun penyimpanan dan menjalankan skrip pada instans kontainer. Akun penyimpanan yang Anda buat untuk menguji skrip Anda bukanlah akun penyimpanan yang sama dengan yang digunakan layanan skrip penyebaran untuk menjalankan skrip. Layanan skrip penyebaran membuat nama unik sebagai berbagi pada setiap eksekusi.

Membuat instans kontainer Azure PowerShell

File Bicep berikut membuat instans kontainer dan berbagi file, lalu memasang berbagi file ke gambar kontainer.

@description('Specify a project name that is used for generating resource names.')
param projectName string

@description('Specify the resource location.')
param location string = resourceGroup().location

@description('Specify the container image.')
param containerImage string = 'mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7'

@description('Specify the mount path.')
param mountPath string = '/mnt/azscripts/azscriptinput'

var storageAccountName = toLower('${projectName}store')
var fileShareName = '${projectName}share'
var containerGroupName = '${projectName}cg'
var containerName = '${projectName}container'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

resource fileShare 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-01-01' = {
  name: '${storageAccountName}/default/${fileShareName}'
  dependsOn: [
    storageAccount
  ]
}

resource containerGroup 'Microsoft.ContainerInstance/containerGroups@2023-05-01' = {
  name: containerGroupName
  location: location
  properties: {
    containers: [
      {
        name: containerName
        properties: {
          image: containerImage
          resources: {
            requests: {
              cpu: 1
              memoryInGB: json('1.5')
            }
          }
          ports: [
            {
              protocol: 'TCP'
              port: 80
            }
          ]
          volumeMounts: [
            {
              name: 'filesharevolume'
              mountPath: mountPath
            }
          ]
          command: [
            '/bin/sh'
            '-c'
            'pwsh -c \'Start-Sleep -Seconds 1800\''
          ]
        }
      }
    ]
    osType: 'Linux'
    volumes: [
      {
        name: 'filesharevolume'
        azureFile: {
          readOnly: false
          shareName: fileShareName
          storageAccountName: storageAccountName
          storageAccountKey: storageAccount.listKeys().keys[0].value
        }
      }
    ]
  }
}

Nilai default untuk jalur pemasangan adalah /mnt/azscripts/azscriptinput. Ini adalah jalur dalam instans kontainer tempat instans dipasang ke berbagi.

Gambar kontainer default yang ditentukan dalam file Bicep mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Lihat daftar semua versi Azure PowerShell yang didukung.

File Bicep menangguhkan instans kontainer setelah 1.800 detik. Anda memiliki 30 menit sebelum instans kontainer masuk ke keadaan dihentikan dan sesi berakhir.

Gunakan skrip berikut untuk menyebarkan file Bicep:

$projectName = Read-Host -Prompt "Enter a project name that is used to generate resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$templateFile = Read-Host -Prompt "Enter the Bicep file path and file name"
$resourceGroupName = "${projectName}rg"

New-AzResourceGroup -Location $location -name $resourceGroupName
New-AzResourceGroupDeployment -resourceGroupName $resourceGroupName -TemplateFile $templatefile -projectName $projectName

Unggah skrip penyebaran

Unggah skrip penyebaran Anda ke akun penyimpanan. Berikut adalah contoh skrip PowerShell:

$projectName = Read-Host -Prompt "Enter the same project name that you used earlier"
$fileName = Read-Host -Prompt "Enter the deployment script file name with the path"

$resourceGroupName = "${projectName}rg"
$storageAccountName = "${projectName}store"
$fileShareName = "${projectName}share"

$context = (Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName).Context
Set-AzStorageFileContent -Context $context -ShareName $fileShareName -Source $fileName -Force

Anda juga dapat mengunggah file dengan menggunakan portal Azure atau Azure CLI.

Menguji skrip penyebaran

  1. Di portal Microsoft Azure, buka grup sumber daya tempat Anda menggunakan instans kontainer dan akun penyimpanan.

  2. Buka grup kontainer. Nama grup kontainer default adalah nama proyek yang ditambahkan dengan cg. Instans kontainer dalam status Berjalan.

  3. Di menu sumber daya, pilih Kontainer. Nama instans kontainer adalah nama proyek yang ditambahkan dengan kontainer.

    Cuplikan layar opsi instans kontainer sambungkan skrip penyebaran di portal Azure.

  4. Pilih Sambungkan, lalu pilih Sambungkan. Jika Anda tidak dapat terhubung ke instans kontainer, mulai ulang grup kontainer dan coba lagi.

  5. Di panel konsol, jalankan perintah berikut:

    cd /mnt/azscripts/azscriptinput
    ls
    pwsh ./hello.ps1 "John Dole"
    

    Outputnya adalah Halo John Dole.

    Cuplikan layar output pengujian instans kontainer sambungkan skrip penyebaran yang ditampilkan di konsol.

Menggunakan instans kontainer Azure CLI

Untuk menulis skrip Azure CLI di komputer Anda, buat akun penyimpanan dan pasang akun penyimpanan ke instans kontainer. Sehingga Anda dapat mengunggah skrip Anda ke akun penyimpanan dan menjalankan skrip pada instans kontainer. Akun penyimpanan yang Anda buat untuk menguji skrip Anda bukanlah akun penyimpanan yang sama dengan yang digunakan layanan skrip penyebaran untuk menjalankan skrip. Layanan skrip penyebaran membuat nama unik sebagai berbagi pada setiap eksekusi.

Menggunakan instans kontainer Azure CLI

File Bicep berikut membuat instans kontainer dan berbagi file, lalu memasang berbagi file ke gambar kontainer:

@description('Specify a project name that is used for generating resource names.')
param projectName string

@description('Specify the resource location.')
param location string = resourceGroup().location

@description('Specify the container image.')
param containerImage string = 'mcr.microsoft.com/azure-cli:2.9.1'

@description('Specify the mount path.')
param mountPath string = '/mnt/azscripts/azscriptinput'

var storageAccountName = toLower('${projectName}store')
var fileShareName = '${projectName}share'
var containerGroupName = '${projectName}cg'
var containerName = '${projectName}container'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

resource fileshare 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-04-01' = {
  name: '${storageAccountName}/default/${fileShareName}'
  dependsOn: [
    storageAccount
  ]
}

resource containerGroup 'Microsoft.ContainerInstance/containerGroups@2023-05-01' = {
  name: containerGroupName
  location: location
  properties: {
    containers: [
      {
        name: containerName
        properties: {
          image: containerImage
          resources: {
            requests: {
              cpu: 1
              memoryInGB: json('1.5')
            }
          }
          ports: [
            {
              protocol: 'TCP'
              port: 80
            }
          ]
          volumeMounts: [
            {
              name: 'filesharevolume'
              mountPath: mountPath
            }
          ]
          command: [
            '/bin/bash'
            '-c'
            'echo hello; sleep 1800'
          ]
        }
      }
    ]
    osType: 'Linux'
    volumes: [
      {
        name: 'filesharevolume'
        azureFile: {
          readOnly: false
          shareName: fileShareName
          storageAccountName: storageAccountName
          storageAccountKey: storageAccount.listKeys().keys[0].value
        }
      }
    ]
  }
}

Nilai default untuk jalur pemasangan adalah /mnt/azscripts/azscriptinput. Ini adalah jalur dalam instans kontainer tempat instans dipasang ke berbagi.

Gambar kontainer default yang ditentukan dalam file Bicep adalah mcr.microsoft.com/azure-cli:2.9.1. Lihat daftar versi Azure CLI yang didukung. Skrip penyebaran menggunakan gambar CLI yang tersedia dari Microsoft Container Registry (MCR). Dibutuhkan 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 Anda menggunakan versi yang tidak didukung, pesan kesalahan mencantumkan versi yang didukung.

File Bicep menangguhkan instans kontainer setelah 1.800 detik. Anda memiliki 30 menit sebelum instans kontainer masuk ke status terminal dan sesi berakhir.

Untuk menyebarkan file Bicep:

$projectName = Read-Host -Prompt "Enter a project name that is used to generate resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$templateFile = Read-Host -Prompt "Enter the Bicep file path and file name"
$resourceGroupName = "${projectName}rg"

New-AzResourceGroup -Location $location -name $resourceGroupName
New-AzResourceGroupDeployment -resourceGroupName $resourceGroupName -TemplateFile $templatefile -projectName $projectName

Unggah skrip penyebaran

Unggah skrip penyebaran Anda ke akun penyimpanan. Skrip berikut adalah contoh PowerShell:

$projectName = Read-Host -Prompt "Enter the same project name that you used earlier"
$fileName = Read-Host -Prompt "Enter the deployment script file name with the path"

$resourceGroupName = "${projectName}rg"
$storageAccountName = "${projectName}store"
$fileShareName = "${projectName}share"

$context = (Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName).Context
Set-AzStorageFileContent -Context $context -ShareName $fileShareName -Source $fileName -Force

Anda juga dapat mengunggah file dengan menggunakan portal Microsoft Azure atau Azure CLI.

Menguji skrip penyebaran

  1. Di portal Microsoft Azure, buka grup sumber daya tempat Anda menggunakan instans kontainer dan akun penyimpanan.

  2. Buka grup kontainer. Nama grup kontainer default adalah nama proyek yang ditambahkan dengan cg. Instans kontainer ditampilkan dalam status Berjalan.

  3. Di menu sumber daya, pilih Kontainer. Nama instans kontainer adalah nama proyek yang ditambahkan dengan kontainer.

    Cuplikan layar opsi instans kontainer sambungkan skrip penyebaran di portal Azure.

  4. Pilih Sambungkan, lalu pilih Sambungkan. Jika Anda tidak dapat terhubung ke instans kontainer, mulai ulang grup kontainer dan coba lagi.

  5. Di panel konsol, jalankan perintah berikut:

    cd /mnt/azscripts/azscriptinput
    ls
    ./hello.sh John Dole
    

    Outputnya adalah Halo John Dole.

    Cuplikan layar output pengujian instans kontainer skrip penyebaran yang ditampilkan di konsol.

Menggunakan Docker

Anda dapat menggunakan gambar kontainer Docker yang telah dikonfigurasi sebelumnya sebagai lingkungan pengembangan skrip penyebaran Anda. Untuk memasang Docker, lihat Dapatkan Docker. Anda juga perlu mengonfigurasi berbagi untuk memasang direktori, yang berisi skrip penyebaran ke dalam kontainer Docker.

  1. Tarik gambar kontainer skrip penyebaran ke komputer lokal:

    docker pull mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
    

    Contoh tersebut menggunakan versi PowerShell 4.3.0.

    Untuk menarik gambar CLI dari MCR:

    docker pull mcr.microsoft.com/azure-cli:2.52.0
    

    Contoh ini menggunakan versi CLI 2.52.0. Skrip penyebaran menggunakan gambar kontainer CLI default.

  2. Jalankan gambar Docker secara lokal.

    docker run -v <host drive letter>:/<host directory name>:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
    

    Ganti <huruf kandar host> dan <nama direktori host> dengan folder yang ada di drive bersama. Ini memetakan folder ke folder /data dalam kontainer. Misalnya, untuk memetakan D:\docker:

    docker run -v d:/docker:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
    

    -it berarti menjaga gambar kontainer tetap hidup.

    Contoh CLI:

    docker run -v d:/docker:/data -it mcr.microsoft.com/azure-cli:2.52.0
    
  3. Cuplikan layar berikut menunjukkan cara menjalankan skrip PowerShell, mengingat Anda memiliki file helloworld.ps1 di drive bersama.

    Cuplikan layar skrip penyebaran templat Resource Manager menggunakan perintah Docker.

Setelah skrip berhasil diuji, Anda dapat menggunakannya sebagai skrip penyebaran di file Bicep Anda.

Langkah berikutnya

Dalam artikel ini, Anda mempelajari cara membuat lingkungan pengembangan skrip. Untuk mempelajari selengkapnya: