Konfigurace vývojového prostředí pro skripty nasazení v šablonách ARM
Zjistěte, jak vytvořit vývojové prostředí pro vývoj a testování skriptů nasazení šablon ARM 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
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'
Poznámka:
Když spustíte skript nasazení Azure CLI, 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 skriptu rozhraní příkazového řádku.
Použití instance kontejneru Azure PowerShellu
Pokud chcete vytvořit skripty na 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.
Poznámka:
Úč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í šablona Azure Resource Manageru (šablona ARM) vytvoří instanci kontejneru a sdílenou složku a pak připojí sdílenou složku k imagi kontejneru.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"projectName": {
"type": "string",
"metadata": {
"description": "Specify a project name that is used for generating resource names."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Specify the resource location."
}
},
"containerImage": {
"type": "string",
"defaultValue": "mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7",
"metadata": {
"description": "Specify the container image."
}
},
"mountPath": {
"type": "string",
"defaultValue": "/mnt/azscripts/azscriptinput",
"metadata": {
"description": "Specify the mount path."
}
}
},
"variables": {
"storageAccountName": "[toLower(format('{0}store', parameters('projectName')))]",
"fileShareName": "[format('{0}share', parameters('projectName'))]",
"containerGroupName": "[format('{0}cg', parameters('projectName'))]",
"containerName": "[format('{0}container', parameters('projectName'))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
},
{
"type": "Microsoft.Storage/storageAccounts/fileServices/shares",
"apiVersion": "2023-01-01",
"name": "[format('{0}/default/{1}', variables('storageAccountName'), variables('fileShareName'))]",
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
]
},
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2023-05-01",
"name": "[variables('containerGroupName')]",
"location": "[parameters('location')]",
"properties": {
"containers": [
{
"name": "[variables('containerName')]",
"properties": {
"image": "[parameters('containerImage')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": "[json('1.5')]"
}
},
"ports": [
{
"protocol": "TCP",
"port": 80
}
],
"volumeMounts": [
{
"name": "filesharevolume",
"mountPath": "[parameters('mountPath')]"
}
],
"command": [
"/bin/sh",
"-c",
"pwsh -c 'Start-Sleep -Seconds 1800'"
]
}
}
],
"osType": "Linux",
"volumes": [
{
"name": "filesharevolume",
"azureFile": {
"readOnly": false,
"shareName": "[variables('fileShareName')]",
"storageAccountName": "[variables('storageAccountName')]",
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2023-01-01').keys[0].value]"
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
]
}
]
}
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 šabloně je mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Podívejte se na seznam všech podporovaných verzí Azure PowerShellu.
Šablona 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čí.
Nasazení šablony:
$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 template 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 v 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.
Poznámka:
Úč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í šablona ARM vytvoří instanci kontejneru a sdílenou složku a pak připojí sdílenou složku k imagi kontejneru:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"projectName": {
"type": "string",
"metadata": {
"description": "Specify a project name that is used for generating resource names."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Specify the resource location."
}
},
"containerImage": {
"type": "string",
"defaultValue": "mcr.microsoft.com/azure-cli:2.9.1",
"metadata": {
"description": "Specify the container image."
}
},
"mountPath": {
"type": "string",
"defaultValue": "/mnt/azscripts/azscriptinput",
"metadata": {
"description": "Specify the mount path."
}
}
},
"variables": {
"storageAccountName": "[toLower(format('{0}store', parameters('projectName')))]",
"fileShareName": "[format('{0}share', parameters('projectName'))]",
"containerGroupName": "[format('{0}cg', parameters('projectName'))]",
"containerName": "[format('{0}container', parameters('projectName'))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
},
{
"type": "Microsoft.Storage/storageAccounts/fileServices/shares",
"apiVersion": "2022-09-01",
"name": "[format('{0}/default/{1}', variables('storageAccountName'), variables('fileShareName'))]",
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
]
},
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2023-05-01",
"name": "[variables('containerGroupName')]",
"location": "[parameters('location')]",
"properties": {
"containers": [
{
"name": "[variables('containerName')]",
"properties": {
"image": "[parameters('containerImage')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": "[json('1.5')]"
}
},
"ports": [
{
"protocol": "TCP",
"port": 80
}
],
"volumeMounts": [
{
"name": "filesharevolume",
"mountPath": "[parameters('mountPath')]"
}
],
"command": [
"/bin/bash",
"-c",
"echo hello; sleep 1800"
]
}
}
],
"osType": "Linux",
"volumes": [
{
"name": "filesharevolume",
"azureFile": {
"readOnly": false,
"shareName": "[variables('fileShareName')]",
"storageAccountName": "[variables('storageAccountName')]",
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2022-09-01').keys[0].value]"
}
}
]
},
"dependsOn": [
"storageAccount"
]
}
]
}
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 šabloně je mcr.microsoft.com/azure-cli:2.9.1. Podívejte se na seznam podporovaných verzí Azure CLI.
Důležité
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í.
Šablona 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í šablony:
$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 template 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ásleduje příklad 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:az4.3
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.0.80
Tento příklad používá verzi CLI 2.0.80. Skript nasazení používá výchozí image kontejnerů rozhraní příkazového řádku, které najdete tady.
Spusťte image Dockeru místně.
docker run -v <host drive letter>:/<host directory name>:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az4.3
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:az4.3
-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.0.80
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í ve svých šablonách.
Další kroky
V tomto článku jste zjistili, jak používat skripty nasazení. Kurz skriptu nasazení: