Použití skriptů nasazení v šablonách ARM
Naučte se používat skripty nasazení v šablonách Azure Resource Manageru (ARM). S prostředkem deploymentScripts
můžou uživatelé spouštět skripty v nasazeních ARM a kontrolovat výsledky provádění.
Tip
Doporučujeme Bicep, protože nabízí stejné možnosti jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu Skript nasazení.
Tyto skripty se dají použít k provádění vlastních kroků, například:
- Přidejte uživatele do adresáře.
- Proveďte operace roviny dat, například kopírování objektů blob nebo počáteční databáze.
- Vyhledejte a ověřte licenční klíč.
- Vytvořte certifikát podepsaný svým držitelem.
- Vytvořte objekt v Microsoft Entra ID.
- Vyhledejte bloky IP adres z vlastního systému.
Výhody skriptu nasazení:
- Snadno se kóduje, používá a ladí. Skripty nasazení můžete vyvíjet ve svých oblíbených vývojových prostředích. Skripty lze vložit do šablon nebo do souborů externích skriptů.
- Můžete zadat jazyk skriptu a platformu. V současné době se podporují skripty nasazení Azure PowerShellu a Azure CLI v linuxovém prostředí.
- Povolte předávání argumentů příkazového řádku do skriptu.
- Může zadat výstupy skriptu a předat je zpět do nasazení.
Prostředek skriptu nasazení je k dispozici pouze v oblastech, ve kterých je dostupná služba Azure Container Instance. Viz Dostupnost prostředků pro službu Azure Container Instances v oblastech Azure. Skript nasazení v současné době používá pouze veřejné sítě.
Důležité
Služba skriptů nasazení vyžaduje dva podpůrné prostředky pro spouštění skriptů a řešení potíží: účet úložiště a instanci kontejneru. Můžete zadat existující účet úložiště, jinak za vás služba skriptů vytvoří jeden. Tyto dva automaticky vytvořené podpůrné prostředky obvykle odstraní služba skriptů, když se spuštění skriptu nasazení dostane do stavu terminálu. Za podpůrné prostředky se vám budou účtovat až do jejich odstranění. Informace o cenách najdete v tématu Ceny služby Container Instances a ceny služby Azure Storage. Další informace najdete v tématu Prostředky skriptu pro vyčištění nasazení.
Poznámka:
Logika opakování pro přihlášení k Azure je teď integrovaná do skriptu obálky. Pokud udělíte oprávnění ve stejné šabloně jako vaše skripty nasazení, služba skriptů nasazení se pokusí přihlásit po dobu 10 minut s 10sekundovým intervalem, dokud se přiřazení role spravované identity nereplikuje.
Školicí materiály
Pokud byste se raději dozvěděli o skriptech nasazení pomocí podrobných pokynů, přečtěte si téma Rozšíření šablon ARM pomocí skriptů nasazení.
Konfigurace minimálních oprávnění
Pro rozhraní API skriptu nasazení verze 2020-10-01 nebo novější existují dva objekty zabezpečení při spouštění skriptu nasazení:
Instanční objekt nasazení (objekt zabezpečení použitý k nasazení šablony): Tento objekt zabezpečení slouží k vytvoření podkladových prostředků potřebných ke spuštění prostředku skriptu nasazení – účtu úložiště a instanci kontejneru Azure. Pokud chcete nakonfigurovat oprávnění s nejnižšími oprávněními, přiřaďte k objektu zabezpečení nasazení vlastní roli s následujícími vlastnostmi:
{ "roleName": "deployment-script-minimum-privilege-for-deployment-principal", "description": "Configure least privilege for the deployment principal in deployment script", "type": "customRole", "IsCustom": true, "permissions": [ { "actions": [ "Microsoft.Storage/storageAccounts/*", "Microsoft.ContainerInstance/containerGroups/*", "Microsoft.Resources/deployments/*", "Microsoft.Resources/deploymentScripts/*" ], } ], "assignableScopes": [ "[subscription().id]" ] }
Pokud nejsou zaregistrovaní poskytovatelé prostředků Azure Storage a azure Container Instance, musíte je také přidat
Microsoft.Storage/register/action
aMicrosoft.ContainerInstance/register/action
.Instanční objekt skriptu nasazení: Tento objekt zabezpečení se vyžaduje jenom v případě, že se skript nasazení musí ověřit v Azure a volat Azure CLI nebo PowerShell. Instanční objekt skriptu nasazení můžete zadat dvěma způsoby:
- Zadejte spravovanou identitu přiřazenou uživatelem ve
identity
vlastnosti (viz ukázkové šablony). Po zadání služba skriptů voláConnect-AzAccount -Identity
před vyvoláním skriptu nasazení. Spravovaná identita musí mít požadovaný přístup k dokončení operace ve skriptu. V současné době se pro tuto vlastnost podporuje pouze spravovaná identita přiřazená uživatelemidentity
. Pokud se chcete přihlásit s jinou identitou, použijte druhou metodu v tomto seznamu. - Předejte přihlašovací údaje instančního objektu jako zabezpečené proměnné prostředí a pak můžete ve skriptu nasazení volat Connect-AzAccount nebo az login .
Pokud se používá spravovaná identita, objekt zabezpečení nasazení potřebuje roli operátora spravované identity (předdefinované role) přiřazenou k prostředku spravované identity.
- Zadejte spravovanou identitu přiřazenou uživatelem ve
Ukázkové šablony
Příkladem je následující JSON. Další informace najdete v nejnovějším schématu šablony.
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "runPowerShellInline",
"location": "[resourceGroup().location]",
"tags": {
"tagName1": "tagValue1",
"tagName2": "tagValue2"
},
"kind": "AzurePowerShell", // or "AzureCLI"
"identity": {
"type": "userAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myID": {}
}
},
"properties": {
"forceUpdateTag": "1",
"containerSettings": {
"containerGroupName": "mycustomaci"
},
"storageAccountSettings": {
"storageAccountName": "myStorageAccount",
"storageAccountKey": "myKey"
},
"azPowerShellVersion": "9.7", // or "azCliVersion": "2.47.0",
"arguments": "-name \\\"John Dole\\\"",
"environmentVariables": [
{
"name": "UserName",
"value": "jdole"
},
{
"name": "Password",
"secureValue": "jDolePassword"
}
],
"scriptContent": "
param([string] $name)
$output = 'Hello {0}. The username is {1}, the password is {2}.' -f $name,${Env:UserName},${Env:Password}
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
", // or "primaryScriptUri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.ps1",
"supportingScriptUris":[],
"timeout": "PT30M",
"cleanupPreference": "OnSuccess",
"retentionInterval": "P1D"
}
}
Poznámka:
Příklad je určený pro demonstrační účely. Vlastnosti scriptContent
a primaryScriptUri
nemůžou existovat společně v šabloně.
Poznámka:
ScriptContent zobrazuje skript s více řádky. Azure Portal a kanál Azure DevOps nemůžou parsovat skript nasazení s více řádky. Příkazy PowerShellu můžete zřetězí (pomocí středníků nebo \r\n nebo \n) na jeden řádek nebo použít primaryScriptUri
vlastnost s externím souborem skriptu. K dispozici je mnoho bezplatných nástrojů JSON string escape/unescape. Například https://www.freeformatter.com/json-escape.html.
Podrobnosti o hodnotě vlastnosti:
identity
: Pro rozhraní API skriptu nasazení verze 2020-10-01 nebo novější je spravovaná identita přiřazená uživatelem volitelná, pokud ve skriptu nepotřebujete provádět žádné akce specifické pro Azure. Pro rozhraní API verze 2019-10-01-preview se vyžaduje spravovaná identita, protože ji služba skriptů nasazení používá ke spouštění skriptů. Pokud je zadána vlastnost identity, služba skriptu voláConnect-AzAccount -Identity
před vyvoláním uživatelského skriptu. V současné době se podporuje pouze spravovaná identita přiřazená uživatelem. Pokud se chcete přihlásit pomocí jiné identity, můžete ve skriptu volat Connect-AzAccount .tags
: Značky skriptu nasazení. Pokud služba skriptů nasazení vygeneruje účet úložiště a instanci kontejneru, předají se značky oběma prostředkům, které je možné použít k jejich identifikaci. Další způsob, jak tyto prostředky identifikovat, je prostřednictvím jejich přípon, které obsahují "azscripts". Další informace najdete v tématu Monitorování a řešení potíží se skripty nasazení.kind
: Zadejte typ skriptu. V současné době se podporují skripty Azure PowerShellu a Azure CLI. Hodnoty jsou AzurePowerShell a AzureCLI.forceUpdateTag
: Změna této hodnoty mezi nasazeními šablony vynutí opětovné spuštění skriptu nasazení. Pokud používátenewGuid()
funkce neboutcNow()
funkce, lze obě funkce použít pouze ve výchozí hodnotě parametru. Další informace najdete v tématu Spuštění skriptu více než jednou.containerSettings
: Zadejte nastavení pro přizpůsobení instance kontejneru Azure. Skript nasazení vyžaduje novou instanci kontejneru Azure. Nemůžete zadat existující instanci kontejneru Azure. Název skupiny kontejnerů ale můžete přizpůsobit pomocí .containerGroupName
Pokud není zadaný, název skupiny se automaticky vygeneruje.storageAccountSettings
: Zadejte nastavení pro použití existujícího účtu úložiště. PokudstorageAccountName
není zadaný, účet úložiště se vytvoří automaticky. Viz Použití existujícího účtu úložiště.azPowerShellVersion
/azCliVersion
: Zadejte verzi modulu, která se má použít. Podívejte se na seznam podporovaných verzí Azure PowerShellu. Verze určuje, kterou image kontejneru se má použít:- Az verze větší nebo rovna 9 používá Ubuntu 22.04.
- Az verze větší nebo rovna 6, ale menší než 9 používá Ubuntu 20.04.
- Az verze menší než 6 používá Ubuntu 18.04.
Důležité
Doporučujeme upgradovat na nejnovější verzi Ubuntu, protože Ubuntu 18.04 se blíží konci životnosti a již nebude dostávat aktualizace zabezpečení po 31. květnu 2023.
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). K certifikaci image rozhraní příkazového řádku pro skript nasazení obvykle 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 se používá nepodporovaná verze, zobrazí se v chybové zprávě seznam podporovaných verzí.
arguments
: Zadejte hodnoty parametrů. Hodnoty jsou oddělené mezerami.Skripty nasazení rozdělí argumenty na pole řetězců vyvoláním systémového volání CommandLineToArgvW . Tento krok je nezbytný, protože argumenty se předávají jako vlastnost příkazu instanci kontejneru Azure a vlastnost příkazu je pole řetězce.
Pokud argumenty obsahují řídicí znaky, použijte JsonEscaper k dvojitému uvozování znaků. Vložte do nástroje původní řídicí řetězec a pak vyberte Řídicí znak. Nástroj vypíše dvojitý řídicí řetězec. Například v předchozí ukázkové šabloně je
-name \"John Dole\"
argument . Uchvácený řetězec je-name \\\"John Dole\\\"
.Pokud chcete předat parametr šablony ARM objektu typu jako argument, převeďte objekt na řetězec pomocí funkce string() a potom pomocí funkce replace() nahraďte libovolný
\"
objekt .\\\"
Příklad:replace(string(parameters('tables')), '\"', '\\\"')
Další informace najdete v ukázkové šabloně.
environmentVariables
: Zadejte proměnné prostředí, které se mají předat skriptu. Další informace naleznete v tématu Vývoj skriptů nasazení.scriptContent
: Zadejte obsah skriptu. Pokud chcete spustit externí skript, použijteprimaryScriptUri
místo toho. Příklady najdete v tématu Použití vloženého skriptu a použití externího skriptu.primaryScriptUri
: Zadejte veřejně přístupnou adresu URL primárního skriptu nasazení s podporovanými příponami souborů. Další informace naleznete v tématu Použití externích skriptů.supportingScriptUris
: Zadejte pole veřejně přístupných adres URL pro podpůrné soubory, které jsou volána buď neboscriptContent
primaryScriptUri
. Další informace naleznete v tématu Použití externích skriptů.timeout
: Zadejte maximální povolenou dobu provádění skriptu určenou ve formátu ISO 8601. Výchozí hodnota je P1D.cleanupPreference
. Určete předvolbu čištění dvou podpůrných prostředků nasazení, účtu úložiště a instance kontejneru, když se spuštění skriptu dostane do stavu terminálu. Výchozí nastavení je Vždy, což znamená odstranění podpůrných prostředků bez ohledu na stav terminálu (Úspěch, Selhání, Zrušeno). Další informace najdete v tématu Vyčištění prostředků skriptu nasazení.retentionInterval
: Zadejte interval, pro který služba uchovává prostředek skriptu nasazení po spuštění skriptu nasazení dosáhne stavu terminálu. Prostředek skriptu nasazení se odstraní, když vyprší platnost této doby trvání. Doba trvání je založena na vzoru ISO 8601. Interval uchovávání je mezi 1 a 26 hodinami (PT26H). Tato vlastnost se používá, pokudcleanupPreference
je nastavena na OnExpiration. Další informace najdete v tématu Vyčištění prostředků skriptu nasazení.
Další ukázky
- Ukázka 1: Vytvořte trezor klíčů a pomocí skriptu nasazení přiřaďte k trezoru klíčů certifikát.
- Ukázka 2: Vytvoření skupiny prostředků na úrovni předplatného, vytvoření trezoru klíčů ve skupině prostředků a následné přiřazení certifikátu k trezoru klíčů pomocí skriptu nasazení
- Ukázka 3: Vytvoření spravované identity přiřazené uživatelem, přiřazení role přispěvatele k identitě na úrovni skupiny prostředků, vytvoření trezoru klíčů a následné přiřazení certifikátu k trezoru klíčů pomocí skriptu nasazení
- Ukázka 4: Jedná se o stejný scénář jako ukázka 1 v tomto seznamu. Vytvoří se nová skupina prostředků pro spuštění skriptu nasazení. Tato šablona je šablona na úrovni předplatného.
- Ukázka 5: jedná se o stejný scénář jako v ukázce 4. Tato šablona je šablona na úrovni skupiny prostředků.
- Ukázka 6: Ručně vytvořte spravovanou identitu přiřazenou uživatelem a přiřaďte jí oprávnění k vytváření aplikací Microsoft Graph API. V šabloně ARM použijte skript nasazení k vytvoření aplikace Microsoft Entra a instančního objektu a výstup ID objektů a ID klienta.
Použití vložených skriptů
Následující šablona má jeden prostředek definovaný s typem Microsoft.Resources/deploymentScripts
. Zvýrazněná část je vložený skript.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string",
"defaultValue": "\\\"John Dole\\\""
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "runPowerShellInlineWithOutput",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azPowerShellVersion": "8.3",
"scriptContent": "
param([string] $name)
$output = \"Hello {0}\" -f $name
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"arguments": "[concat('-name', ' ', parameters('name'))]",
"timeout": "PT1H",
"cleanupPreference": "OnSuccess",
"retentionInterval": "P1D"
}
}
],
"outputs": {
"result": {
"value": "[reference('runPowerShellInlineWithOutput').outputs.text]",
"type": "string"
}
}
}
Poznámka:
Protože vložené skripty nasazení jsou uzavřeny v dvojitých uvozovkách, řetězce uvnitř skriptů nasazení musí být uvozené pomocí zpětného lomítka (\) nebo uzavřené v jednoduchých uvozovkách. Můžete také zvážit použití nahrazení řetězců, jak je znázorněno v předchozí ukázce JSON.
Skript přebírá jeden parametr a vypíše hodnotu parametru. DeploymentScriptOutputs
slouží k ukládání výstupů. V části value
Výstupy řádek ukazuje, jak získat přístup k uloženým hodnotám. Write-Output
se používá pro účely ladění. Informace o přístupu k výstupnímu souboru najdete v tématu Monitorování a řešení potíží se skripty nasazení. Popisy vlastností najdete v části Ukázkové šablony.
Pokud chcete skript spustit, vyberte Vyzkoušet , aby se otevřel Cloud Shell, a vložte do podokna prostředí následující kód.
$resourceGroupName = Read-Host -Prompt "Enter the name of the resource group to be created"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.json"
Write-Host "Press [ENTER] to continue ..."
Výstup vypadá takto:
Použití externích skriptů
Kromě vložených skriptů můžete také použít soubory externích skriptů. Podporují se jenom primární skripty PowerShellu s příponou ps1 . Pro skripty rozhraní příkazového řádku můžou mít primární skripty libovolná rozšíření (nebo bez rozšíření), pokud jsou skripty platnými skripty Bash. Chcete-li použít soubory externích skriptů, nahraďte scriptContent
příponou primaryScriptUri
. Příklad:
"primaryScriptUri": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/deploymentscript-helloworld.ps1",
Další informace najdete v ukázkové šabloně.
Soubory externích skriptů musí být přístupné. Pokud chcete zabezpečit soubory skriptu uložené v účtech úložiště Azure, vygenerujte token SAS a zahrňte ho do identifikátoru URI šablony. Nastavte dobu vypršení platnosti, aby bylo možné dokončit nasazení dostatek času. Další informace najdete v tématu Nasazení privátní šablony ARM s tokenem SAS.
Zodpovídáte za zajištění integrity skriptů, na které odkazuje skript nasazení, nebo primaryScriptUri
supportingScriptUris
. Odkazujte pouze na skripty, kterým důvěřujete.
Použití podpůrných skriptů
Složité logiky můžete oddělit do jednoho nebo více podpůrných souborů skriptů. Vlastnost supportingScriptUris
umožňuje poskytnout pole identifikátorů URI podpůrným souborům skriptů v případě potřeby:
"scriptContent": "
...
./Create-Cert.ps1
...
"
"supportingScriptUris": [
"https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/deployment-script/create-cert.ps1"
],
Podpůrné soubory skriptu lze volat z vložených skriptů i souborů primárních skriptů. Podpůrné soubory skriptů nemají žádná omezení přípony souboru.
Podpůrné soubory se zkopírují za azscripts/azscriptinput
běhu. Relativní cesta slouží k odkazování na podpůrné soubory z vložených skriptů a souborů primárních skriptů.
Práce s výstupy ze skriptů PowerShellu
Následující šablona ukazuje, jak předávat hodnoty mezi dvěma deploymentScripts
prostředky:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string",
"defaultValue": "John Dole"
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "scriptInTemplate1",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azPowerShellVersion": "8.3",
"timeout": "PT1H",
"arguments": "[concat('-name', ' ', concat('\\\"', parameters('name'), '\\\"'))]",
"scriptContent": "
param([string] $name)
$output = 'Hello {0}' -f $name
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
",
"cleanupPreference": "Always",
"retentionInterval": "P1D"
}
},
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "scriptInTemplate2",
"location": "[resourceGroup().location]",
"kind": "AzurePowerShell",
"dependsOn": [
"scriptInTemplate1"
],
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azPowerShellVersion": "8.3",
"timeout": "PT1H",
"arguments": "[concat('-textToEcho', ' ', concat('\\\"', reference('scriptInTemplate1').outputs.text, '\\\"'))]",
"scriptContent": "
param([string] $textToEcho)
Write-Output $textToEcho
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $textToEcho
",
"cleanupPreference": "Always",
"retentionInterval": "P1D"
}
}
],
"outputs": {
"result": {
"value": "[reference('scriptInTemplate2').outputs.text]",
"type": "string"
}
}
}
V prvním prostředku definujete proměnnou s názvem $DeploymentScriptOutputs
a použijete ji k uložení výstupních hodnot. Pokud chcete získat přístup k výstupní hodnotě z jiného prostředku v rámci šablony, použijte:
reference('<ResourceName>').outputs.text
Práce s výstupy ze skriptů rozhraní příkazového řádku
Na rozdíl od skriptů nasazení Azure PowerShellu rozhraní příkazového řádku nebo Bash nezpřístupňuje společnou proměnnou pro ukládání výstupů skriptu. Místo toho využívá proměnnou prostředí s názvem AZ_SCRIPTS_OUTPUT_PATH
označující umístění výstupního souboru skriptu. Při spouštění skriptu nasazení v rámci šablony ARM prostředí Bash automaticky nakonfiguruje tuto proměnnou prostředí za vás. Předdefinovaná hodnota je nastavená na /mnt/azscripts/azscriptoutput/scriptoutputs.json. Výstupy se vyžadují, aby odpovídaly platné struktuře objektu řetězce JSON. Obsah souboru by měl být formátovaný jako pár klíč-hodnota. Například pole řetězců by mělo být uloženo jako { "MyResult": [ "foo", "bar"] }. Uložení pouze výsledků pole, například [ "foo", "bar" ], je považováno za neplatné.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"identity": {
"type": "string"
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2020-10-01",
"name": "runBashWithOutputs",
"location": "[resourceGroup().location]",
"kind": "AzureCLI",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[parameters('identity')]": {
}
}
},
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"AzCliVersion": "2.40.0",
"timeout": "PT30M",
"arguments": "'foo' 'bar'",
"environmentVariables": [
{
"name": "UserName",
"value": "jdole"
},
{
"name": "Password",
"secureValue": "jDolePassword"
}
],
"scriptContent": "result=$(az keyvault list); echo \"arg1 is: $1\"; echo \"arg2 is: $2\"; echo \"Username is: $UserName\"; echo \"password is: $Password\"; echo $result | jq -c '{Result: map({id: .id})}' > $AZ_SCRIPTS_OUTPUT_PATH",
"cleanupPreference": "OnExpiration",
"retentionInterval": "P1D"
jq se používá v předchozí ukázce. Dodává se s imagemi kontejnerů. Viz Konfigurace vývojového prostředí.
Použití existujícího účtu úložiště
Účet úložiště a instance kontejneru jsou potřeba pro spouštění skriptů a řešení potíží. Máte možnosti zadat existující účet úložiště, jinak se účet úložiště spolu s instancí kontejneru automaticky vytvoří službou skriptů. Požadavky na použití existujícího účtu úložiště:
Podporované typy účtů úložiště jsou:
Skladová jednotka (SKU) Podporovaný druh Premium_LRS File Storage Premium_ZRS File Storage Standard_GRS Úložiště, StorageV2 Standard_GZRS StorageV2 Standard_LRS Úložiště, StorageV2 Standard_RAGRS Úložiště, StorageV2 Standard_RAGZRS StorageV2 Standard_ZRS StorageV2 Tyto kombinace podporují sdílené složky. Další informace najdete v tématu Vytvoření sdílené složky Azure a typů účtů úložiště.
Pravidla brány firewall účtu úložiště se zatím nepodporují. Další informace najdete v tématu Konfigurace virtuálních sítí a bran firewall Azure Storage.
Instanční objekt nasazení musí mít oprávnění ke správě účtu úložiště, který zahrnuje čtení, vytváření a odstraňování sdílených složek.
Vlastnost
allowSharedKeyAccess
účtu úložiště musí být nastavena natrue
hodnotu . Jediným způsobem, jak připojit účet úložiště ve službě Azure Container Instance (ACI), je prostřednictvím přístupového klíče.
Pokud chcete zadat existující účet úložiště, přidejte do elementu Microsoft.Resources/deploymentScripts
vlastnosti následující JSON:
"storageAccountSettings": {
"storageAccountName": "myStorageAccount",
"storageAccountKey": "myKey"
},
storageAccountName
: Zadejte název účtu úložiště.storageAccountKey
: Zadejte jeden z klíčů účtu úložiště. Klíč můžete načíst pomocí funkce listKeys( ). Příklad:"storageAccountSettings": { "storageAccountName": "[variables('storageAccountName')]", "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value]" }
Podívejte se na ukázkové šablony pro úplnou Microsoft.Resources/deploymentScripts
ukázku definice.
Když použijete existující účet úložiště, služba skriptů vytvoří sdílenou složku s jedinečným názvem. Informace o tom, jak služba skriptů vyčistí sdílenou složku, najdete v tématu Vyčištění prostředků skriptu nasazení.
Vývoj skriptů nasazení
Zpracování neterminujících chyb
Pomocí proměnné ve skriptu nasazení můžete řídit, jak PowerShell reaguje na neterminující chyby $ErrorActionPreference
. Pokud proměnná není ve skriptu nasazení nastavená, služba skriptů použije výchozí hodnotu Pokračovat.
Služba skriptů nastaví stav zřizování prostředků na selhání , pokud skript narazí na chybu i přes nastavení $ErrorActionPreference
.
Používání proměnných prostředí
Skript nasazení používá tyto proměnné prostředí:
Proměnná prostředí | Default value | Rezervovaný systém |
---|---|---|
AZ_SCRIPTS_AZURE_ENVIRONMENT | AzureCloud | N |
AZ_SCRIPTS_CLEANUP_PREFERENCE | OnExpiration | N |
AZ_SCRIPTS_OUTPUT_PATH | <>AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY/<AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME> | Y |
AZ_SCRIPTS_PATH_INPUT_DIRECTORY | /mnt/azscripts/azscriptinput | Y |
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY | /mnt/azscripts/azscriptoutput | Y |
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME | Azure PowerShell: userscript.ps1; Azure CLI: userscript.sh | Y |
AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME | primaryscripturi.config | Y |
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME | supportingscripturi.config | Y |
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME | scriptoutputs.json | Y |
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME | executionresult.json | Y |
AZ_SCRIPTS_USER_ASSIGNED_IDENTITY | /předplatná/ | N |
Další informace o použití AZ_SCRIPTS_OUTPUT_PATH
naleznete v tématu Práce s výstupy ze skriptu rozhraní příkazového řádku.
Předání zabezpečených řetězců do skriptu nasazení
Nastavení proměnných prostředí (EnvironmentVariable) v instancích kontejneru umožňuje poskytnout dynamickou konfiguraci aplikace nebo skriptu spuštěného kontejnerem. Skript nasazení zpracovává nezabezpečené a zabezpečené proměnné prostředí stejným způsobem jako azure Container Instance. Další informace najdete v tématu Nastavení proměnných prostředí v instancích kontejneru. Příklad najdete v ukázkových šablonách.
Maximální povolená velikost proměnných prostředí je 64 kB.
Monitorování a řešení potíží se skripty nasazení
Služba skriptů vytvoří účet úložiště (pokud nezadáte existující účet úložiště) a instanci kontejneru pro spuštění skriptu. Pokud jsou tyto prostředky automaticky vytvořeny službou skriptů, oba prostředky mají příponu azscripts
v názvech prostředků.
Uživatelský skript, výsledky provádění a soubor stdout jsou uloženy ve sdílených složkách účtu úložiště. Je tam složka s názvem azscripts
. Ve složce jsou pro vstup a výstupní soubory dvě další složky: azscriptinput
a azscriptoutput
.
Výstupní složka obsahuje executionresult.json a výstupní soubor skriptu. V executionresult.json se zobrazí chybová zpráva o spuštění skriptu. Výstupní soubor se vytvoří pouze při úspěšném spuštění skriptu. Vstupní složka obsahuje systémový soubor skriptu PowerShellu a soubory skriptu nasazení uživatele. Soubor skriptu nasazení uživatele můžete nahradit upraveným skriptem a znovu spustit skript nasazení z instance kontejneru Azure.
Použití portálu Azure Portal
Po nasazení prostředku skriptu nasazení se prostředek zobrazí ve skupině prostředků na webu Azure Portal. Následující snímek obrazovky ukazuje stránku Přehled prostředku skriptu nasazení:
Na stránce přehledu se zobrazí některé důležité informace o prostředku, jako je stav zřizování, účet úložiště, instance kontejneru a protokoly.
V nabídce vlevo můžete zobrazit obsah skriptu nasazení, argumenty předané skriptu a výstup. Můžete také exportovat šablonu pro skript nasazení, včetně skriptu nasazení.
Použití PowerShellu
Pomocí Azure PowerShellu můžete spravovat skripty nasazení v oboru předplatného nebo skupiny prostředků:
- Get-AzDeploymentScript: Získá nebo vypíše skripty nasazení.
- Get-AzDeploymentScriptLog: Získá protokol spuštění skriptu nasazení.
- Remove-AzDeploymentScript: Odebere skript nasazení a jeho přidružené prostředky.
- Save-AzDeploymentScriptLog: Uloží protokol spuštění skriptu nasazení na disk.
Výstup Get-AzDeploymentScript
je podobný následujícímu:
Name : runPowerShellInlineWithOutput
Id : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0618rg/providers/Microsoft.Resources/deploymentScripts/runPowerShellInlineWithOutput
ResourceGroupName : myds0618rg
Location : centralus
SubscriptionId : aaaabbbb-0000-cccc-1111-dddd2222eeee
ProvisioningState : Succeeded
Identity : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/mydentity1008rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami
ScriptKind : AzurePowerShell
AzPowerShellVersion : 9.7
StartTime : 5/11/2023 7:46:45 PM
EndTime : 5/11/2023 7:49:45 PM
ExpirationDate : 5/12/2023 7:49:45 PM
CleanupPreference : OnSuccess
StorageAccountId : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0618rg/providers/Microsoft.Storage/storageAccounts/ftnlvo6rlrvo2azscripts
ContainerInstanceId : /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0618rg/providers/Microsoft.ContainerInstance/containerGroups/ftnlvo6rlrvo2azscripts
Outputs :
Key Value
================== ==================
text Hello John Dole
RetentionInterval : P1D
Timeout : PT1H
Použití Azure CLI
Pomocí Azure CLI můžete spravovat skripty nasazení v oboru předplatného nebo skupiny prostředků:
- az deployment-scripts delete: Odstranění skriptu nasazení
- az deployment-scripts list: Seznam všech skriptů nasazení
- az deployment-scripts show: Načtení skriptu nasazení
- az deployment-scripts show-log: Show deployment script logs.
Výstup příkazu list je podobný následujícímu:
[
{
"arguments": "'foo' 'bar'",
"azCliVersion": "2.40.0",
"cleanupPreference": "OnExpiration",
"containerSettings": {
"containerGroupName": null
},
"environmentVariables": null,
"forceUpdateTag": "20231101T163748Z",
"id": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.Resources/deploymentScripts/runBashWithOutputs",
"identity": {
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "userAssigned",
"userAssignedIdentities": {
"/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourcegroups/myidentity/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami": {
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"principalId": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
}
},
"kind": "AzureCLI",
"location": "centralus",
"name": "runBashWithOutputs",
"outputs": {
"Result": [
{
"id": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/mytest/providers/Microsoft.KeyVault/vaults/mykv1027",
"resourceGroup": "mytest"
}
]
},
"primaryScriptUri": null,
"provisioningState": "Succeeded",
"resourceGroup": "mytest",
"retentionInterval": "1 day, 0:00:00",
"scriptContent": "result=$(az keyvault list); echo \"arg1 is: $1\"; echo $result | jq -c '{Result: map({id: .id})}' > $AZ_SCRIPTS_OUTPUT_PATH",
"status": {
"containerInstanceId": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/mytest/providers/Microsoft.ContainerInstance/containerGroups/eg6n7wvuyxn7iazscripts",
"endTime": "2023-11-01T16:39:12.080950+00:00",
"error": null,
"expirationTime": "2023-11-02T16:39:12.080950+00:00",
"startTime": "2023-11-01T16:37:53.139700+00:00",
"storageAccountId": null
},
"storageAccountSettings": {
"storageAccountKey": null,
"storageAccountName": "dsfruro267qwb4i"
},
"supportingScriptUris": null,
"systemData": {
"createdAt": "2023-10-31T19:06:57.060909+00:00",
"createdBy": "someone@contoso.com",
"createdByType": "User",
"lastModifiedAt": "2023-11-01T16:37:51.859570+00:00",
"lastModifiedBy": "someone@contoso.com",
"lastModifiedByType": "User"
},
"tags": null,
"timeout": "0:30:00",
"type": "Microsoft.Resources/deploymentScripts"
}
]
Použití rozhraní REST API
Informace o nasazení prostředků skriptu nasazení můžete získat na úrovni skupiny prostředků a na úrovni předplatného pomocí rozhraní REST API:
/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/microsoft.resources/deploymentScripts/<DeploymentScriptResourceName>?api-version=2020-10-01
/subscriptions/<SubscriptionID>/providers/microsoft.resources/deploymentScripts?api-version=2020-10-01
Následující příklad používá ARMClient:
armclient login
armclient get /subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourcegroups/myrg/providers/microsoft.resources/deploymentScripts/myDeployementScript?api-version=2020-10-01
Výstup je podobný tomuto:
{
"kind": "AzurePowerShell",
"identity": {
"type": "userAssigned",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"userAssignedIdentities": {
"/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myidentity1008rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami": {
"principalId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444"
}
}
},
"location": "centralus",
"systemData": {
"createdBy": "someone@contoso.com",
"createdByType": "User",
"createdAt": "2023-05-11T02:59:04.7501955Z",
"lastModifiedBy": "someone@contoso.com",
"lastModifiedByType": "User",
"lastModifiedAt": "2023-05-11T02:59:04.7501955Z"
},
"properties": {
"provisioningState": "Succeeded",
"forceUpdateTag": "20220625T025902Z",
"azPowerShellVersion": "9.7",
"scriptContent": "\r\n param([string] $name)\r\n $output = \"Hello {0}\" -f $name\r\n Write-Output $output\r\n $DeploymentScriptOutputs = @{}\r\n $DeploymentScriptOutputs['text'] = $output\r\n ",
"arguments": "-name \\\"John Dole\\\"",
"retentionInterval": "P1D",
"timeout": "PT1H",
"containerSettings": {},
"status": {
"containerInstanceId": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.ContainerInstance/containerGroups/64lxews2qfa5uazscripts",
"storageAccountId": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.Storage/storageAccounts/64lxews2qfa5uazscripts",
"startTime": "2023-05-11T02:59:07.5951401Z",
"endTime": "2023-05-11T03:00:16.7969234Z",
"expirationTime": "2023-05-12T03:00:16.7969234Z"
},
"outputs": {
"text": "Hello John Dole"
},
"cleanupPreference": "OnSuccess"
},
"id": "/subscriptions/aaaabbbb-0000-cccc-1111-dddd2222eeee/resourceGroups/myds0624rg/providers/Microsoft.Resources/deploymentScripts/runPowerShellInlineWithOutput",
"type": "Microsoft.Resources/deploymentScripts",
"name": "runPowerShellInlineWithOutput"
}
Následující rozhraní REST API vrátí protokol:
/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/microsoft.resources/deploymentScripts/<DeploymentScriptResourceName>/logs?api-version=2020-10-01
Funguje pouze před odstraněním prostředků skriptu nasazení.
Pokud chcete zobrazit prostředek deploymentScripts na portálu, vyberte Zobrazit skryté typy:
Vyčištění prostředků skriptu nasazení
Oba automaticky vytvořené podpůrné prostředky nemohou prostředek nikdy prožít deploymentScript
, pokud nedojde k jejich selháním. Životní cyklus podpůrných prostředků je řízen cleanupPreference
vlastností, životní cyklus deploymentScript
prostředku je řízen retentionInterval
vlastností:
cleanupPreference
: Určete předvolbu vyčištění dvou podpůrných prostředků, když se spuštění skriptu dostane do stavu terminálu. Podporované hodnoty jsou:Vždy: Odstraňte dva podpůrné prostředky, jakmile se spuštění skriptu dostane do stavu terminálu. Pokud se použije existující účet úložiště, služba skriptů odstraní sdílenou složku vytvořenou službou.
deploymentScripts
Vzhledem k tomu, že prostředek může být stále k dispozici po vyčištění podpůrných prostředků, služba skriptů zachová výsledky provádění skriptu, například stdout, výstupy a návratovou hodnotu před odstraněním prostředků.OnSuccess: Odstraňte tyto dva podpůrné prostředky pouze v případech, kdy je spuštění skriptu úspěšné. Pokud se použije existující účet úložiště, služba skriptů odebere sdílenou složku pouze v případě, že je spuštění skriptu úspěšné.
Pokud spuštění skriptu není úspěšné, služba skriptů počká, dokud
retentionInterval
nevyprší platnost, než vyčistí podpůrné prostředky a pak prostředek skriptu nasazení.OnExpiration: Odstraňte tyto dva podpůrné prostředky pouze v případech, kdy
retentionInterval
vypršela platnost nastavení. Pokud se použije existující účet úložiště, služba skriptů odebere sdílenou složku, ale zachová účet úložiště.
Instance kontejneru a účet úložiště jsou odstraněny podle .
cleanupPreference
Pokud ale skript selže acleanupPreference
není nastavený na hodnotu Always, proces nasazení automaticky udržuje kontejner spuštěný po dobu jedné hodiny nebo dokud se kontejner nevyčistí. Čas můžete použít k řešení potíží se skriptem. Pokud chcete kontejner nechat spuštěný po úspěšném nasazení, přidejte do skriptu krok spánku. Například na konec skriptu přidejte Start-Sleep . Pokud krok spánku nepřidáte, kontejner je nastavený na stav terminálu a není k němu přístup, i když ještě nebyl odstraněn.retentionInterval
: Zadejte časový interval,deploymentScript
po jehož uplynutí bude prostředek zachován a odstraněn.
Poznámka:
Nedoporučujeme používat účet úložiště a instanci kontejneru vygenerovanou službou skriptů pro jiné účely. Tyto dva prostředky se můžou odebrat v závislosti na životním cyklu skriptu.
Automaticky vytvořený účet úložiště a instanci kontejneru nelze odstranit, pokud je skript nasazení nasazen do skupiny prostředků s zámkem CanNotDelete. Pokud chcete tento problém vyřešit, můžete nasadit skript nasazení do jiné skupiny prostředků bez zámků. Viz Ukázka 4 a Ukázka 5 v ukázkových šablonách.
Spuštění skriptu více než jednou
Spuštění skriptu nasazení je idempotentní operace. Pokud se nezmění žádné vlastnosti deploymentScripts
prostředku (včetně vloženého skriptu), skript se při opětovném nasazení šablony nespustí. Služba skriptů nasazení porovnává názvy prostředků v šabloně s existujícími prostředky ve stejné skupině prostředků. Pokud chcete stejný skript nasazení spustit vícekrát, existují dvě možnosti:
Změňte název prostředku
deploymentScripts
. Například jako název prostředku nebo jako součást názvu prostředku použijte funkci šablony UTCNow . Změna názvu prostředku vytvoří novýdeploymentScripts
prostředek. Je dobré udržovat historii spouštění skriptů.Poznámka:
Funkci
utcNow
lze použít pouze ve výchozí hodnotě parametru.Zadejte jinou hodnotu ve
forceUpdateTag
vlastnosti šablony. Například použijteutcNow
jako hodnotu.
Poznámka:
Zapište skripty nasazení, které jsou idempotentní. Tím se zajistí, že pokud se znovu spustí omylem, nezpůsobí změny systému. Pokud se například skript nasazení používá k vytvoření prostředku Azure, ověřte, že prostředek před vytvořením neexistuje, takže skript bude úspěšný nebo prostředek znovu nevytvoříte.
Konfigurace vývojového prostředí
Jako vývojové prostředí skriptu nasazení můžete použít předkonfigurovanou image kontejneru. Další informace najdete v tématu Konfigurace vývojového prostředí pro skripty nasazení v šablonách.
Po úspěšném otestování skriptu ho můžete použít jako skript nasazení ve svých šablonách.
Kódy chyb skriptu nasazení
Kód chyby | Popis |
---|---|
DeploymentScriptInvalidOperation | Definice prostředku skriptu nasazení v šabloně obsahuje neplatné názvy vlastností. |
DeploymentScriptResourceConflict | Nejde odstranit prostředek skriptu nasazení, který je v netermiálním stavu a spuštění nepřekročilo 1 hodinu. Nebo nemůžete znovu spustit stejný skript nasazení se stejným identifikátorem prostředku (stejné předplatné, název skupiny prostředků a název prostředku), ale současně s jiným obsahem textu skriptu. |
DeploymentScriptOperationFailed | Operace skriptu nasazení selhala interně. Obraťte se na podporu Microsoftu. |
DeploymentScriptStorageAccountAccessKeyNotSpecified | Přístupový klíč nebyl zadán pro existující účet úložiště. |
DeploymentScriptContainerGroupContainsInvalidContainers | Skupina kontejnerů vytvořená službou skriptů nasazení se externě změnila a přidaly se neplatné kontejnery. |
DeploymentScriptContainerGroupInNonterminalState | Dva nebo více prostředků skriptu nasazení používají stejný název instance kontejneru Azure ve stejné skupině prostředků a jeden z nich ještě nedokončil její spuštění. |
DeploymentScriptStorageAccountInvalidKind | Existující účet úložiště typu BlobBlobStorage nebo BlobStorage nepodporuje sdílené složky a nedá se použít. |
DeploymentScriptStorageAccountInvalidKindAndSku | Stávající účet úložiště nepodporuje sdílené složky. Seznam podporovaných typů účtů úložiště najdete v tématu Použití existujícího účtu úložiště. |
DeploymentScriptStorageAccountNotFound | Účet úložiště neexistuje nebo byl odstraněn externím procesem nebo nástrojem. |
DeploymentScriptStorageAccountWithServiceEndpointEnabled | Zadaný účet úložiště má koncový bod služby. Účet úložiště s koncovým bodem služby se nepodporuje. |
DeploymentScriptStorageAccountInvalidAccessKey | Pro existující účet úložiště je zadaný neplatný přístupový klíč. |
DeploymentScriptStorageAccountInvalidAccessKeyFormat | Neplatný formát klíče účtu úložiště Viz Správa přístupových klíčů účtu úložiště. |
DeploymentScriptExceededMaxAllowedTime | Doba spuštění skriptu nasazení překročila hodnotu časového limitu zadanou v definici prostředku skriptu nasazení. |
DeploymentScriptInvalidOutputs | Výstup skriptu nasazení není platný objekt JSON. |
DeploymentScriptContainerInstancesServiceLoginFailure | Spravovaná identita přiřazená uživatelem se po 10 pokusech s 1 minutovým intervalem nemohla přihlásit. |
DeploymentScriptContainerGroupNotFound | Skupina kontejnerů vytvořená službou skriptů nasazení se odstranila externím nástrojem nebo procesem. |
DeploymentScriptDownloadFailure | Nepodařilo se stáhnout podpůrný skript. Viz Použití podpůrného skriptu. |
DeploymentScriptError | Uživatelský skript vyvolal chybu. |
DeploymentScriptBootstrapScriptExecutionFailed | Skript bootstrap vyvolal chybu. Spouštěcí skript je systémový skript, který orchestruje spuštění skriptu nasazení. |
DeploymentScriptExecutionFailed | Neznámá chyba při spouštění skriptu nasazení |
DeploymentScriptContainerInstancesServiceUnavailable | Při vytváření instance kontejneru Azure (ACI) vyvolala ACI chybu nedostupnosti služby. |
DeploymentScriptContainerGroupInNonterminalState | Při vytváření instance kontejneru Azure (ACI) používá jiný skript nasazení stejný název ACI ve stejném oboru (stejné předplatné, název skupiny prostředků a název prostředku). |
DeploymentScriptContainerGroupNameInvalid | Zadaný název instance kontejneru Azure (ACI) nesplňuje požadavky ACI. Viz Řešení běžných problémů ve službě Azure Container Instances. |
Použití Microsoft Graphu ve skriptu nasazení
Skript nasazení může použít Microsoft Graph k vytvoření a práci s objekty v Microsoft Entra ID.
Příkazy
Když používáte skripty nasazení Azure CLI, můžete pomocí příkazů ve az ad
skupině příkazů pracovat s aplikacemi, instančními objekty, skupinami a uživateli. Rozhraní Microsoft Graph API můžete také přímo vyvolat pomocí az rest
příkazu.
Pokud používáte skripty nasazení Azure PowerShellu, můžete pomocí Invoke-RestMethod
této rutiny přímo vyvolat rozhraní Microsoft Graph API.
Oprávnění
Identita, kterou skript nasazení používá, musí být autorizovaná pro práci s rozhraním Microsoft Graph API s příslušnými oprávněními pro operace, které provádí. Identitu musíte autorizovat mimo nasazení šablony, například tak, že předem vytvoříte spravovanou identitu přiřazenou uživatelem a přiřadíte jí roli aplikace pro Microsoft Graph. Další informace najdete v tomto příkladu rychlého startu.
Přístup k privátní virtuální síti
S Microsoft.Resources/deploymentScripts verze 2023-08-01 můžete spouštět skripty nasazení v privátních sítích s některými dalšími konfiguracemi.
Vytvořte spravovanou identitu přiřazenou uživatelem a zadejte ji ve
identity
vlastnosti. Pokud chcete identitu přiřadit, přečtěte si téma Identita.Vytvořte účet úložiště s nastaveným
allowSharedKeyAccess
nastavenímtrue
a zadejte skript nasazení pro použití existujícího účtu úložiště. Pokud chcete zadat existující účet úložiště, přečtěte si téma Použití existujícího účtu úložiště. Pro účet úložiště se vyžaduje některá další konfigurace.Otevřete účet úložiště na webu Azure Portal.
V nabídce vlevo vyberte Řízení přístupu (IAM) a pak vyberte kartu Přiřazení rolí.
Storage File Data Privileged Contributor
Přidejte roli do spravované identity přiřazení uživatele.V nabídce vlevo v části Zabezpečení a sítě vyberte Sítě a pak vyberte Brány firewall a virtuální sítě.
Vyberte Povoleno z vybraných virtuálních sítí a IP adres.
V části Virtuální sítě přidejte podsíť. Na snímku obrazovky se podsíť nazývá dspvnVnet.
V části Výjimky vyberte Povolit službám Azure v seznamu důvěryhodných služeb přístup k tomuto účtu úložiště.
Následující šablona ARM ukazuje, jak nakonfigurovat prostředí pro spuštění skriptu nasazení:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": {
"type": "string",
"maxLength": 10
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"userAssignedIdentityName": {
"type": "string",
"defaultValue": "[format('{0}Identity', parameters('prefix'))]"
},
"storageAccountName": {
"type": "string",
"defaultValue": "[format('{0}stg{1}', parameters('prefix'), uniqueString(resourceGroup().id))]"
},
"vnetName": {
"type": "string",
"defaultValue": "[format('{0}Vnet', parameters('prefix'))]"
},
"subnetName": {
"type": "string",
"defaultValue": "[format('{0}Subnet', parameters('prefix'))]"
}
},
"resources": [
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2023-09-01",
"name": "[parameters('vnetName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"10.0.0.0/16"
]
},
"enableDdosProtection": false,
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"addressPrefix": "10.0.0.0/24",
"serviceEndpoints": [
{
"service": "Microsoft.Storage"
}
],
"delegations": [
{
"name": "Microsoft.ContainerInstance.containerGroups",
"properties": {
"serviceName": "Microsoft.ContainerInstance/containerGroups"
}
}
]
}
}
]
}
},
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-01-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"networkAcls": {
"bypass": "AzureServices",
"virtualNetworkRules": [
{
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), parameters('subnetName'))]",
"action": "Allow",
"state": "Succeeded"
}
],
"defaultAction": "Deny"
},
"allowSharedKeyAccess": true
},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetName'))]"
]
},
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"apiVersion": "2023-07-31-preview",
"name": "[parameters('userAssignedIdentityName')]",
"location": "[parameters('location')]"
},
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"scope": "[format('Microsoft.Storage/storageAccounts/{0}', parameters('storageAccountName'))]",
"name": "[guid(tenantResourceId('Microsoft.Authorization/roleDefinitions', '69566ab7-960f-475b-8e7c-b3118f30c6bd'), resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')), resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')))]",
"properties": {
"principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')), '2023-07-31-preview').principalId]",
"roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', '69566ab7-960f-475b-8e7c-b3118f30c6bd')]",
"principalType": "ServicePrincipal"
},
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName'))]"
]
}
]
}
K otestování nasazení můžete použít následující šablonu ARM:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": {
"type": "string"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"utcValue": {
"type": "string",
"defaultValue": "[utcNow()]"
},
"storageAccountName": {
"type": "string"
},
"vnetName": {
"type": "string"
},
"subnetName": {
"type": "string"
},
"userAssignedIdentityName": {
"type": "string"
}
},
"resources": [
{
"type": "Microsoft.Resources/deploymentScripts",
"apiVersion": "2023-08-01",
"name": "[format('{0}DS', parameters('prefix'))]",
"location": "[parameters('location')]",
"identity": {
"type": "userAssigned",
"userAssignedIdentities": {
"[format('{0}', resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName')))]": {}
}
},
"kind": "AzureCLI",
"properties": {
"forceUpdateTag": "[parameters('utcValue')]",
"azCliVersion": "2.47.0",
"storageAccountSettings": {
"storageAccountName": "[parameters('storageAccountName')]"
},
"containerSettings": {
"subnetIds": [
{
"id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), parameters('subnetName'))]"
}
]
},
"scriptContent": "echo \"Hello world!\"",
"retentionInterval": "P1D",
"cleanupPreference": "OnExpiration"
}
}
]
}
Další kroky
V tomto článku jste zjistili, jak používat skripty nasazení. Kurz skriptu nasazení: