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 a Microsoft.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živatelem identity . 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 Připojení-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.

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/01234567-89AB-CDEF-0123-456789ABCDEF/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 Připojení-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áte newGuid() funkce nebo utcNow() 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ě. Pokud storageAccountName 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žijte primaryScriptUri 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ď nebo scriptContentprimaryScriptUri. 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á, pokud cleanupPreference 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:

Snímek obrazovky skriptu nasazení šablony Resource Manageru hello world

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 primaryScriptUrisupportingScriptUris. 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 $DeploymentScriptOutputsa 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.

Pokud chcete zadat existující účet úložiště, přidejte do elementu Microsoft.Resources/deploymentScriptsvlastnosti 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 /Odběry/ N

Další informace o použití AZ_SCRIPTS_OUTPUT_PATHnaleznete 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ů.

Snímek obrazovky s názvy prostředků skriptu nasazení šablon Resource Manageru

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í:

Snímek obrazovky s přehledem portálu skriptu nasazení šablon Resource Manageru

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ů:

Výstup Get-AzDeploymentScript je podobný následujícímu:

Name                : runPowerShellInlineWithOutput
Id                  : /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0618rg/providers/Microsoft.Resources/deploymentScripts/runPowerShellInlineWithOutput
ResourceGroupName   : myds0618rg
Location            : centralus
SubscriptionId      : 01234567-89AB-CDEF-0123-456789ABCDEF
ProvisioningState   : Succeeded
Identity            : /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/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/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0618rg/providers/Microsoft.Storage/storageAccounts/ftnlvo6rlrvo2azscripts
ContainerInstanceId : /subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/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ů:

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/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0624rg/providers/Microsoft.Resources/deploymentScripts/runBashWithOutputs",
    "identity": {
      "tenantId": "01234567-89AB-CDEF-0123-456789ABCDEF",
      "type": "userAssigned",
      "userAssignedIdentities": {
        "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/myidentity/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami": {
          "clientId": "01234567-89AB-CDEF-0123-456789ABCDEF",
          "principalId": "01234567-89AB-CDEF-0123-456789ABCDEF"
        }
      }
    },
    "kind": "AzureCLI",
    "location": "centralus",
    "name": "runBashWithOutputs",
    "outputs": {
      "Result": [
        {
          "id": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/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/01234567-89AB-CDEF-0123-456789ABCDEF/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/01234567-89AB-CDEF-0123-456789ABCDEF/resourcegroups/myrg/providers/microsoft.resources/deploymentScripts/myDeployementScript?api-version=2020-10-01

Výstup je podobný tomuto:

{
  "kind": "AzurePowerShell",
  "identity": {
    "type": "userAssigned",
    "tenantId": "01234567-89AB-CDEF-0123-456789ABCDEF",
    "userAssignedIdentities": {
      "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myidentity1008rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myuami": {
        "principalId": "01234567-89AB-CDEF-0123-456789ABCDEF",
        "clientId": "01234567-89AB-CDEF-0123-456789ABCDEF"
      }
    }
  },
  "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/01234567-89AB-CDEF-0123-456789ABCDEF/resourceGroups/myds0624rg/providers/Microsoft.ContainerInstance/containerGroups/64lxews2qfa5uazscripts",
      "storageAccountId": "/subscriptions/01234567-89AB-CDEF-0123-456789ABCDEF/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/01234567-89AB-CDEF-0123-456789ABCDEF/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:

Snímek obrazovky skriptu nasazení šablony Resource Manageru s možností zobrazit skryté typy na portálu

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 a cleanupPreference 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žijte utcNow 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ím true 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.

    1. Otevřete účet úložiště na webu Azure Portal.

    2. V nabídce vlevo vyberte Řízení přístupu (IAM) a pak vyberte kartu Přiřazení rolí.

    3. Storage File Data Privileged Contributor Přidejte roli do spravované identity přiřazení uživatele.

    4. 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ě.

    5. Vyberte Povoleno z vybraných virtuálních sítí a IP adres.

      Snímek obrazovky konfigurace účtu úložiště pro přístup k privátní síti

    6. V části Virtuální sítě přidejte podsíť. Na snímku obrazovky se podsíť nazývá dspvnVnet.

    7. 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í: