Настройка среды разработки для сценариев развертывания в файлах Bicep
Узнайте, как создать среду разработки для разработки и тестирования сценариев развертывания с помощью образа сценария развертывания. Для этого вы можете создать экземпляр контейнера 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.ps1 со следующим содержимым:
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".
Использование экземпляра контейнера 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@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
}
}
]
}
}
По умолчанию подключение выполняется к пути /mnt/azscripts/azscriptinput
. Это путь внутри экземпляра контейнера, куда подключается общая папка.
Образ контейнера по умолчанию, указанный в файле Bicep, mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Полный список поддерживаемых версий Azure PowerShell см. здесь.
Файл Bicep приостанавливает экземпляр контейнера через 1800 секунд. У вас есть 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 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@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
}
}
]
}
}
По умолчанию подключение выполняется к пути /mnt/azscripts/azscriptinput
. Это путь внутри экземпляра контейнера, куда подключается общая папка.
Образ контейнера по умолчанию, указанный в файле Bicep, mcr.microsoft.com/azure-cli:2.9.1. См. список поддерживаемые версии Azure CLI. Скрипт развертывания использует доступные образы CLI из Реестра контейнеров Майкрософт (MCR). Сертификация образа CLI для скрипта развертывания занимает около одного месяца. Не используйте версии CLI, выпущенные менее 30 дней назад. Чтобы найти даты выпуска образов, ознакомьтесь с заметками о выпуске Azure CLI. Если вы используете неподдерживаемую версию, в сообщении об ошибке выводится список поддерживаемых версий.
Файл Bicep приостанавливает экземпляр контейнера через 1800 секунд. У вас есть 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, воспользуйтесь этой статьей. Также вам нужно настроить общий доступ к файлам, чтобы подключить каталог со скриптами развертывания к контейнеру 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.
Следующие шаги
Из этой статьи вы узнали, как создавать среды разработки скриптов. Чтобы получить дополнительные сведения, обратитесь к разделу