Konfigurowanie środowiska projektowego na potrzeby skryptów wdrażania w szablonach usługi ARM
Dowiedz się, jak utworzyć środowisko programistyczne do tworzenia i testowania skryptów wdrażania szablonu usługi ARM przy użyciu obrazu skryptu wdrożenia. Możesz utworzyć wystąpienie kontenera platformy Azure lub użyć platformy 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
Kontener interfejsu wiersza polecenia platformy Azure
W przypadku obrazu kontenera interfejsu wiersza polecenia platformy Azure można utworzyć plik hello.sh przy użyciu 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'
Uwaga
Po uruchomieniu skryptu 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 skryptu interfejsu wiersza polecenia.
Korzystanie z wystąpienia kontenera programu Azure PowerShell
Aby utworzyć skrypty 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.
Uwaga
Konto magazynu utworzone do testowania skryptu nie jest tym samym kontem magazynu, którego usługa skryptu wdrażania używa do wykonania skryptu. Usługa skryptu wdrażania tworzy unikatową nazwę jako udział plików w każdym wykonaniu.
Tworzenie wystąpienia kontenera programu Azure PowerShell
Poniższy szablon usługi Azure Resource Manager (szablon usługi ARM) tworzy wystąpienie kontenera i udział plików, a następnie instaluje udział plików w obrazie kontenera.
{
"$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'))]"
]
}
]
}
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 szablonie jest mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Zobacz listę wszystkich obsługiwanych wersji programu Azure PowerShell.
Szablon zawiesza wystąpienie kontenera po 1800 sekundach. Zanim wystąpienie kontenera przejdzie w stan zakończenia, a sesja zakończy się przez 30 minut.
Aby wdrożyć szablon:
$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
Przekazywanie skryptu wdrażania
Przekaż skrypt wdrożenia do konta 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ż przekazać przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.
Testowanie skryptu wdrażania
W witrynie Azure Portal otwórz grupę zasobów, w której wdrożono wystąpienie kontenera i konto magazynu.
Otwórz grupę kontenerów. Domyślna nazwa grupy kontenerów to nazwa projektu dołączona z cg. Wystąpienie kontenera jest w stanie Uruchomiony .
W menu zasobów wybierz pozycję Kontenery. Nazwa wystąpienia kontenera to nazwa projektu dołączona z kontenerem.
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.
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.
Korzystanie z wystąpienia kontenera interfejsu wiersza polecenia platformy Azure
Aby utworzyć skrypty 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.
Uwaga
Konto magazynu utworzone w celu przetestowania skryptu nie jest tym samym kontem magazynu, którego usługa skryptu wdrażania używa do wykonania skryptu. Usługa skryptu wdrażania tworzy unikatową nazwę jako udział plików w każdym wykonaniu.
Tworzenie wystąpienia kontenera interfejsu wiersza polecenia platformy Azure
Poniższy szablon usługi ARM tworzy wystąpienie kontenera i udział plików, a następnie instaluje udział plików w obrazie kontenera:
{
"$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"
]
}
]
}
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 szablonie jest mcr.microsoft.com/azure-cli:2.9.1. Zobacz listę obsługiwanych wersji interfejsu wiersza polecenia platformy Azure.
Ważne
Skrypt wdrażania używa dostępnych obrazów interfejsu wiersza polecenia z usługi Microsoft Container Registry (MCR). Certyfikowanie obrazu interfejsu wiersza polecenia dla skryptu wdrożenia trwa około miesiąca. Nie używaj wersji interfejsu wiersza polecenia, które zostały wydane w ciągu 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.
Szablon zawiesza wystąpienie kontenera po 1800 sekundach. Przed przejściem wystąpienia kontenera do stanu terminalu i zakończenie sesji trwa 30 minut.
Aby wdrożyć szablon:
$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
Przekazywanie skryptu wdrażania
Przekaż skrypt wdrożenia do konta magazynu. Poniżej przedstawiono przykład 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
W witrynie Azure Portal otwórz grupę zasobów, w której wdrożono wystąpienie kontenera i konto magazynu.
Otwórz grupę kontenerów. Domyślna nazwa grupy kontenerów to nazwa projektu dołączona z cg. Wystąpienie kontenera jest wyświetlane w stanie Uruchomiony .
W menu zasobów wybierz pozycję Kontenery. Nazwa wystąpienia kontenera to nazwa projektu dołączona z kontenerem.
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.
W okienku konsoli uruchom następujące polecenia:
cd /mnt/azscripts/azscriptinput ls ./hello.sh John Dole
Dane wyjściowe to Hello John Dole.
Korzystanie z platformy Docker
Możesz użyć wstępnie skonfigurowanego obrazu kontenera platformy Docker jako środowiska deweloperskiego 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.
Pobierz obraz kontenera skryptu wdrożenia na komputer lokalny:
docker pull mcr.microsoft.com/azuredeploymentscripts-powershell:az4.3
W przykładzie użyto wersji programu PowerShell 4.3.0.
Aby ściągnąć obraz interfejsu wiersza polecenia z mcR:
docker pull mcr.microsoft.com/azure-cli:2.0.80
W tym przykładzie użyto interfejsu wiersza polecenia w wersji 2.0.80. Skrypt wdrażania używa domyślnych obrazów kontenerów interfejsu wiersza polecenia znalezionych tutaj.
Uruchom obraz platformy Docker lokalnie.
docker run -v <host drive letter>:/<host directory name>:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az4.3
Zastąp <literę> sterownika hosta i <nazwę> katalogu hosta istniejącym folderem na dysku udostępnionym. Mapuje folder na folder /data w kontenerze. Aby na przykład mapować D:\docker:
docker run -v d:/docker:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az4.3
— oznacza to utrzymanie obrazu kontenera przy życiu.
Przykład interfejsu wiersza polecenia:
docker run -v d:/docker:/data -it mcr.microsoft.com/azure-cli:2.0.80
Poniższy zrzut ekranu przedstawia sposób uruchamiania skryptu programu PowerShell, biorąc pod uwagę, że masz plik helloworld.ps1 na dysku udostępnionym.
Po pomyślnym przetestowaniu skryptu możesz użyć go jako skryptu wdrażania w szablonach.
Następne kroki
W tym artykule przedstawiono sposób używania skryptów wdrażania. Aby zapoznać się z samouczkiem dotyczącym skryptu wdrażania: