Delen via


Arm-implementatiesjablonen (Azure Resource Manager) gebruiken met Azure CLI

In dit artikel wordt uitgelegd hoe u Azure CLI gebruikt met Azure Resource Manager-sjablonen (ARM-sjablonen) om uw resources te implementeren in Azure. Zie template deployment overview als u niet bekend bent met de concepten van het implementeren en beheren van uw Azure-oplossingen.

De implementatieopdrachten zijn gewijzigd in Azure CLI versie 2.2.0. Voor de voorbeelden in dit artikel is Azure CLI versie 2.20.0 of hoger vereist.

Als u dit voorbeeld wilt uitvoeren, installeert u de nieuwste versie van de Azure CLI. Voer az login uit om een verbinding met Azure te maken.

Voorbeelden voor de Azure CLI zijn geschreven voor de bash shell. Als u dit voorbeeld wilt uitvoeren in Windows PowerShell of opdrachtprompt, moet u mogelijk elementen van het script wijzigen.

Als u Azure CLI niet hebt geïnstalleerd, kunt u Azure Cloud Shell gebruiken. Zie Deploy ARM-sjablonen van Azure Cloud Shell voor meer informatie.

Aanbeveling

We raden Bicep aan omdat het dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie Het implementeren van resources met Bicep en Azure CLI voor meer informatie.

Vereiste voorwaarden

Vereiste machtigingen

Als u een Bicep-bestand of Azure Resource Manager -sjabloon (ARM) wilt implementeren, hebt u schrijftoegang nodig voor de resources die u implementeert en toegang tot alle bewerkingen op het resourcetype Microsoft.Resources/deployments. Als u bijvoorbeeld een virtuele machine wilt implementeren, hebt u Microsoft.Compute/virtualMachines/write en Microsoft.Resources/deployments/* machtigingen nodig. De wat-als-bewerking heeft dezelfde machtigingsvereisten.

Azure CLI versie 2.76.0 of hoger en Azure PowerShell versie 13.4.0 of hoger de schakeloptie ValidationLevel introduceren om te bepalen hoe grondig ARM de Bicep-sjabloon tijdens dit proces valideert. Zie Wat-als-opdrachten voor meer informatie.

Zie Azure ingebouwde rollen voor een lijst met rollen en machtigingen.

Implementatiebereik

U kunt uw Azure-implementatiesjabloon richten op een resourcegroep, abonnement, beheergroep of tenant. Afhankelijk van het bereik van de implementatie gebruikt u verschillende opdrachten.

Voor elke scope moet de gebruiker die de sjabloon implementeert beschikken over de vereiste machtigingen om hulpbronnen te creëren.

Een lokale sjabloon implementeren

U kunt een ARM-sjabloon implementeren vanaf uw lokale computer of een sjabloon die extern is opgeslagen. In deze sectie wordt beschreven hoe u een lokale sjabloon implementeert.

Als u naar een resourcegroep implementeert die niet bestaat, maak dan de resourcegroep aan. De naam van de resourcegroep kan alleen alfanumerieke tekens, punten, onderstrepingstekens, afbreekstreepjes en haakjes bevatten. Het mag maximaal 90 tekens zijn. De naam kan niet eindigen in een punt.

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

Als u een lokale sjabloon wilt implementeren, gebruikt u de --template-file parameter in de implementatieopdracht. In het volgende voorbeeld ziet u ook hoe u een parameterwaarde instelt.

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

De waarde van de parameter --template-file moet een Bicep-bestand of een bestand .json of .jsonc zijn. De .jsonc bestandsextensie geeft aan dat het bestand stijlopmerkingen kan bevatten // . Het ARM-systeem accepteert // opmerkingen in .json bestanden. Het geeft niet om de bestandsextensie. Zie Inzicht in de structuur en syntaxis van ARM-sjablonen voor meer informatie over opmerkingen en metagegevens.

Het kan enkele minuten duren voordat de Azure-implementatiesjabloon is voltooid. Wanneer dit is voltooid, ziet u een bericht met het resultaat:

"provisioningState": "Succeeded",

Externe sjabloon implementeren

In plaats van ARM-sjablonen op uw lokale computer op te slaan, kunt u ze misschien liever opslaan op een externe locatie. U kunt sjablonen opslaan in een opslagplaats voor broncodebeheer (zoals GitHub). U kunt ze ook opslaan in een Azure opslagaccount voor gedeelde toegang in uw organisatie.

Notitie

Zie een aangepaste oplossing die wordt beschreven in Een aangepaste Azure Portal-aanbieding maken om een sjabloon te implementeren of te verwijzen naar een gekoppelde sjabloon die is opgeslagen in een privé-GitHub opslagplaats. U kunt een Azure-functie maken waarmee het GitHub token uit Azure Key Vault wordt gehaald.

Als u naar een resourcegroep implementeert die niet bestaat, maak dan de resourcegroep aan. De naam van de resourcegroep kan alleen alfanumerieke tekens, punten, onderstrepingstekens, afbreekstreepjes en haakjes bevatten. Het mag maximaal 90 tekens zijn. De naam kan niet eindigen in een punt.

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

Als u een externe sjabloon wilt implementeren, gebruikt u de template-uri-parameter.

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

In het voorgaande voorbeeld is een openbaar toegankelijke URI vereist voor de sjabloon, die geschikt is voor de meeste scenario's, omdat uw sjabloon geen gevoelige gegevens mag bevatten. Als u gevoelige gegevens (zoals een beheerderswachtwoord) moet opgeven, geeft u die waarde door als een veilige parameter. Als u echter de toegang tot de sjabloon wilt beheren, kunt u overwegen om sjabloonspecificaties te gebruiken.

Als u gekoppelde sjablonen met een relatief pad wilt implementeren die zijn opgeslagen in een opslagaccount, gebruikt u query-string om het SAS-token op te geven.

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

Zie Relatief pad gebruiken voor gekoppelde sjablonen voor meer informatie.

naam van implementatiesjabloon Azure

Wanneer u een ARM-sjabloon implementeert, kunt u de Azure implementatiesjabloon een naam geven. Met deze naam kunt u de implementatie ophalen uit de implementatiegeschiedenis. Als u geen naam opgeeft voor de implementatie, wordt de naam van het sjabloonbestand gebruikt. Als u bijvoorbeeld een sjabloon met de naam azuredeploy.json implementeert en geen implementatienaam opgeeft, krijgt de implementatie de naam azuredeploy.

Telkens wanneer u een implementatie uitvoert, wordt er een vermelding toegevoegd aan de implementatiegeschiedenis van de resourcegroep met de implementatienaam. Als u een andere implementatie uitvoert en deze dezelfde naam geeft, wordt de eerdere vermelding vervangen door de huidige implementatie. Als u unieke vermeldingen in de implementatiegeschiedenis wilt behouden, geeft u elke implementatie een unieke naam.

Als u een unieke naam wilt maken, kunt u een willekeurig getal toewijzen.

deploymentName='ExampleDeployment'$RANDOM

U kunt ook een datumwaarde toevoegen.

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

Als u gelijktijdige implementaties uitvoert naar dezelfde resourcegroep met dezelfde implementatienaam, wordt alleen de laatste implementatie voltooid. Implementaties met dezelfde naam die nog niet zijn voltooid, worden vervangen door de laatste implementatie. Als u bijvoorbeeld een implementatie uitvoert die newStorage een opslagaccount met de naam storage1implementeert en tegelijkertijd een andere implementatie newStorage uitvoert die een opslagaccount met de naam storage2implementeert, implementeert u slechts één opslagaccount. Het resulterende opslagaccount heeft de naam storage2.

Als u echter een implementatie uitvoert die newStorage een opslagaccount met de naam storage1implementeert en onmiddellijk nadat u een andere implementatie hebt uitgevoerd met de naam newStorage die een opslagaccount met de naam storage2implementeert, hebt u twee opslagaccounts. De ene heet storage1en de andere heet storage2. Maar u hebt slechts één vermelding in de implementatiegeschiedenis.

Wanneer u een unieke naam opgeeft voor elke implementatie, kunt u deze gelijktijdig uitvoeren zonder conflict. Als u een implementatie newStorage1 uitvoert die een opslagaccount met de naam storage1implementeert en tegelijkertijd een andere implementatie uitvoert die newStorage2 een opslagaccount met de naam storage2implementeert, hebt u twee opslagaccounts en twee vermeldingen in de implementatiegeschiedenis.

Geef elke implementatie een unieke naam om conflicten met gelijktijdige implementaties te voorkomen en unieke vermeldingen in de implementatiegeschiedenis te garanderen.

Sjabloonspecificatie implementeren

In plaats van een lokale of externe sjabloon te implementeren, kunt u een templatespecificatie maken. De sjabloonspecificatie is een resource in uw Azure-abonnement dat een ARM-sjabloon bevat. Hiermee kunt u de sjabloon eenvoudig veilig delen met gebruikers in uw organisatie. U gebruikt Azure op rollen gebaseerd toegangsbeheer (Azure RBAC) om toegang te verlenen tot de sjabloonspecificatie. Deze functie is momenteel beschikbaar als preview-versie.

In de volgende voorbeelden ziet u hoe u een sjabloonspecificatie maakt en implementeert.

Maak eerst de sjabloonspecificatie door de ARM-sjabloon op te geven.

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

Haal vervolgens de id voor sjabloonspecificatie op en implementeer deze.

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

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

Zie Azure Resource Manager sjabloonspecificaties voor meer informatie.

Voorbeeld van wijzigingen weergeven

Voordat u uw ARM-sjabloon implementeert, kunt u een voorbeeld bekijken van de wijzigingen die de sjabloon in uw omgeving aanbrengt. Gebruik de wat-als-bewerking om te controleren of de sjabloon de verwachte wijzigingen aanbrengt. Ook controleert wat-als de sjabloon op fouten.

Parameterwaarden

Als u parameterwaarden wilt doorgeven, kunt u inlineparameters of een parameterbestand gebruiken. Het parameterbestand kan een Bicep parameterbestand of een JSON-parametersbestand zijn.

Inlineparameters

Als u inlineparameters wilt doorgeven, geeft u de waarden op in parameters. Als u bijvoorbeeld een tekenreeks en matrix wilt doorgeven aan een sjabloon in een Bash-shell, gebruikt u:

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

Als u Azure CLI gebruikt met Windows Command Prompt (CMD) of PowerShell, geeft u de array door in het volgende formaat: exampleArray="['value1','value2']".

U kunt ook de inhoud van het bestand ophalen en die inhoud opgeven als een inlineparameter.

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

Het ophalen van een parameterwaarde uit een bestand is handig wanneer u configuratiewaarden moet opgeven. U kunt bijvoorbeeld cloud-init-waarden opgeven voor een virtuele Linux-machine.

De arrayContent.json-formaat is:

[
  "value1",
  "value2"
]

Als u bijvoorbeeld een object wilt doorgeven om tags in te stellen, gebruikt u JSON. Uw sjabloon kan bijvoorbeeld een parameter bevatten zoals deze:

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

In dit geval kunt u een JSON-tekenreeks doorgeven om de parameter in te stellen, zoals wordt weergegeven in het volgende Bash-script:

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

Gebruik dubbele aanhalingstekens rond de JSON die u wilt doorgeven aan het object.

U kunt een variabele gebruiken om de parameterwaarden te bevatten. Stel in Bash de variabele in op alle parameterwaarden en voeg deze toe aan de implementatieopdracht.

params="prefix=start suffix=end"

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

Als u echter Azure CLI gebruikt met Windows Opdrachtprompt (CMD) of PowerShell, stelt u de variabele in op een JSON-tekenreeks. Escape de aanhalingstekens: $params = '{ \"prefix\": {\"value\":\"start\"}, \"suffix\": {\"value\":\"end\"} }'.

JSON-parameterbestanden

In plaats van parameters door te geven als inlinewaarden in uw script, is het wellicht gemakkelijker om een parameterbestand, een .bicepparam bestand of een JSON-parameterbestand, te gebruiken dat de parameterwaarden bevat. Het parameterbestand moet een lokaal bestand zijn. Externe parameterbestanden worden niet ondersteund met Azure CLI.

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

Zie Maak Resource Manager parameterbestand voor meer informatie over het parameterbestand.

parameterbestanden voor Bicep

Met Azure CLI versie 2.53.0 of hoger en Bicep CLI-versie 0.22.6 of hoger kunt u een Bicep-bestand implementeren met behulp van een Bicep parameterbestand. Met de instructie using in het parameterbestand van de Bicep hoeft u de schakelaar --template-file niet op te geven wanneer u een Bicep parameterbestand specificeert voor de --parameters schakelaar. Het opnemen van de --template-file schakeloptie geeft de foutmelding: 'Alleen een .bicep-bestand is toegestaan met een .bicepparam-bestand.'

az deployment group create \
  --name ExampleDeployment \
  --resource-group ExampleGroup \
  --parameters storage.bicepparam

Het parameterbestand moet een lokaal bestand zijn. Externe parameterbestanden worden niet ondersteund met Azure CLI. Zie Maak Resource Manager parametersbestand voor meer informatie over het parameterbestand.

Opmerkingen en de uitgebreide JSON-indeling

U kunt stijlopmerkingen opnemen // in het parameterbestand, maar u moet het bestand een naam opgeven met een .jsonc extensie.

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

Zie De structuur en syntaxis van ARM-sjablonen voor meer informatie over opmerkingen en metagegevens.

Als u Azure CLI gebruikt met versie 2.3.0 of ouder, kunt u een sjabloon met tekenreeksen of opmerkingen met meerdere regels implementeren met behulp van de schakeloptie --handle-extended-json-format. Voorbeeld:

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2025-04-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'))]"
  ],

Volgende stappen