Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как создать среду разработки для разработки и тестирования сценариев развертывания с помощью образа сценария развертывания. Для этого вы можете создать экземпляр контейнера Azure или применить Docker. В этой статье рассматриваются оба варианта.
Предварительные требования
Контейнер Azure PowerShell
Если у вас нет скрипта развертывания Azure PowerShell, вы можете создать файл hello.ps1 со следующим содержимым:
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
В скрипте развертывания Azure PowerShell переменная $DeploymentScriptOutputs используется для хранения выходных значений. Дополнительные сведения о работе с выходными данными Azure PowerShell см. в статье "Работа с выходными данными".
Контейнер Azure CLI
Для контейнерного образа Azure CLI можно создать файл hello.sh со следующим содержимым:
FIRSTNAME=$1
LASTNAME=$2
OUTPUT="{\"name\":{\"displayName\":\"$FIRSTNAME $LASTNAME\",\"firstName\":\"$FIRSTNAME\",\"lastName\":\"$LASTNAME\"}}"
echo -n "Hello "
echo $OUTPUT | jq -r '.name.displayName'
В скрипте развертывания Azure CLI переменная среды с именем AZ_SCRIPTS_OUTPUT_PATH содержит путь к файлу вывода скрипта. Эта переменная среды недоступна в контейнере среды разработки. Дополнительные сведения о работе с выходными данными Azure CLI см. в статье "Работа с выходными данными из скриптов CLI".
Important
Журналы сценариев развертывания могут включать содержимое, записанное в Write-Host, echo, stdout и stderr. Вы можете получить эту информацию через эндпоинт /deploymentScripts/logs или связанные API-интерфейсы. Не записывайте конфиденциальную информацию на выход скриптов, включая токены доступа, токены носителя, токены SAS, строки соединения, учетные данные или другие секреты. Авторы скриптов отвечают за то, чтобы журналы скриптов не раскрывали конфиденциальную информацию.
Использование экземпляра контейнера Azure PowerShell
Чтобы создать скрипты Azure PowerShell на компьютере, необходимо создать учетную запись хранения и подключить учетную запись хранения к экземпляру контейнера. Это позволит вам отправить скрипт в учетную запись хранения и выполнить скрипт в экземпляре контейнера. Учетная запись хранения, которую вы создаете для тестирования скрипта, не совпадает с учетной записью хранения, которую служба скрипта развертывания использует для выполнения скрипта. Служба скрипта развертывания создает общую папку с уникальным именем при каждом очередном выполнении.
Создание экземпляра контейнера Azure PowerShell
Следующий файл Bicep создает экземпляр контейнера и общую папку, а затем подключает общую папку к образу контейнера.
@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
}
}
]
}
}
Значение по умолчанию для пути монтирования — /mnt/azscripts/azscriptinput. Это путь в экземпляре контейнера, где монтируется файловый ресурс.
Образ контейнера по умолчанию, указанный в файле Bicep, — mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Полный список поддерживаемых версий Azure PowerShell см. здесь.
Файл Bicep приостанавливает работу экземпляра контейнера через 1 800 секунд. У вас есть 30 минут до того, как экземпляр контейнера перейдёт в состояние завершения и сеанс завершится.
Используйте следующий скрипт для развертывания 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
Отправка скрипта развертывания
Отправьте скрипт развертывания в учетную запись хранения. Вот пример скрипта 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
Вы также можете отправить файл с помощью портал Azure или Azure CLI.
Тестирование скрипта развертывания
На портале Azure откройте группу ресурсов, в которой вы развернули экземпляр контейнера и учетную запись хранения.
Откройте группу контейнеров. По умолчанию для имени группы контейнеров используется имя проекта с суффиксом cg. Этот экземпляр контейнера находится в состоянии Running.
В меню ресурсов выберите Контейнеры. Для имени экземпляра контейнера берется имя проекта с суффиксом container.
Выберите Подключить, а затем выберите Подключить. Если не удается подключиться к экземпляру контейнера, перезапустите группу контейнеров и попробуйте ещё раз.
На панели консоли выполните следующие команды:
cd /mnt/azscripts/azscriptinput ls pwsh ./hello.ps1 "John Dole"Они выводят ответ Hello John Dole.
Использование экземпляра контейнера Azure CLI
Чтобы создать скрипты Azure CLI на компьютере, создайте учетную запись хранения и подключите учетную запись хранения к экземпляру контейнера. Это позволит вам отправить скрипт в учетную запись хранения и выполнить скрипт в экземпляре контейнера. Учетная запись хранения, которую вы создаете для тестирования скрипта, не совпадает с учетной записью хранения, которую служба скрипта развертывания использует для выполнения скрипта. Служба скрипта развертывания создает общую папку с уникальным именем при каждом очередном выполнении.
Создание экземпляра контейнера Azure CLI
Следующий файл Bicep создает экземпляр контейнера и общую папку, а затем подключает общую папку к образу контейнера:
@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
}
}
]
}
}
Значение по умолчанию для пути монтирования — /mnt/azscripts/azscriptinput. Это путь в экземпляре контейнера, где монтируется файловый ресурс.
Образ контейнера по умолчанию, указанный в файле Bicep, — mcr.microsoft.com/azure-cli:2.9.1. См. список поддерживаемые версии Azure CLI. Скрипт развертывания использует доступные образы CLI из Реестра контейнеров Майкрософт (MCR). Сертификация образа CLI для скрипта развертывания занимает около одного месяца. Не используйте версии CLI, выпущенные менее 30 дней назад. Чтобы найти даты выпуска образов, ознакомьтесь с заметками о выпуске Azure CLI. Если вы используете неподдерживаемую версию, в сообщении об ошибке выводится список поддерживаемых версий.
Файл Bicep приостанавливает работу экземпляра контейнера через 1 800 секунд. У вас есть 30 минут до того, как экземпляр контейнера перейдёт в терминальное состояние и сеанс завершится.
Чтобы развернуть файл 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
Отправка скрипта развертывания
Отправьте скрипт развертывания в учетную запись хранения. Следующий сценарий является примером 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
Вы также можете отправить этот файл через портал Azure или Azure CLI.
Тестирование скрипта развертывания
На портале Azure откройте группу ресурсов, в которой вы развернули экземпляр контейнера и учетную запись хранения.
Откройте группу контейнеров. По умолчанию для имени группы контейнеров используется имя проекта с суффиксом cg. Этот экземпляр контейнера отображается в состоянии Выполняется.
В меню ресурсов выберите Контейнеры. Для имени экземпляра контейнера берется имя проекта с суффиксом container.
Выберите Подключить, а затем выберите Подключить. Если не удается подключиться к экземпляру контейнера, перезапустите группу контейнеров и попробуйте ещё раз.
На панели консоли выполните следующие команды:
cd /mnt/azscripts/azscriptinput ls ./hello.sh John DoleОни выводят ответ Hello John Dole.
Использование Docker
В качестве среды разработки скрипта развертывания можно использовать предварительно настроенный образ контейнера Docker. Чтобы установить Docker, см. Get Docker. Также вам нужно настроить общий доступ к файлам, чтобы подключить каталог со скриптами развертывания к контейнеру Docker.
Загрузите на локальный компьютер образ контейнера со сценарием развертывания.
docker pull mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0В этом примере используется версия PowerShell 4.3.0.
Чтобы загрузить образ CLI из MCR:
docker pull mcr.microsoft.com/azure-cli:2.52.0В этом примере используется интерфейс командной строки версии 2.52.0. Скрипт развертывания использует образы контейнеров CLI по умолчанию.
Запустите образ Docker в локальной среде.
docker run -v <host drive letter>:/<host directory name>:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0Замените <host driver letter> и <host directory name>, указав существующую папку на общем диске. Это сопоставляет эту папку с папкой /data в контейнере. Например, чтобы сопоставить D:\docker:
docker run -v d:/docker:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0-it означает сохранение контейнера в работающем состоянии.
Пример для CLI.
docker run -v d:/docker:/data -it mcr.microsoft.com/azure-cli:2.52.0На следующем снимке экрана показано, как запустить скрипт PowerShell, если файл helloworld.ps1 находится на общем диске.
После успешного тестирования сценария его можно использовать в качестве сценария развертывания в ваших файлах Bicep.
Следующие шаги
Из этой статьи вы узнали, как создавать среды разработки скриптов. Чтобы узнать больше: