Jak používat šablony nasazení Azure Resource Manager (ARM) pomocí Azure CLI

Tento článek vysvětluje, jak pomocí Azure CLI se šablonami Azure Resource Manager (šablony ARM) nasadit prostředky do Azure. Pokud neznáte koncepty nasazení a správy řešení Azure, přečtěte si téma Přehled nasazení šablon.

Příkazy nasazení se změnily v Azure CLI verze 2.2.0. Příklady v tomto článku vyžadují Azure CLI verze 2.20.0 nebo novější.

Pokud chcete spustit tuto ukázku, nainstalujte nejnovější verzi Azure CLI. Spuštěním příkazu az login vytvořte připojení k Azure.

Ukázky pro Azure CLI jsou napsané pro bash prostředí. Pokud chcete tuto ukázku spustit na Windows PowerShell nebo příkazovém řádku, budete možná muset změnit prvky skriptu.

Pokud nemáte nainstalované Rozhraní příkazového řádku Azure, můžete použít Azure Cloud Shell. Další informace najdete v tématu Nasazení šablon ARM z Azure Cloud Shell.

Tip

Doporučujeme Bicep , protože nabízí stejné funkce jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu Nasazení prostředků pomocí Bicepu a Azure CLI.

Požadovaná oprávnění

Pokud chcete nasadit soubor Bicep nebo šablonu ARM, musíte mít přístup k zápisu pro prostředky, které nasazujete, a přístup ke všem operacím s prostředky typu Microsoft.Resources/deployments. Například k nasazení virtuálního počítače potřebujete Microsoft.Compute/virtualMachines/write oprávnění a Microsoft.Resources/deployments/* . Operace citlivostní analýzy má stejné požadavky na oprávnění.

Seznam rolí a oprávnění najdete v tématu Předdefinované role Azure.

Obor nasazení

Šablonu nasazení Azure můžete zacílit na skupinu prostředků, předplatné, skupinu pro správu nebo tenanta. V závislosti na rozsahu nasazení se používají různé příkazy.

Pro každý obor musí mít uživatel nasazující šablonu požadovaná oprávnění k vytváření prostředků.

Nasazení místní šablony

Šablonu ARM můžete nasadit z místního počítače nebo šablonu, která je uložená externě. Tato část popisuje nasazení místní šablony.

Pokud nasazujete do skupiny prostředků, která neexistuje, vytvořte skupinu prostředků. Název skupiny prostředků může obsahovat pouze alfanumerické znaky, tečky, podtržítka, spojovníky a závorky. Může mít maximálně 90 znaků. Název nemůže končit tečkou.

az group create --name ExampleGroup --location "Central US"

Pokud chcete nasadit místní šablonu, použijte --template-file parametr v příkazu nasazení. Následující příklad také ukazuje, jak nastavit hodnotu parametru.

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file <path-to-template> \
  --parameters storageAccountType=Standard_GRS

Hodnota parametru --template-file musí být soubor Bicep nebo .json soubor nebo .jsonc . Přípona .jsonc souboru označuje, že soubor může obsahovat // komentáře stylu. Systém ARM přijímá // komentáře v .json souborech. O příponu souboru se nezajímá. Další podrobnosti o komentářích a metadatech najdete v tématu Vysvětlení struktury a syntaxe šablon ARM.

Dokončení šablony nasazení Azure může trvat několik minut. Po dokončení se zobrazí zpráva, která obsahuje výsledek:

"provisioningState": "Succeeded",

Nasazení vzdálené šablony

Místo ukládání šablon ARM do místního počítače je možná budete chtít uložit do externího umístění. Šablony můžete uložit do úložiště pro správu zdrojového kódu (jako je GitHub). Nebo je můžete uložit do účtu úložiště v Azure, abyste k nim mohli v organizaci sdílet přístup.

Poznámka

Pokud chcete nasadit šablonu nebo odkazovat na propojenou šablonu, která je uložená v privátním úložišti GitHub, projděte si vlastní řešení popsané v tématu Vytvoření vlastní a zabezpečené nabídky webu Azure Portal. Můžete vytvořit funkci Azure, která vytáhne token GitHubu z Azure Key Vault.

Pokud nasazujete do skupiny prostředků, která neexistuje, vytvořte skupinu prostředků. Název skupiny prostředků může obsahovat pouze alfanumerické znaky, tečky, podtržítka, spojovníky a závorky. Může mít maximálně 90 znaků. Název nemůže končit tečkou.

az group create --name ExampleGroup --location "Central US"

K nasazení externí šablony použijte parametr template-uri.

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json" \
  --parameters storageAccountType=Standard_GRS

Předchozí příklad vyžaduje veřejně přístupný identifikátor URI pro šablonu, který funguje ve většině scénářů, protože šablona by neměla obsahovat citlivá data. Pokud potřebujete zadat citlivá data (například heslo správce), předejte tuto hodnotu jako zabezpečený parametr. Pokud ale chcete spravovat přístup k šabloně, zvažte použití specifikací šablony.

Pokud chcete nasadit vzdálené propojené šablony s relativní cestou, které jsou uložené v účtu úložiště, použijte query-string k zadání tokenu SAS:

az deployment group create \
  --name linkedTemplateWithRelativePath \
  --resource-group myResourceGroup \
  --template-uri "https://stage20210126.blob.core.windows.net/template-staging/mainTemplate.json" \
  --query-string $sasToken

Další informace najdete v tématu Použití relativní cesty pro propojené šablony.

Název šablony nasazení Azure

Při nasazování šablony ARM můžete šablonu nasazení Azure pojmenovat. Tento název vám může pomoct načíst nasazení z historie nasazení. Pokud nezadáte název nasazení, použije se název souboru šablony. Pokud například nasadíte šablonu s názvem azuredeploy.json a nezadáte název nasazení, nasazení má název azuredeploy.

Při každém spuštění nasazení se do historie nasazení skupiny prostředků přidá položka s názvem nasazení. Pokud spustíte jiné nasazení a pojmenujete ho stejným názvem, nahradí se předchozí položka aktuálním nasazením. Pokud chcete zachovat jedinečné položky v historii nasazení, dejte každému nasazení jedinečný název.

Pokud chcete vytvořit jedinečný název, můžete přiřadit náhodné číslo.

deploymentName='ExampleDeployment'$RANDOM

Nebo přidejte hodnotu data.

deploymentName='ExampleDeployment'$(date +"%d-%b-%Y")

Pokud spustíte souběžná nasazení do stejné skupiny prostředků se stejným názvem nasazení, dokončí se pouze poslední nasazení. Všechna nasazení se stejným názvem, která se nedokončila, se nahradí posledním nasazením. Pokud například spustíte nasazení s názvem newStorage , které nasadí účet úložiště s názvem storage1a současně spustíte další nasazení s názvem newStorage , které nasadí účet úložiště s názvem storage2, nasadíte pouze jeden účet úložiště. Výsledný účet úložiště má název storage2.

Pokud ale spustíte nasazení s názvem newStorage , které nasadí účet úložiště s názvem storage1a hned po jeho dokončení spustíte další nasazení s názvem newStorage , které nasadí účet úložiště s názvem storage2, máte dva účty úložiště. Jeden má název storage1a druhý má název storage2. V historii nasazení ale máte jenom jednu položku.

Když pro každé nasazení zadáte jedinečný název, můžete je spustit souběžně bez konfliktů. Pokud spustíte nasazení s názvem newStorage1 , které nasadí účet úložiště s názvem storage1a současně spustíte další nasazení s názvem newStorage2 , které nasadí účet úložiště s názvem storage2, budete mít v historii nasazení dva účty úložiště a dvě položky.

Abyste se vyhnuli konfliktům se souběžnými nasazeními a zajistili jedinečné položky v historii nasazení, dejte každému nasazení jedinečný název.

Nasazení specifikace šablony

Místo nasazení místní nebo vzdálené šablony můžete vytvořit specifikaci šablony. Specifikace šablony je prostředek ve vašem předplatném Azure, který obsahuje šablonu ARM. Usnadňuje bezpečné sdílení šablony s uživateli ve vaší organizaci. K udělení přístupu ke specifikaci šablony použijete řízení přístupu na základě role v Azure (Azure RBAC). Tato funkce je aktuálně ve verzi Preview.

Následující příklady ukazují, jak vytvořit a nasadit specifikaci šablony.

Nejprve vytvořte specifikaci šablony zadáním šablony ARM.

az ts create \
  --name storageSpec \
  --version "1.0" \
  --resource-group templateSpecRG \
  --location "westus2" \
  --template-file "./mainTemplate.json"

Pak získejte ID specifikace šablony a nasaďte ho.

id = $(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")

az deployment group create \
  --resource-group demoRG \
  --template-spec $id

Další informace najdete v tématu Specifikace šablon Azure Resource Manager.

Náhled změn

Před nasazením šablony ARM si můžete zobrazit náhled změn, které šablona provede ve vašem prostředí. Pomocí operace citlivostní analýzy ověřte, že šablona provádí očekávané změny. Funkce What-if také ověřuje chyby v šabloně.

Parametry

K předání hodnot parametrů můžete použít buď vložené parametry, nebo soubor parametrů.

Vložené parametry

Pokud chcete předat vložené parametry, zadejte hodnoty v parameterssouboru . Pokud chcete například předat řetězec a pole šabloně v prostředí Bash, použijte:

az deployment group create \
  --resource-group testgroup \
  --template-file <path-to-template> \
  --parameters exampleString='inline string' exampleArray='("value1", "value2")'

Pokud používáte Azure CLI s příkazovým řádkem Windows (CMD) nebo PowerShellem, předejte pole ve formátu : exampleArray="['value1','value2']".

Můžete také získat obsah souboru a zadat ho jako vložený parametr.

az deployment group create \
  --resource-group testgroup \
  --template-file <path-to-template> \
  --parameters exampleString=@stringContent.txt exampleArray=@arrayContent.json

Získání hodnoty parametru ze souboru je užitečné, když potřebujete zadat hodnoty konfigurace. Můžete například zadat hodnoty cloud-init pro virtuální počítač s Linuxem.

Formát arrayContent.json je:

[
    "value1",
    "value2"
]

Pokud chcete předat objekt, například k nastavení značek, použijte JSON. Šablona může například obsahovat parametr podobný tomuto:

    "resourceTags": {
      "type": "object",
      "defaultValue": {
        "Cost Center": "IT Department"
      }
    }

V tomto případě můžete předat řetězec JSON a nastavit parametr, jak je znázorněno v následujícím skriptu Bash:

tags='{"Owner":"Contoso","Cost Center":"2345-324"}'
az deployment group create --name addstorage  --resource-group myResourceGroup \
--template-file $templateFile \
--parameters resourceName=abcdef4556 resourceTags="$tags"

Kolem kódu JSON, který chcete předat do objektu, použijte dvojité uvozovky.

K zahrnutí hodnot parametrů můžete použít proměnnou. V Bash nastavte proměnnou na všechny hodnoty parametrů a přidejte ji do příkazu nasazení.

params="prefix=start suffix=end"

az deployment group create \
  --resource-group testgroup \
  --template-file <path-to-template> \
  --parameters $params

Pokud ale používáte Azure CLI s příkazovým řádkem Windows (CMD) nebo PowerShellem, nastavte proměnnou na řetězec JSON. Uvozovky uvozovky uvozovky: $params = '{ \"prefix\": {\"value\":\"start\"}, \"suffix\": {\"value\":\"end\"} }'.

Soubory parametrů

Místo předávání parametrů v podobě hodnot vložených do skriptu pro vás možná bude jednodušší použít soubor JSON, který obsahuje hodnoty parametrů. Soubor parametru musí být místní soubor. Azure CLI nepodporuje soubory externích parametrů.

Další informace o souboru parametrů najdete v tématu Vytvoření souboru parametrů Resource Manageru.

Pokud chcete předat soubor místního parametru, použijte @ k zadání místního souboru s názvem storage.parameters.json.

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters '@storage.parameters.json'

Komentáře a rozšířený formát JSON

Do souboru parametrů můžete zahrnout // komentáře stylu, ale musíte soubor pojmenovat příponou .jsonc .

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --template-file storage.json \
  --parameters '@storage.parameters.jsonc'

Další podrobnosti o komentářích a metadatech najdete v tématu Vysvětlení struktury a syntaxe šablon ARM.

Pokud používáte Azure CLI s verzí 2.3.0 nebo starší, můžete pomocí přepínače nasadit šablonu s víceřádkovými řetězci nebo komentáři --handle-extended-json-format . Příklad:

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2018-10-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[
    parameters('location')
    ]", //defaults to resource group location
  /*
    storage account and network interface
    must be deployed first
  */
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

Další kroky