Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come usare Azure PowerShell con modelli arm (Azure Resource Manager) per distribuire le risorse in Azure. Se non si ha familiarità con i concetti relativi alla distribuzione e alla gestione delle soluzioni Azure, vedere panoramica della distribuzione template.
Suggerimento
È consigliabile Bicep perché offre le stesse funzionalità dei modelli arm e la sintassi è più semplice da usare. Per ulteriori informazioni, vedere Distribuire le risorse con Bicep e Azure PowerShell.
Prerequisiti
È necessario un modello da distribuire. Se non è già disponibile, scaricare e salvare un modello example dal repository dei modelli di avvio rapido Azure. Il nome del file locale usato in questo articolo è C:\MyTemplates\azuredeploy.json.
È necessario installare Azure PowerShell e connettersi a Azure:
- Installare Azure PowerShell cmdlet nel computer locale. Per altre informazioni, vedere Introduzione a Azure PowerShell.
- Collegati ad Azure utilizzando Connect-AZAccount. Se sono presenti più sottoscrizioni Azure, potrebbe essere necessario eseguire anche Set-AzContext. Per altre informazioni, vedere Usare più sottoscrizioni Azure.
Se PowerShell non è installato, è possibile usare Azure Cloud Shell. Per ulteriori informazioni, vedere Distribuire i modelli ARM da Azure Cloud Shell.
Autorizzazioni necessarie
Per distribuire un file Bicep o un modello di Azure Resource Manager (ARM), è necessario l'accesso in scrittura alle risorse distribuite e l'accesso a tutte le operazioni nel tipo di risorsa Microsoft.Resources/deployments. Ad esempio, per distribuire una macchina virtuale, sono necessarie autorizzazioni /Microsoft.Compute/virtualMachines/write e Microsoft.Resources/deployments/*. L'operazione di simulazione ha gli stessi requisiti di autorizzazione.
interfaccia della riga di comando di Azure versione 2.76.0 o successiva e Azure PowerShell versione 13.4.0 o successiva introducono il parametro ValidationLevel per determinare quanto accuratamente ARM convalida il modello di Bicep durante questo processo. Per altre informazioni, vedere Comandi di simulazione
Per un elenco di ruoli e autorizzazioni, vedere Azure ruoli predefiniti.
Ambito di distribuzione
È possibile impostare come destinazione la distribuzione a un gruppo di risorse, a una sottoscrizione, a un gruppo di gestione o a un tenant. A seconda dell'ambito della distribuzione, vengono usati comandi diversi.
Per eseguire la distribuzione in un gruppo di risorse, usare New-AzResourceGroupDeployment:
New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-template>Per eseguire la distribuzione in una sottoscrizione, usare New-AzSubscriptionDeployment, ovvero un alias del cmdlet:
New-AzDeploymentNew-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-template>Per altre informazioni sulle distribuzioni a livello di sottoscrizione, vedere Creare gruppi di risorse e risorse a livello di sottoscrizione.
Per eseguire la distribuzione in un gruppo di gestione, usare New-AzManagementGroupDeployment.
New-AzManagementGroupDeployment -Location <location> -TemplateFile <path-to-template>Per altre informazioni sulle distribuzioni a livello di gruppo di gestione, vedere Creare risorse a livello di gruppo di gestione.
Per eseguire la distribuzione in un tenant, usareNew-AzTenantDeployment .
New-AzTenantDeployment -Location <location> -TemplateFile <path-to-template>Per altre informazioni sulle distribuzioni a livello di tenant, vedere Creare risorse a livello di tenant.
Per ogni ambito, l'utente che distribuisce il modello deve disporre delle autorizzazioni necessarie per creare risorse.
Nome distribuzione
Quando si distribuisce un modello ARM, è possibile assegnare un nome alla distribuzione. Questo nome consente di recuperare informazioni sulla distribuzione dalla cronologia di distribuzione. Se non si specifica un nome per la distribuzione, viene usato il nome del file modello. Ad esempio, se si distribuisce un modello denominato azuredeploy.json e non si specifica un nome di distribuzione, la distribuzione è denominata azuredeploy.
Ogni volta che si esegue una distribuzione, viene aggiunta una voce alla cronologia di distribuzione del gruppo di risorse con il nome della distribuzione. Se si esegue un'altra distribuzione e si assegna lo stesso nome, la registrazione precedente viene sostituita dalla distribuzione corrente. Se si desidera mantenere voci univoche nella cronologia di distribuzione, assegnare a ogni distribuzione un nome univoco.
Per creare un nome univoco, è possibile assegnare un numero casuale.
$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix
In alternativa, aggiungere un valore di data.
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"
Se si eseguono distribuzioni simultanee nello stesso gruppo di risorse con lo stesso nome di distribuzione, viene completata solo l'ultima distribuzione. Tutte le distribuzioni con lo stesso nome che non sono state completate vengono sostituite dall'ultima distribuzione. Ad esempio, se si esegue una distribuzione denominata newStorage che distribuisce un account di archiviazione denominato storage1 e allo stesso tempo si esegue un'altra distribuzione denominata newStorage che distribuisce un account di archiviazione denominato storage2, si distribuisce un solo account di archiviazione. L'account di archiviazione risultante è denominato storage2.
Tuttavia, se si esegue una distribuzione denominata newStorage che distribuisce un account di archiviazione denominato storage1 e subito dopo aver completato l'esecuzione di un'altra distribuzione denominata newStorage che distribuisce un account di archiviazione denominato storage2, si dispone di due account di archiviazione. Uno è denominato storage1 e l'altro è denominato storage2. Tuttavia, nella cronologia della distribuzione è presente una sola voce.
Quando si specifica un nome univoco per ogni distribuzione, è possibile eseguirli simultaneamente senza conflitti. Se si esegue una distribuzione denominata newStorage1 che distribuisce un account di archiviazione denominato storage1 e allo stesso tempo si esegue un'altra distribuzione denominata newStorage2 che distribuisce un account di archiviazione denominato storage2, sono presenti due account di archiviazione e due voci nella cronologia di distribuzione.
Per evitare conflitti con distribuzioni simultanee e per garantire voci univoche nella cronologia di distribuzione, assegnare a ogni distribuzione un nome univoco.
Distribuire un modello locale
È possibile distribuire un modello dal computer locale o da uno archiviato esternamente. Questa sezione descrive la distribuzione di un modello locale.
Se distribuisci in un gruppo di risorse che non esiste, crea il gruppo di risorse. Il nome del gruppo di risorse può contenere solo caratteri alfanumerici, punti, caratteri di sottolineatura, trattini e parentesi. Può contenere fino a 90 caratteri. Il nome non può terminare con un punto.
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
Per distribuire un modello locale, usare il -TemplateFile parametro nel comando di distribuzione. Nell'esempio seguente viene illustrato anche come impostare un valore di parametro proveniente dal modello.
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile <path-to-template>
Il completamento della distribuzione può richiedere alcuni minuti.
Distribuire un modello remoto
Invece di archiviare i modelli arm nel computer locale, è consigliabile archiviarli in una posizione esterna. È possibile archiviare i modelli in un repository di controllo del codice sorgente, ad esempio GitHub. In alternativa, è possibile archiviarli in un account di archiviazione Azure per l'accesso condiviso nell'organizzazione.
Nota
Per distribuire un modello o fare riferimento a un modello collegato archiviato in un repository privato GitHub, vedere una soluzione personalizzata documentata in Creating a Custom and Secure portale di Azure Offering. È possibile creare una funzione Azure che estrae il token di GitHub dalla Azure Key Vault.
Se stai distribuendo in un gruppo di risorse che non esiste, crea il gruppo di risorse. Il nome del gruppo di risorse può contenere solo caratteri alfanumerici, punti, caratteri di sottolineatura, trattini e parentesi. Può contenere fino a 90 caratteri. Il nome non può terminare con un punto.
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
Per distribuire un modello esterno, usare il parametro -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
L'esempio precedente richiede l'utilizzo di un URI accessibile pubblicamente per il modello, che funziona per la maggior parte degli scenari. Il proprio modello non deve infatti includere dati sensibili. Se è necessario specificare dati riservati, ad esempio una password di amministratore, passare il valore come parametro protetto. Tuttavia, se si vuole gestire l'accesso al modello, è consigliabile usare le specifiche del modello.
Per distribuire modelli collegati remoti con percorso relativo archiviato in un account di archiviazione, usare QueryString per specificare il token di firma di accesso condiviso:
New-AzResourceGroupDeployment `
-Name linkedTemplateWithRelativePath `
-ResourceGroupName "myResourceGroup" `
-TemplateUri "https://stage20210126.blob.core.windows.net/template-staging/mainTemplate.json" `
-QueryString "$sasToken"
Per altre informazioni, vedere Usare il percorso relativo per i modelli collegati.
Distribuire la specifica di modello
Anziché distribuire un modello locale o remoto, è possibile creare una specifica template. La specifica di modello è una risorsa nella sottoscrizione Azure che contiene un modello di Resource Manager. Semplifica la condivisione sicura del modello con gli utenti dell'organizzazione. Usi il controllo degli accessi in base al ruolo di Azure (Azure RBAC) per concedere l'accesso alla specifica del modello. Questa funzionalità è attualmente in versione di anteprima.
Negli esempi seguenti viene illustrato come creare e distribuire una specifica di modello.
Per prima cosa, crea la specifica del modello fornendo il template ARM.
New-AzTemplateSpec `
-Name storageSpec `
-Version 1.0 `
-ResourceGroupName templateSpecsRg `
-Location westus2 `
-TemplateJsonFile ./mainTemplate.json
Quindi, ottieni l'ID per la specifica del modello e distribuiscilo.
$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0).Versions.Id
New-AzResourceGroupDeployment `
-ResourceGroupName demoRG `
-TemplateSpecId $id
Per altre informazioni, vedere specifiche del modello di Azure Resource Manager.
Anteprima modifiche
Prima di distribuire il modello, puoi visualizzare in anteprima le modifiche che il modello apporterà al tuo ambiente. Usa l'operazione di simulazione per verificare che il modello apporti le modifiche previste. L'analisi what-if convalida anche il modello per eventuali errori.
Passare i valori dei parametri
Per passare i valori dei parametri, è possibile usare i parametri inline o un file di parametri. Il file dei parametri può essere un file di parametri Bicep o un file di parametri JSON.
Parametri in linea
Per passare i parametri inline, specificare i nomi del parametro con il comando New-AzResourceGroupDeployment. Ad esempio, per passare una stringa e una matrice a un modello, usare:
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-template> `
-exampleString "inline string" `
-exampleArray $arrayParam
È possibile usare il TemplateParameterObject parametro per passare attraverso una tabella hash contenente i parametri per il modello.
$params = @{
exampleString = "inline string"
exampleArray = "value1", "value2"
}
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-TemplateParameterObject $params
È anche possibile ottenere i contenuti del file e fornire il contenuto come un parametro inline.
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-template> `
-exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
-exampleArray $arrayParam
Ottenere un valore di parametro da un file è utile quando è necessario fornire i valori di configurazione. Ad esempio, è possibile fornire i valori cloud-init per una macchina virtuale Linux.
Se è necessario passare una matrice di oggetti, creare tabelle hash in PowerShell e aggiungerle a una matrice. Passa tale array come parametro durante la distribuzione.
$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
File di parametri JSON
Invece di passare i parametri come valori inline nello script, può risultare più facile usare un file JSON che contenga i valori dei parametri. Il file dei parametri può essere un file locale o un file esterno con un URI accessibile.
Per altre informazioni sul file di parametri, vedere Creare Resource Manager file di parametri.
Per passare un file di parametri locale, usare il TemplateParameterFile parametro :
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile <path-to-template> `
-TemplateParameterFile c:\MyTemplates\storage.parameters.json
Per passare un file di parametri esterno, usare il TemplateParameterUri parametro :
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
Per altre informazioni sul file di parametri, vedere Creare Resource Manager file di parametri.
Bicep file di parametri
Con Azure PowerShell versione 10.4.0 o successiva e la versione 0.22.6 o successiva dell'interfaccia della riga di comando Bicep, è possibile distribuire un file di modello ARM usando un file di parametri Bicep. Con l'istruzione using all'interno del file dei parametri di Bicep, non è necessario fornire l'opzione -TemplateFile quando si specifica un file di parametri Bicep per l'opzione -TemplateParameterFile.
L'esempio seguente mostra un file di parametri denominato storage.bicepparam. Il file si trova nella stessa directory in cui viene eseguito il comando.
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateParameterFile storage.bicepparam
Per ulteriori informazioni sul file di parametri di Bicep, vedere file di parametri di Bicep.
Passaggi successivi
- Per eseguire il rollback a una distribuzione riuscita in caso di errore, vedere Rollback a una distribuzione riuscita in caso di errore.
- Per specificare come gestire le risorse esistenti nel gruppo di risorse ma non sono definite nel modello, vedere Azure Resource Manager modalità di distribuzione.
- Per informazioni su come definire i parametri nel tuo modello, vedi Comprendere la struttura e la sintassi dei modelli di ARM.
- Per informazioni sulla distribuzione di un modello che richiede un token di firma di accesso condiviso, vedi Distribuire un modello di ARM privato con un token di firma di accesso condiviso.