Distribuera resurser med ARM-mallar och Azure PowerShell
Den här artikeln förklarar hur du använder Azure PowerShell med Azure Resource Manager -mallar (ARM-mallar) för att distribuera dina resurser till Azure. Om du inte är bekant med begreppen för att distribuera och hantera azure-lösningar kan du gå till malldistributionsöversikten.
Förutsättningar
Du behöver en mall för att distribuera. Om du inte redan har en kan du ladda ned och spara en exempelmall från lagringsplatsen för Azure-snabbstartsmallar. Det lokala filnamnet som används i den här artikeln är C:\MyTemplates\azuredeploy.json.
Du måste installera Azure PowerShell ansluta till Azure:
- Installera Azure PowerShell-cmdlets på den lokala datorn. Mer information finns i Kom igång med Azure PowerShell.
- Anslut till Azure med hjälp Anslut-AZAccount. Om du har flera Azure-prenumerationer kan du också behöva köra Set-AzContext. Mer information finns i Använda flera Azure-prenumerationer.
Om du inte har Installerat PowerShell kan du använda Azure Cloud Shell. Mer information finns i Distribuera ARM-mallar från Azure Cloud Shell.
Distributionsomfång
Du kan rikta distributionen till en resursgrupp, prenumeration, hanteringsgrupp eller klientorganisation. Beroende på distributionens omfattning använder du olika kommandon.
Om du vill distribuera till en resursgrupp använder du New-AzResourceGroupDeployment:
New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-template>Om du vill distribuera till en prenumeration använder du New-AzSubscriptionDeployment som är ett alias för
New-AzDeploymentcmdleten:New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-template>Mer information om distributioner på prenumerationsnivå finns i Skapa resursgrupper och resurser på prenumerationsnivå.
Om du vill distribuera till en hanteringsgrupp använder du New-AzManagementGroupDeployment.
New-AzManagementGroupDeployment -Location <location> -TemplateFile <path-to-template>Mer information om distributioner på hanteringsgruppsnivå finns i Skapa resurser på hanteringsgruppsnivå.
Om du vill distribuera till en klient använder du New-AzTenantDeployment.
New-AzTenantDeployment -Location <location> -TemplateFile <path-to-template>Mer information om distributioner på klientorganisationsnivå finns i Skapa resurser på klientorganisationsnivå.
För varje omfång måste den användare som distribuerar mallen ha de behörigheter som krävs för att skapa resurser.
Distributionsnamn
När du distribuerar en ARM-mall kan du ge distributionen ett namn. Det här namnet kan hjälpa dig att hämta distributionen från distributionshistoriken. Om du inte anger ett namn för distributionen används namnet på mallfilen. Om du till exempel distribuerar en mall azuredeploy.json med namnet och inte anger ett distributionsnamn får distributionen namnet azuredeploy .
Varje gång du kör en distribution läggs en post till i resursgruppens distributionshistorik med distributionsnamnet. Om du kör en annan distribution och ger den samma namn ersätts den tidigare posten med den aktuella distributionen. Om du vill behålla unika poster i distributionshistoriken ger du varje distribution ett unikt namn.
Om du vill skapa ett unikt namn kan du tilldela ett slumptal.
$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix
Du kan också lägga till ett datumvärde.
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"
Om du kör samtidiga distributioner till samma resursgrupp med samma distributionsnamn slutförs bara den senaste distributionen. Alla distributioner med samma namn som inte har slutförts ersätts av den senaste distributionen. Om du till exempel kör en distribution med namnet som distribuerar ett lagringskonto med namnet och samtidigt kör en annan distribution med namnet som distribuerar ett lagringskonto med namnet , distribuerar du bara ett newStorage storage1 newStorage storage2 lagringskonto. Det resulterande lagringskontot heter storage2 .
Men om du kör en distribution med namnet som distribuerar ett lagringskonto med namnet och omedelbart efter att den är klar kör du en annan distribution med namnet som distribuerar ett lagringskonto med namnet , så har du newStorage storage1 två newStorage storage2 lagringskonton. Den ena storage1 heter och den andra heter storage2 . Men du har bara en post i distributionshistoriken.
När du anger ett unikt namn för varje distribution kan du köra dem samtidigt utan konflikter. Om du kör en distribution med namnet som distribuerar ett lagringskonto med namnet och samtidigt kör en annan distribution med namnet som distribuerar ett lagringskonto med namnet , har du två lagringskonton och två poster i newStorage1 storage1 newStorage2 storage2 distributionshistoriken.
För att undvika konflikter med samtidiga distributioner och för att säkerställa unika poster i distributionshistoriken ger du varje distribution ett unikt namn.
Distribuera en lokal mall
Du kan distribuera en mall från din lokala dator eller en som lagras externt. I det här avsnittet beskrivs hur du distribuerar en lokal mall.
Om du distribuerar till en resursgrupp som inte finns skapar du resursgruppen. Namnet på resursgruppen får bara innehålla alfanumeriska tecken, punkter, understreck, bindestreck och parenteser. Det kan vara upp till 90 tecken. Namnet får inte sluta i en punkt.
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
Om du vill distribuera en lokal mall använder du -TemplateFile parametern i distributionskommandot. I följande exempel visas också hur du anger ett parametervärde som kommer från mallen.
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile <path-to-template>
Distributionen kan ta flera minuter att slutföra.
Distribuera fjärrmall
I stället för att lagra ARM-mallar på den lokala datorn kanske du föredrar att lagra dem på en extern plats. Du kan lagra mallar på en lagringsplats för versionskontroll (till exempel GitHub). Eller så kan du lagra dem i ett Azure Storage-konto för delad åtkomst i din organisation.
Anteckning
Om du vill distribuera en mall eller referera till en länkad mall som är lagrad i en privat GitHub lagrings platsen, se en anpassad lösning som dokumenterats i en MVP-blogg. Du kan konfigurera en Azure-funktion som proxy för att skapa den URL som behövs för att få åtkomst till en mallfil i en privat GitHub-lagrings platsen.
Om du distribuerar till en resursgrupp som inte finns skapar du resursgruppen. Namnet på resursgruppen får bara innehålla alfanumeriska tecken, punkter, understreck, bindestreck och parenteser. Det kan vara upp till 90 tecken. Namnet får inte sluta i en punkt.
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
Om du vill distribuera en extern mall använder du parametern -TemplateUri.
New-AzResourceGroupDeployment `
-Name remoteTemplateDeployment `
-ResourceGroupName ExampleGroup `
-TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
Föregående exempel kräver en offentligt tillgänglig URI för mallen, som fungerar för de flesta scenarier eftersom mallen inte ska innehålla känsliga data. Om du behöver ange känsliga data (till exempel ett administratörslösenord) skickar du det värdet som en säker parameter. Men om du vill hantera åtkomsten till mallen bör du överväga att använda mallspecifikt .
Om du vill distribuera fjärranslutna länkade mallar med relativ sökväg som lagras i ett lagringskonto använder du QueryString för att ange SAS-token:
New-AzResourceGroupDeployment `
-Name linkedTemplateWithRelativePath `
-ResourceGroupName "myResourceGroup" `
-TemplateUri "https://stage20210126.blob.core.windows.net/template-staging/mainTemplate.json" `
-QueryString "$sasToken"
Mer information finns i Använda relativ sökväg för länkade mallar.
Distribuera mallspecifikt
I stället för att distribuera en lokal mall eller en fjärrmall kan du skapa en mallspecifikt. Mallspecifikationen är en resurs i din Azure-prenumeration som innehåller en ARM-mall. Det gör det enkelt att på ett säkert sätt dela mallen med användare i din organisation. Du använder rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att bevilja åtkomst till mallspecifikationen. Den här funktionen är för närvarande i förhandsversion.
I följande exempel visas hur du skapar och distribuerar en mallspecifikt.
Skapa först mallspecifikationen genom att tillhandahålla ARM-mallen.
New-AzTemplateSpec `
-Name storageSpec `
-Version 1.0 `
-ResourceGroupName templateSpecsRg `
-Location westus2 `
-TemplateJsonFile ./mainTemplate.json
Hämta sedan ID:t för mallspecifikationen och distribuera det.
$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0).Versions.Id
New-AzResourceGroupDeployment `
-ResourceGroupName demoRG `
-TemplateSpecId $id
Mer information finns i Azure Resource Manager specifikationerför .
Förhandsgranska ändringar
Innan du distribuerar mallen kan du förhandsgranska de ändringar som mallen kommer att göra i din miljö. Använd vad om-åtgärden för att kontrollera att mallen gör de ändringar som du förväntar dig. What-if validerar även mallen för fel.
Skicka parametervärden
Om du vill skicka parametervärden kan du använda antingen infogade parametrar eller en parameterfil.
Infogade parametrar
Ange namnen på parametern med kommandot för att skicka infogade New-AzResourceGroupDeployment parametrar. Om du till exempel vill skicka en sträng och matris till en mall använder du:
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-template> `
-exampleString "inline string" `
-exampleArray $arrayParam
Du kan också hämta innehållet i filen och ange innehållet som en infogade parameter.
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-template> `
-exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
-exampleArray $arrayParam
Att hämta ett parametervärde från en fil är användbart när du behöver ange konfigurationsvärden. Du kan till exempel ange cloud-init-värden för en virtuell Linux-dator.
Om du behöver skicka en matris med objekt skapar du hash-tabeller i PowerShell och lägger till dem i en matris. Skicka matrisen som en parameter under distributionen.
$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
Parameterfiler
I stället för att skicka parametrar som infogade värden i skriptet, kan det vara lättare att använda en JSON-fil som innehåller parametervärdena. Parameterfilen kan vara en lokal fil eller en extern fil med en tillgänglig URI.
Mer information om parameterfilen finns i Skapa en parameterfil för Resource Manager.
Om du vill skicka en lokal parameterfil använder du TemplateParameterFile parametern :
New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
-TemplateFile <path-to-template> `
-TemplateParameterFile c:\MyTemplates\storage.parameters.json
Om du vill skicka en extern parameterfil använder du TemplateParameterUri parametern :
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
Nästa steg
- Om du vill återställa till en lyckad distribution när du får ett fel kan du se Återställning vid fel till lyckad distribution.
- Information om hur du hanterar resurser som finns i resursgruppen men som inte har definierats i mallen finns i Azure Resource Manager distributionslägen.
- Information om hur du definierar parametrar i mallen finns i Förstå strukturen och syntaxen för ARM-mallar.
- Information om hur du distribuerar en mall som kräver en SAS-token finns i Distribuera privat ARM-mall med SAS-token.