Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 Azure lub użyć Docker. Obie opcje zostały omówione w tym artykule.
Ważne
Dzienniki skryptów wdrożeń mogą zawierać treści napisane do Write-Host, echo, stdout, oraz stderr. Możesz pobrać te informacje za pośrednictwem punktu końcowego /deploymentScripts/logs lub powiązanych interfejsów API. Nie zapisuj wrażliwych informacji na wyjściu skryptu, w tym tokenów dostępu, tokenów nośników, tokenów SAS, łańcuchów połączeń, danych uwierzytelniających czy innych sekretów. Autorzy skryptów są odpowiedzialni za zapewnienie, że dzienniki skryptów wdrożeń nie ujawniają wrażliwych informacji.
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 Azure CLI
Dla obrazu kontenera Azure CLI możesz utworzyć plik hello.sh, używając 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 Azure CLI, zobacz Praca z danymi wyjściowymi ze skryptu CLI.
Korzystanie z wystąpienia kontenera programu Azure PowerShell
Aby tworzyć skrypty na komputerze, musisz utworzyć konto magazynu danych i zamontować je do wystąpienia kontenera. Aby można było przesłać skrypt do konta magazynu i uruchomić go w instancji kontenera.
Uwaga
Konto magazynowe, które tworzysz w celu przetestowania skryptu, nie jest tym samym kontem magazynowym, które jest używane przez usługę skryptów wdrożeniowych do wykonywania skryptu. Usługa skryptów wdrażania tworzy przy każdym uruchomieniu unikatową nazwę udziału plików.
Tworzenie wystąpienia kontenera programu Azure PowerShell
Poniższy szablon usługi Azure Resource Manager (szablon ARM) tworzy wystąpienie kontenera i udział plików, a następnie montuje 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": "2025-06-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
},
{
"type": "Microsoft.Storage/storageAccounts/fileServices/shares",
"apiVersion": "2025-06-01",
"name": "[format('{0}/default/{1}', variables('storageAccountName'), variables('fileShareName'))]",
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
]
},
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2025-09-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 instancję kontenera po 1 800 sekundach. Masz 30 minut, zanim instancja kontenera przejdzie w stan zakończony, a sesja się zakończy.
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
Prześlij skrypt 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. Instancja kontenera jest w stanie Uruchomiony.
W menu zasobów wybierz pozycję Kontenery. Nazwa instancji kontenera to nazwa projektu z dołączonym elementem container.
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.
Używanie instancji kontenera Azure CLI
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 magazynowe utworzone do testowania skryptu nie jest tym samym kontem magazynowym, którego usługa skryptów wdrożeniowych używa do uruchomienia skryptu. Usługa skryptu wdrożeniowego tworzy udział plików o unikalnej nazwie przy każdym uruchomieniu.
Utworzenie instancji kontenera Azure CLI
Poniższy szablon ARM tworzy wystąpienie kontenera i udział plików, a następnie montuje udział plików do obrazu 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": "2025-06-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
},
{
"type": "Microsoft.Storage/storageAccounts/fileServices/shares",
"apiVersion": "2025-06-01",
"name": "[format('{0}/default/{1}', variables('storageAccountName'), variables('fileShareName'))]",
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
]
},
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2025-09-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": [
"[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/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 CLI z rejestru Microsoft Container Registry (MCR). Certyfikacja obrazu CLI na potrzeby skryptu wdrożeniowego trwa około miesiąca. Nie używaj wersji CLI wydanych w ciągu ostatnich 30 dni. Aby znaleźć daty wydań obrazów, zobacz informacje o wersji narzędzia Azure CLI. Jeśli używasz nieobsługiwanej wersji, komunikat o błędzie zawiera listę obsługiwanych wersji.
Szablon zawiesza instancję kontenera po 1 800 sekundach. Masz 30 minut, zanim instancja kontenera przejdzie w stan końcowy, a sesja się zakończy.
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
Prześlij skrypt wdrożeniowy
Prześlij skrypt wdrożenia na konto 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
Możesz również przesłać plik za pomocą portalu Azure lub interfejsu wiersza polecenia platformy Azure.
Testowanie skryptu wdrażania
W portalu Azure otwórz grupę zasobów, w której wdrożono wystąpienie kontenera i konto magazynu danych.
Otwórz grupę kontenerów. Domyślna nazwa grupy kontenerów to nazwa projektu dołączona z cg. Instancja kontenera jest wyświetlana ze stanem Uruchomiony.
W menu zasobów wybierz pozycję Kontenery. Nazwa instancji kontenera to nazwa projektu z dołączonym elementem container.
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 DoleDane wyjściowe to Hello John Dole.
Korzystanie z platformy Docker
Możesz użyć wstępnie skonfigurowanego obrazu kontenera Docker jako środowiska programistycznego do tworzenia skryptu wdrożeniowego. 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.3W przykładzie użyto wersji programu PowerShell 4.3.0.
Aby pobrać obraz CLI z usługi MCR:
docker pull mcr.microsoft.com/azure-cli:2.0.80W tym przykładzie użyto interfejsu wiersza polecenia w wersji 2.0.80. Skrypt wdrażania używa domyślnych obrazów kontenerów CLI dostępnych tutaj.
Uruchom lokalnie obraz Dockera.
docker run -v <host drive letter>:/<host directory name>:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az4.3Zastąp <literę dysku komputera hosta> i nazwę katalogu komputera hosta istniejącym folderem na dysku współdzielonym. Mapuje folder na folder /data w kontenerze. Na przykład, aby zamapować 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 CLI:
docker run -v d:/docker:/data -it mcr.microsoft.com/azure-cli:2.0.80Poniż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: