Konfigurowanie środowiska deweloperskiego dla skryptów wdrożeniowych w plikach Bicep

Dowiedz się, jak utworzyć środowisko programistyczne do tworzenia i testowania skryptów wdrażania przy użyciu obrazu skryptu wdrożenia. Możesz utworzyć wystąpienie kontenera Azure lub użyć Docker. Obie opcje zostały omówione w tym artykule.

Wymagania wstępne

Kontener programu Azure PowerShell

Jeśli nie masz skryptu wdrażania programu Azure PowerShell, możesz utworzyć plik hello.ps1 przy użyciu następującej zawartości:

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

W skry skryptie wdrażania programu Azure PowerShell zmienna $DeploymentScriptOutputs jest używana do przechowywania wartości wyjściowych. Aby uzyskać więcej informacji na temat pracy z danymi wyjściowymi programu Azure PowerShell, zobacz Praca z danymi wyjściowymi.

Kontener Azure CLI

W przypadku obrazu kontenera Azure CLI można utworzyć plik o nazwie hello.sh, korzystając z następującej zawartości:

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

W skryscie wdrażania interfejsu wiersza polecenia platformy Azure zmienna środowiskowa o nazwie AZ_SCRIPTS_OUTPUT_PATH przechowuje lokalizację pliku wyjściowego skryptu. Zmienna środowiskowa nie jest dostępna w kontenerze środowiska deweloperskiego. Aby uzyskać więcej informacji na temat pracy z danymi wyjściowymi interfejsu wiersza polecenia platformy Azure, zobacz Praca z danymi wyjściowymi skryptów interfejsu wiersza polecenia.

Important

Dzienniki skryptów wdrożeń mogą zawierać treści napisane do Write-Host, echo, stdout, oraz stderr. Możesz pobrać te informacje za pośrednictwem punktu końcowego /deploymentScripts/logs lub powiązanych interfejsów API. Nie zapisuj wrażliwych informacji na wyjściu skryptu, w tym tokenów dostępu, tokenów nośników, tokenów SAS, łańcuchów połączeń, danych uwierzytelniających czy innych sekretów. Autorzy skryptów są odpowiedzialni za zapewnienie, że dzienniki skryptów wdrożeń nie ujawniają wrażliwych informacji.

Korzystanie z wystąpienia kontenera programu Azure PowerShell

Aby utworzyć skrypty programu Azure PowerShell na komputerze, musisz utworzyć konto magazynu i zainstalować konto magazynu w wystąpieniu kontenera. Aby można było przekazać skrypt do konta magazynu i uruchomić skrypt w wystąpieniu kontenera. Konto magazynowe utworzone do testowania skryptu nie jest tym samym kontem magazynowym, którego usługa skryptów wdrożeniowych używa do uruchomienia skryptu. Usługa skryptu wdrożeniowego tworzy przy każdym uruchomieniu udział plików o unikalnej nazwie.

Utwórz wystąpienie kontenera przy użyciu programu Azure PowerShell

Poniższy plik Bicep tworzy wystąpienie kontenera i udział plików, a następnie instaluje udział plików w obrazie kontenera.

@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@2025-06-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

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

resource containerGroup 'Microsoft.ContainerInstance/containerGroups@2025-09-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
        }
      }
    ]
  }
}

Wartość domyślna ścieżki instalacji to /mnt/azscripts/azscriptinput. Jest to ścieżka w wystąpieniu kontenera, w którym jest zainstalowany w udziale plików.

Domyślny obraz kontenera określony w pliku Bicep jest mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Zobacz listę wszystkich obsługiwanych wersji programu Azure PowerShell.

Plik Bicep wstrzymuje instancję kontenera po 1 800 sekundach. Masz 30 minut, zanim instancja kontenera przejdzie w stan zakończony, a sesja się zakończy.

Użyj następującego skryptu, aby wdrożyć plik 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

Prześlij skrypt wdrożeniowy

Prześlij skrypt wdrożenia na konto magazynu. Oto przykład skryptu programu 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

Plik można również przesłać przy użyciu portalu Azure lub interfejsu wiersza polecenia Azure CLI.

Testowanie skryptu wdrażania

  1. W portalu Azure otwórz grupę zasobów, w której wdrożono wystąpienie kontenera i konto magazynu danych.

  2. Otwórz grupę kontenerów. Domyślna nazwa grupy kontenerów to nazwa projektu dołączona z cg. Instancja kontenera jest w stanie Uruchomiono.

  3. W menu zasobów wybierz pozycję Kontenery. Nazwa instancji kontenera to nazwa projektu z dołączonym elementem container.

    Zrzut ekranu przedstawiający opcję połącz wystąpienie kontenera skryptu wdrożenia w witrynie Azure Portal.

  4. Wybierz pozycję Połącz, a następnie wybierz pozycję Połącz. Jeśli nie możesz nawiązać połączenia z wystąpieniem kontenera, uruchom ponownie grupę kontenerów i spróbuj ponownie.

  5. W okienku konsoli uruchom następujące polecenia:

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

    Dane wyjściowe to Hello John Dole.

    Zrzut ekranu przedstawiający dane wyjściowe testu skryptu wdrożeniowego connect container instance wyświetlone w konsoli.

Używanie instancji kontenera Azure CLI

Aby utworzyć skrypty interfejsu wiersza polecenia platformy Azure na komputerze, utwórz konto magazynu i zainstaluj konto magazynu w wystąpieniu kontenera. Następnie możesz przekazać skrypt do konta magazynu i uruchomić skrypt w wystąpieniu kontenera. Konto magazynowe utworzone do testowania skryptu nie jest tym samym kontem magazynowym, którego usługa skryptów wdrożeniowych używa do uruchomienia skryptu. Usługa skryptu wdrożeniowego tworzy udział plików o unikalnej nazwie przy każdym uruchomieniu.

Utworzenie instancji kontenera Azure CLI

Poniższy plik Bicep tworzy wystąpienie kontenera i udział plików, a następnie instaluje udział plików w obrazie kontenera:

@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@2025-06-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

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

resource containerGroup 'Microsoft.ContainerInstance/containerGroups@2025-09-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
        }
      }
    ]
  }
}

Wartość domyślna ścieżki instalacji to /mnt/azscripts/azscriptinput. Jest to ścieżka w wystąpieniu kontenera, w którym jest zainstalowany w udziale plików.

Domyślny obraz kontenera określony w pliku Bicep jest mcr.microsoft.com/azure-cli:2.9.1. Zobacz listę obsługiwanych wersji interfejsu wiersza polecenia platformy Azure. Skrypt wdrażania używa dostępnych obrazów CLI z rejestru Microsoft Container Registry (MCR). Certyfikacja obrazu CLI na potrzeby skryptu wdrożeniowego trwa około miesiąca. Nie używaj wersji CLI wydanych w ciągu ostatnich 30 dni. Aby znaleźć daty wydania obrazów, zobacz Informacje o wersji interfejsu wiersza polecenia platformy Azure. Jeśli używasz nieobsługiwanej wersji, komunikat o błędzie zawiera listę obsługiwanych wersji.

Plik Bicep wstrzymuje instancję kontenera po 1 800 sekundach. Masz 30 minut, zanim instancja kontenera przejdzie w stan końcowy, a sesja się zakończy.

Aby wdrożyć plik 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

Prześlij skrypt wdrażania

Przekaż skrypt wdrożenia do konta magazynu. Poniższy skrypt jest przykładem programu 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

Plik można również przekazać przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

Testowanie skryptu wdrażania

  1. W witrynie Azure Portal otwórz grupę zasobów, w której wdrożono wystąpienie kontenera i konto magazynu.

  2. Otwórz grupę kontenerów. Domyślna nazwa grupy kontenerów to nazwa projektu dołączona z cg. Instancja kontenera jest wyświetlana ze stanem Uruchomiony.

  3. W menu zasobów wybierz pozycję Kontenery. Nazwa instancji kontenera to nazwa projektu z dołączonym elementem container.

    Zrzut ekranu przedstawiający opcję połącz wystąpienie kontenera skryptu wdrożenia w witrynie Azure Portal.

  4. Wybierz pozycję Połącz, a następnie wybierz pozycję Połącz. Jeśli nie możesz nawiązać połączenia z wystąpieniem kontenera, uruchom ponownie grupę kontenerów i spróbuj ponownie.

  5. W okienku konsoli uruchom następujące polecenia:

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

    Dane wyjściowe to Hello John Dole.

    Zrzut ekranu przedstawiający wyniki testu wystąpienia kontenera skryptu wdrażania wyświetlane w konsoli.

Korzystanie z platformy Docker

Możesz użyć wstępnie skonfigurowanego obrazu kontenera Docker jako środowiska programistycznego do tworzenia skryptu wdrażania. Aby zainstalować platformę Docker, zobacz Pobieranie platformy Docker. Należy również skonfigurować udostępnianie plików, aby zainstalować katalog zawierający skrypty wdrażania w kontenerze platformy Docker.

  1. Pobierz obraz kontenera skryptu wdrożenia na komputer lokalny:

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

    W przykładzie użyto wersji programu PowerShell 4.3.0.

    Aby pobrać obraz CLI z usługi MCR:

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

    W tym przykładzie użyto interfejsu wiersza polecenia w wersji 2.52.0. Skrypt wdrażania używa domyślnych obrazów kontenerów CLI.

  2. Uruchom lokalnie obraz Dockera.

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

    Zastąp <literę dysku komputera hosta> i nazwę katalogu komputera hosta istniejącym folderem na dysku współdzielonym. Mapuje folder na folder /data w kontenerze. Na przykład, aby zamapować D:\docker:

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

    — oznacza to utrzymanie obrazu kontenera przy życiu.

    Przykład CLI:

    docker run -v d:/docker:/data -it mcr.microsoft.com/azure-cli:2.52.0
    
  3. Poniższy zrzut ekranu przedstawia sposób uruchamiania skryptu programu PowerShell, biorąc pod uwagę, że masz plik helloworld.ps1 na dysku udostępnionym.

    Zrzut ekranu przedstawiający skrypt wdrażania szablonu usługi Resource Manager przy użyciu polecenia platformy Docker.

Po pomyślnym przetestowaniu skryptu możesz użyć go jako skryptu wdrażania w plikach Bicep.

Następne kroki

W tym artykule opisano, jak tworzyć środowiska programistyczne dla skryptów. Dodatkowe informacje: