Resources implementeren met ARM-sjablonen en Azure PowerShell
In dit artikel wordt uitgelegd hoe u Azure PowerShell gebruikt met Azure Resource Manager-sjablonen (ARM-sjablonen) om uw resources te implementeren in Azure. Als u niet bekend bent met de concepten van het implementeren en beheren van uw Azure-oplossingen, raadpleegt u het overzicht van de sjabloonimplementatie.
Tip
We raden Bicep aan omdat het dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie Resources implementeren met Bicep en Azure PowerShell voor meer informatie.
Vereisten
U hebt een sjabloon nodig om te implementeren. Als u er nog geen hebt, kunt u een voorbeeldsjabloon downloaden en opslaan vanuit de opslagplaats voor Azure-quickstartsjablonen. De lokale bestandsnaam die in dit artikel wordt gebruikt, is C:\MyTemplates\azuredeploy.json.
U moet Azure PowerShell installeren en verbinding maken met Azure:
- Installeer Azure PowerShell-cmdlets op uw lokale computer. Zie Aan de slag met Azure PowerShell voor meer informatie.
- Maak verbinding met Azure met behulp van Connect-AZAccount. Als u meerdere Azure-abonnementen hebt, moet u Mogelijk ook Set-AzContext uitvoeren. Zie Meerdere Azure-abonnementen gebruiken voor meer informatie.
Als u PowerShell niet hebt geïnstalleerd, kunt u Azure Cloud Shell gebruiken. Zie ARM-sjablonen implementeren vanuit Azure Cloud Shell voor meer informatie.
Vereiste machtigingen
Als u een Bicep-bestand of ARM-sjabloon wilt implementeren, hebt u schrijftoegang nodig voor de resources die u implementeert en moet u zijn gemachtigd om alle bewerkingen op het resourcetype Microsoft.Resources/deployments te kunnen uitvoeren. Als u bijvoorbeeld een virtuele machine wilt implementeren, hebt u de benodigde machtigingen en Microsoft.Resources/deployments/*
machtigingen nodigMicrosoft.Compute/virtualMachines/write
. De wat-als-bewerking heeft dezelfde machtigingsvereisten.
Zie Ingebouwde Azure-rollen voor een lijst met rollen en machtigingen.
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 een abonnement wilt implementeren, 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 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 het niveau van de beheergroep voor meer informatie over implementaties op beheergroepniveau.
Als u een tenant wilt implementeren, 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, over de vereiste machtigingen beschikken 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 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.
$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix
U kunt ook een datumwaarde toevoegen.
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"
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 storage1
implementeert en tegelijkertijd een andere implementatie newStorage
uitvoert die een opslagaccount met de naam storage2
implementeert, 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 storage1
implementeert en onmiddellijk nadat u een andere implementatie hebt uitgevoerd met de naam newStorage
die een opslagaccount met de naam storage2
implementeert, hebt u twee opslagaccounts. De ene heet storage1
en 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 storage1
implementeert en tegelijkertijd een andere implementatie uitvoert die newStorage2
een opslagaccount met de naam storage2
implementeert, 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.
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, afbreekstreepjes en haakjes bevatten. Het mag maximaal 90 tekens zijn. De naam kan niet eindigen in een punt.
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
Als u een lokale sjabloon wilt implementeren, gebruikt u de -TemplateFile
parameter in de implementatieopdracht. In het volgende voorbeeld ziet u ook hoe u een parameterwaarde instelt 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 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 de sjablonen ook opslaan in een Azure-opslagaccount voor gedeelde toegang in uw organisatie.
Notitie
Als u een sjabloon wilt implementeren of wilt verwijzen naar een gekoppelde sjabloon die is opgeslagen in een privé-GitHub-opslagplaats, raadpleegt u een aangepaste oplossing die wordt beschreven in het maken van een aangepaste en beveiligde Azure-portal-aanbieding. U kunt een Azure-functie maken waarmee het GitHub-token uit Azure Key Vault wordt opgehaald.
Als u implementeert in een resourcegroep die niet bestaat, maakt u de resourcegroep. 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.
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, 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 externe gekoppelde sjablonen wilt implementeren met een relatief pad dat is opgeslagen in een opslagaccount, gebruikt QueryString
u 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. Hiermee 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.
In de volgende voorbeelden ziet u 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 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 van Azure Resource Manager voor meer informatie.
Voorbeeld van wijzigingen weergeven
Voordat u uw 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. Wat-als valideert ook de sjabloon op fouten.
Parameterwaarden doorgeven
Als u parameterwaarden wilt doorgeven, kunt u inlineparameters of een parameterbestand gebruiken. Het parameterbestand kan een Bicep-parametersbestand of een JSON-parameterbestand zijn.
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 de TemplateParameterObject
parameter gebruiken om een hashtabel door te geven die de parameters voor de sjabloon bevat.
$params = @{
exampleString = "inline string"
exampleArray = "value1", "value2"
}
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-TemplateParameterObject $params
U kunt ook de inhoud van het bestand ophalen 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 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.
Als u een matrix met objecten wilt doorgeven, maakt u hash-tabellen in PowerShell en voegt u deze toe aan een matrix. Geef die matrix door als 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
JSON-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
Zie Resource Manager-parametersbestand maken voor meer informatie over het parameterbestand.
Bicep-parameterbestanden
Met Azure PowerShell versie 10.4.0 of hoger en Bicep CLI versie 0.22.6 of hoger kunt u een ARM-sjabloonbestand implementeren met behulp van een Bicep-parameterbestand. Met de using
instructie in het Bicep-parametersbestand hoeft u de -TemplateFile
schakeloptie niet op te geven bij het opgeven van een Bicep-parameterbestand voor de -TemplateParameterFile
switch.
In het volgende voorbeeld ziet u een parameterbestand met de naam storage.bicepparam. Het bestand bevindt zich in dezelfde map waarin de opdracht wordt uitgevoerd.
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateParameterFile storage.bicepparam
Zie het bicep-parametersbestand voor meer informatie over het bicep-parametersbestand.
Volgende stappen
- Als u wilt terugkeren naar een geslaagde implementatie wanneer u een fout krijgt, raadpleegt u Terugdraaien op een fout bij een geslaagde implementatie.
- Als u wilt opgeven hoe u resources verwerkt die aanwezig zijn in de resourcegroep, maar die niet zijn gedefinieerd in de sjabloon, raadpleegt u de implementatiemodi van Azure Resource Manager.
- Zie Inzicht in de structuur en syntaxis van ARM-sjablonen voor meer informatie over het definiëren van parameters in uw sjabloon.
- Zie Privé-ARM-sjabloon implementeren met EEN SAS-token voor meer informatie over het implementeren van een sjabloon waarvoor een SAS-token is vereist.