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í
Na webu Azure Portal otevřete skupinu prostředků, do které jste nasadili instanci kontejneru a účet úložiště.
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.
V nabídce prostředků vyberte Kontejnery. Název instance kontejneru je název projektu připojený ke kontejneru.
Vyberte Připojit a pak vyberte Připojit. Pokud se nemůžete připojit k instanci kontejneru, restartujte skupinu kontejnerů a zkuste to znovu.
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.
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í
Na webu Azure Portal otevřete skupinu prostředků, do které jste nasadili instanci kontejneru a účet úložiště.
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.
V nabídce prostředků vyberte Kontejnery. Název instance kontejneru je název projektu připojený ke kontejneru.
Vyberte Připojit a pak vyberte Připojit. Pokud se nemůžete připojit k instanci kontejneru, restartujte skupinu kontejnerů a zkuste to znovu.
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.
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.
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.
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
Následující snímek obrazovky ukazuje, jak spustit skript PowerShellu vzhledem k tomu, že máte na sdílené jednotce soubor helloworld.ps1 .
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: