Sdílet prostřednictvím


Konfigurace vývojového prostředí pro skripty nasazení v souborech Bicep

Zjistěte, jak vytvořit vývojové prostředí pro vývoj a testování skriptů nasazení pomocí image skriptu nasazení. Můžete buď vytvořit instanci kontejneru Azure, nebo použít Docker. Obě možnosti jsou popsané v tomto článku.

Požadavky

Kontejner Azure PowerShellu

Pokud nemáte skript nasazení Azure PowerShellu, můžete vytvořit soubor hello.ps1 pomocí následujícího obsahu:

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

Ve skriptu nasazení Azure PowerShellu se proměnná $DeploymentScriptOutputs používá k ukládání výstupních hodnot. Další informace o práci s výstupy Azure PowerShellu najdete v tématu Práce s výstupy.

Kontejner Azure CLI

Pro image kontejneru Azure CLI můžete vytvořit soubor hello.sh pomocí následujícího obsahu:

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

Ve skriptu nasazení Azure CLI se proměnná prostředí s názvem AZ_SCRIPTS_OUTPUT_PATH ukládá umístění výstupního souboru skriptu. Proměnná prostředí není v kontejneru vývojového prostředí dostupná. Další informace o práci s výstupy Azure CLI najdete v tématu Práce s výstupy ze skriptů rozhraní příkazového řádku.

Použití instance kontejneru Azure PowerShellu

Pokud chcete vytvořit skripty Azure PowerShellu na vašem počítači, musíte vytvořit účet úložiště a připojit ho k instanci kontejneru. Abyste mohli nahrát skript do účtu úložiště a spustit skript v instanci kontejneru. Účet úložiště, který vytvoříte k otestování skriptu, není stejný účet úložiště, který služba skriptů nasazení používá ke spuštění skriptu. Služba skriptů nasazení vytvoří jedinečný název jako sdílenou složku při každém spuštění.

Vytvoření instance kontejneru Azure PowerShellu

Následující soubor Bicep vytvoří instanci kontejneru a sdílenou složku a pak připojí sdílenou složku k imagi kontejneru.

@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
        }
      }
    ]
  }
}

Výchozí hodnota pro cestu připojení je /mnt/azscripts/azscriptinput. Toto je cesta v instanci kontejneru, kde je připojená ke sdílené složce.

Výchozí image kontejneru zadaná v souboru Bicep je mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Podívejte se na seznam všech podporovaných verzí Azure PowerShellu.

Soubor Bicep pozastaví instanci kontejneru po 1 800 sekundách. Máte 30 minut, než instance kontejneru přejde do ukončeného stavu a relace skončí.

K nasazení souboru Bicep použijte následující skript:

$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

Nahrání skriptu nasazení

Nahrajte skript nasazení do účtu úložiště. Tady je příklad skriptu PowerShellu:

$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

Soubor můžete nahrát také pomocí webu Azure Portal nebo Azure CLI.

Testování skriptu nasazení

  1. Na webu Azure Portal otevřete skupinu prostředků, do které jste nasadili instanci kontejneru a účet úložiště.

  2. Otevřete skupinu kontejnerů. Výchozí název skupiny kontejnerů je název projektu připojený cg. Instance kontejneru je ve stavu Spuštěno.

  3. V nabídce prostředků vyberte Kontejnery. Název instance kontejneru je název projektu připojený ke kontejneru.

    Snímek obrazovky s možností připojení instance kontejneru pro nasazení na webu Azure Portal

  4. Vyberte Připojit a pak vyberte Připojit. Pokud se nemůžete připojit k instanci kontejneru, restartujte skupinu kontejnerů a zkuste to znovu.

  5. V podokně konzoly spusťte následující příkazy:

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

    Výstupem je Hello John Dole.

    Snímek obrazovky skriptu nasazení připojujícího testovací výstup instance kontejneru zobrazený v konzole

Použití instance kontejneru Azure CLI

Pokud chcete vytvořit skripty Azure CLI na vašem počítači, vytvořte účet úložiště a připojte ho k instanci kontejneru. Pak můžete skript nahrát do účtu úložiště a spustit skript v instanci kontejneru. Účet úložiště, který vytvoříte k otestování skriptu, není stejný účet úložiště, který služba skriptů nasazení používá ke spuštění skriptu. Služba skriptů nasazení vytvoří jedinečný název jako sdílenou složku při každém spuštění.

Vytvoření instance kontejneru Azure CLI

Následující soubor Bicep vytvoří instanci kontejneru a sdílenou složku a pak připojí sdílenou složku k imagi kontejneru:

@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
        }
      }
    ]
  }
}

Výchozí hodnota pro cestu připojení je /mnt/azscripts/azscriptinput. Toto je cesta v instanci kontejneru, kde je připojená ke sdílené složce.

Výchozí image kontejneru zadaná v souboru Bicep je mcr.microsoft.com/azure-cli:2.9.1. Podívejte se na seznam podporovaných verzí Azure CLI. Skript nasazení používá dostupné image rozhraní příkazového řádku ze služby Microsoft Container Registry (MCR). Certifikace image rozhraní příkazového řádku pro skript nasazení trvá přibližně jeden měsíc. Nepoužívejte verze rozhraní příkazového řádku vydané do 30 dnů. Pokud chcete zjistit data vydání imagí, přečtěte si poznámky k verzi Azure CLI. Pokud používáte nepodporovanou verzi, zobrazí se v chybové zprávě seznam podporovaných verzí.

Soubor Bicep pozastaví instanci kontejneru po 1 800 sekundách. Máte 30 minut, než instance kontejneru přejde do stavu terminálu a relace skončí.

Nasazení souboru 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

Nahrání skriptu nasazení

Nahrajte skript nasazení do účtu úložiště. Následující skript je příkladem PowerShellu:

$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

Soubor můžete nahrát také pomocí webu Azure Portal nebo Azure CLI.

Testování skriptu nasazení

  1. Na webu Azure Portal otevřete skupinu prostředků, do které jste nasadili instanci kontejneru a účet úložiště.

  2. Otevřete skupinu kontejnerů. Výchozí název skupiny kontejnerů je název projektu připojený cg. Instance kontejneru se zobrazí ve stavu Spuštěno.

  3. V nabídce prostředků vyberte Kontejnery. Název instance kontejneru je název projektu připojený ke kontejneru.

    Snímek obrazovky s možností připojení instance kontejneru pro nasazení na webu Azure Portal

  4. Vyberte Připojit a pak vyberte Připojit. Pokud se nemůžete připojit k instanci kontejneru, restartujte skupinu kontejnerů a zkuste to znovu.

  5. V podokně konzoly spusťte následující příkazy:

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

    Výstupem je Hello John Dole.

    Snímek obrazovky s výstupem testu instance kontejneru skriptu nasazení zobrazeným v konzole

Použití Dockeru

Jako vývojové prostředí skriptu nasazení můžete použít předem nakonfigurovanou image kontejneru Dockeru. Pokud chcete nainstalovat Docker, přečtěte si téma Get Docker. Musíte také nakonfigurovat sdílení souborů pro připojení adresáře, který obsahuje skripty nasazení do kontejneru Dockeru.

  1. Stáhněte image kontejneru skriptu nasazení do místního počítače:

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

    Příklad používá verzi PowerShellu 4.3.0.

    Načtení image rozhraní příkazového řádku z MCR:

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

    V tomto příkladu se používá verze CLI 2.52.0. Skript nasazení používá výchozí image kontejnerů rozhraní příkazového řádku.

  2. Spusťte image Dockeru místně.

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

    Nahraďte <písmeno> ovladače hostitele a< název> adresáře hostitele existující složkou na sdílené jednotce. Namapuje složku do složky /data v kontejneru. Pokud chcete například namapovat D:\docker:

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

    -to znamená zachovat image kontejneru naživu.

    Příklad rozhraní příkazového řádku:

    docker run -v d:/docker:/data -it mcr.microsoft.com/azure-cli:2.52.0
    
  3. Následující snímek obrazovky ukazuje, jak spustit skript PowerShellu vzhledem k tomu, že máte na sdílené jednotce soubor helloworld.ps1 .

    Snímek obrazovky skriptu nasazení šablony Resource Manageru pomocí příkazu Dockeru

Po úspěšném otestování skriptu ho můžete použít jako skript nasazení v souborech Bicep.

Další kroky

V tomto článku jste se naučili vytvářet vývojová prostředí skriptů. Další informace najdete v tématech: