Resources implementeren met ARM-sjablonen en Azure PowerShell

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

Vereisten

U hebt een sjabloon nodig om te implementeren. Als u er nog geen hebt, downloadt u een voorbeeldsjabloon en sla u deze op in de azure-quickstart-repo voor sjablonen. De lokale bestandsnaam die in dit artikel wordt gebruikt, is C:\MyTemplates\azuredeploy.json.

U moet de Azure PowerShell en verbinding maken met Azure:

Als u PowerShell niet hebt geïnstalleerd, kunt u de Azure Cloud Shell. Zie ARM-sjablonen implementeren vanuit Azure Cloud Shell voor meer Azure Cloud Shell.

Implementatiebereik

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

  • Als u wilt implementeren in een resourcegroep, gebruikt u New-AzResourceGroupDeployment:

    New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-template>
    
  • Als u wilt implementeren in een abonnement, gebruikt u New-AzSubscriptionDeployment. Dit is een alias van de New-AzDeployment cmdlet :

    New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-template>
    

    Zie Resourcegroepen en resources maken op abonnementsniveau voor meer informatie over implementaties op abonnementsniveau.

  • Als u wilt implementeren in een beheergroep, gebruikt u New-AzManagementGroupDeployment.

    New-AzManagementGroupDeployment -Location <location> -TemplateFile <path-to-template>
    

    Zie Resources maken op beheergroepsniveau voor meer informatie over implementaties op beheergroepniveau.

  • Als u wilt implementeren in een tenant, gebruikt u New-AzTenantDeployment.

    New-AzTenantDeployment -Location <location> -TemplateFile <path-to-template>
    

    Zie Resources maken op tenantniveau voor meer informatie over implementaties op tenantniveau.

Voor elk bereik moet de gebruiker die de sjabloon implementeert de vereiste machtigingen hebben om resources te maken.

Naam van implementatie

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

Telkens wanneer u een implementatie hebt uitgevoerd, wordt er een vermelding toegevoegd aan de implementatiegeschiedenis van de resourcegroep met de naam van de implementatie. Als u een andere implementatie hebt uitgevoerd 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.

$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix

Of voeg een datumwaarde toe.

$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"

Als u gelijktijdige implementaties naar dezelfde resourcegroep met dezelfde implementatienaam hebt uitgevoerd, 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 met de naam hebt uitgevoerd die een opslagaccount met de naam implementeert en tegelijkertijd een andere implementatie met de naam die een opslagaccount met de naam implementeert, implementeert u slechts één newStorage storage1 newStorage storage2 opslagaccount. Het resulterende opslagaccount heet storage2 .

Als u echter een implementatie met de naam hebt uitgevoerd die een opslagaccount met de naam implementeert en onmiddellijk nadat dit is voltooid, een andere implementatie met de naam die een opslagaccount met de naam implementeert, hebt u twee newStorage storage1 newStorage storage2 opslagaccounts. De ene heeft storage1 de naam en de andere heeft de naam storage2 . Maar u hebt slechts één vermelding in de implementatiegeschiedenis.

Wanneer u voor elke implementatie een unieke naam opgeeft, kunt u deze gelijktijdig zonder conflicten uitvoeren. Als u een implementatie met de naam hebt uitgevoerd die een opslagaccount met de naam implementeert en tegelijkertijd een andere implementatie met de naam die een opslagaccount met de naam implementeert, hebt u twee opslagaccounts en twee vermeldingen in de newStorage1 storage1 newStorage2 storage2 implementatiegeschiedenis.

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

Een lokale sjabloon implementeren

U kunt een 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 implementeert in een resourcegroep die niet bestaat, maakt u de resourcegroep. De naam van de resourcegroep kan alleen alfanumerieke tekens, punten, onderstrepingstekens, afbreekstreepingstekens en haakjes bevatten. Deze mag maximaal 90 tekens lang zijn. De naam mag niet eindigen op een punt.

New-AzResourceGroup -Name ExampleGroup -Location "Central US"

Als u een lokale sjabloon wilt implementeren, gebruikt u -TemplateFile de parameter in de implementatieopdracht. In het volgende voorbeeld ziet u ook hoe u een parameterwaarde in kunt stellen die afkomstig is van de sjabloon.

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateFile <path-to-template>

Het kan enkele minuten duren voordat de implementatie is voltooid.

Externe sjabloon implementeren

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

Notitie

Voor het implementeren van een sjabloon of een verwijzing naar een gekoppelde sjabloon die is opgeslagen in een persoonlijke GitHub-opslag plaats, raadpleegt u een aangepaste oplossing die wordt beschreven in een MVP-blog. U kunt een Azure- functie instellen als een proxy om de URL te maken die nodig is voor toegang tot een sjabloon bestand in een persoonlijke github-opslag plaats.

Als u implementeert in een resourcegroep die niet bestaat, maakt u de resourcegroep. De naam van de resourcegroep kan alleen alfanumerieke tekens, punten, onderstrepingstekens, afbreekstreepingstekens en haakjes bevatten. Deze mag maximaal 90 tekens lang zijn. De naam mag niet eindigen op een punt.

New-AzResourceGroup -Name ExampleGroup -Location "Central US"

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

New-AzResourceGroupDeployment `
  -Name remoteTemplateDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json

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

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

New-AzResourceGroupDeployment `
  -Name linkedTemplateWithRelativePath `
  -ResourceGroupName "myResourceGroup" `
  -TemplateUri "https://stage20210126.blob.core.windows.net/template-staging/mainTemplate.json" `
  -QueryString "$sasToken"

Zie Relatief pad gebruiken voor gekoppelde sjablonen voor meer informatie.

Sjabloonspecificatie implementeren

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

De volgende voorbeelden laten zien hoe u een sjabloonspecificatie maakt en implementeert.

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

New-AzTemplateSpec `
  -Name storageSpec `
  -Version 1.0 `
  -ResourceGroupName templateSpecsRg `
  -Location westus2 `
  -TemplateJsonFile ./mainTemplate.json

Haal vervolgens de id voor de sjabloonspecificatie op en implementeer deze.

$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0).Versions.Id

New-AzResourceGroupDeployment `
  -ResourceGroupName demoRG `
  -TemplateSpecId $id

Zie de sjabloonspecificaties Azure Resource Manager meer informatie.

Voorbeeld van wijzigingen bekijken

Voordat u de sjabloon implementeert, kunt u een voorbeeld bekijken van de wijzigingen die de sjabloon aan uw omgeving aan zal brengen. Gebruik de what-if-bewerking om te controleren of de sjabloon de wijzigingen aan de hand heeft die u verwacht. Met Wat-als wordt de sjabloon ook gevalideerd op fouten.

Parameterwaarden doorgeven

Als u parameterwaarden wilt doorgeven, kunt u inlineparameters of een parameterbestand gebruiken.

Inlineparameters

Als u inlineparameters wilt doorgeven, geeft u de namen van de parameter op met de New-AzResourceGroupDeployment opdracht . Als u bijvoorbeeld een tekenreeks en matrix wilt doorgeven aan een sjabloon, gebruikt u:

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-template> `
  -exampleString "inline string" `
  -exampleArray $arrayParam

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

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-template> `
  -exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
  -exampleArray $arrayParam

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

Als u een matrix met objecten wilt doorgeven, maakt u hash-tabellen in PowerShell en voegt u deze toe aan een matrix. Geef deze matrix door als een parameter tijdens de implementatie.

$hash1 = @{ Name = "firstSubnet"; AddressPrefix = "10.0.0.0/24"}
$hash2 = @{ Name = "secondSubnet"; AddressPrefix = "10.0.1.0/24"}
$subnetArray = $hash1, $hash2
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-template> `
  -exampleArray $subnetArray

Parameterbestanden

In plaats van parameters als inline waarden door te geven in uw script, is het wellicht eenvoudiger een JSON-bestand te gebruiken dat de parameterwaarden bevat. Het parameterbestand kan een lokaal bestand of een extern bestand met een toegankelijke URI zijn.

Zie Een Resource Manager-parameterbestand maken voor meer informatie over het parameterbestand.

Als u een lokaal parameterbestand wilt doorgeven, gebruikt u de TemplateParameterFile parameter :

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile <path-to-template> `
  -TemplateParameterFile c:\MyTemplates\storage.parameters.json

Als u een extern parameterbestand wilt doorgeven, gebruikt u de TemplateParameterUri parameter :

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json `
  -TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.parameters.json

Volgende stappen

  • Zie Terugdraaien bij fout naar geslaagde implementatie als u wilt terugdraaien naar een geslaagde implementatie wanneer er een fout wordt weergegeven.
  • Zie implementatiemodi voor meer informatie over het verwerken van resources die bestaan in de resourcegroep,maar die niet zijn gedefinieerd in Azure Resource Manager sjabloon.
  • Zie Inzicht in de structuur en syntaxis van ARM-sjablonen voor meer informatie over het definiëren van parameters in uw sjabloon.
  • Zie Persoonlijke ARM-sjabloon implementeren met SAS-token voor meer informatie over het implementeren van een sjabloon die een SAS-token vereist.