Come distribuire risorse con Bicep e l'interfaccia della riga di comando di Azure

Questo articolo illustra come usare l'interfaccia della riga di comando di Azure con i file Bicep per distribuire le risorse in Azure. Se non si ha familiarità con i concetti di distribuzione e gestione delle soluzioni di Azure, vedere Panoramica di Bicep.

Per distribuire i file Bicep, è necessaria la versione 2.20.0o successiva dell'interfaccia della riga di comando di Azure.

Per eseguire questo esempio, installare l'ultima versione dell'interfaccia della riga di comando di Azure. Per iniziare, eseguire az login per creare una connessione con Azure.

Gli esempi per l'interfaccia della riga di comando di Azure sono scritti per la shell bash. Per eseguire questo esempio in Windows PowerShell o dal prompt dei comandi, può essere necessario cambiare elementi dello script.

Se l'interfaccia della riga di comando di Azure non è installata, è possibile usare Azure Cloud Shell. Per altre informazioni, vedere Distribuire file Bicep da Azure Cloud Shell.

Ambito della distribuzione

È possibile impostare la distribuzione come destinazione per un gruppo di risorse, una sottoscrizione, un gruppo di gestione o un tenant. A seconda dell'ambito della distribuzione, vengono usati comandi diversi.

Per ogni ambito, l'utente che distribuisce il file Bicep deve avere le autorizzazioni necessarie per creare le risorse.

Distribuire il file Bicep locale

È possibile distribuire un file Bicep dal computer locale o da uno archiviato esternamente. Questa sezione descrive la distribuzione di un file Bicep locale.

Se si esegue la distribuzione in un gruppo di risorse che non esiste, creare 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 in un punto.

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

Per distribuire un file Bicep locale, usare il --template-file parametro nel comando di distribuzione. L'esempio seguente illustra anche come impostare un valore di parametro.

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

Per il completamento della distribuzione sarà necessario attendere alcuni minuti. Al termine, viene visualizzato un messaggio che include il risultato:

"provisioningState": "Succeeded",

Distribuire il file Bicep remoto

Attualmente, l'interfaccia della riga di comando di Azure non supporta la distribuzione di file Bicep remoti. Usare l'interfaccia della riga di comando di Bicep per compilare il file Bicep in un modello JSON e quindi caricare il file JSON nel percorso remoto.

Parametri

Per passare i valori dei parametri, è possibile usare i parametri inline o un file di parametri.

Parametri inline

Per passare i parametri inline, specificare i valori in parameters. Ad esempio, per passare una stringa e una matrice a un file Bicep in una shell Bash, usare:

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

Se si usa l'interfaccia della riga di comando di Azure Windows prompt dei comandi (CMD) o PowerShell, passare la matrice nel formato: exampleArray="['value1','value2']" .

È anche possibile ottenere i contenuti del file e fornire il contenuto come un parametro inline.

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

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.

Il formato arrayContent.json è:

[
    "value1",
    "value2"
]

Per passare un oggetto, ad esempio per impostare i tag, usare JSON. Ad esempio, il file Bicep potrebbe includere un parametro simile al seguente:

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

In questo caso, è possibile passare una stringa JSON per impostare il parametro come illustrato nello script Bash seguente:

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

Usare le virgolette doppie intorno al codice JSON che si vuole passare all'oggetto .

È possibile usare una variabile per contenere i valori dei parametri. In Bash impostare la variabile su tutti i valori dei parametri e aggiungerla al comando di distribuzione.

params="prefix=start suffix=end"

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

Tuttavia, se si usa l'interfaccia della riga di comando di Azure Windows prompt dei comandi (CMD) o PowerShell, impostare la variabile su una stringa JSON. Caratteri di escape tra virgolette: $params = '{ \"prefix\": {\"value\":\"start\"}, \"suffix\": {\"value\":\"end\"} }' .

File dei parametri

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 deve essere un file locale. I file dei parametri esterni non sono supportati con l'interfaccia della riga di comando di Azure. Il file Bicep usa i file di parametri JSON.

Per altre informazioni sul file dei parametri, vedere Creare il file di parametri di Resource Manager.

Per passare un file di parametri locale, usare @ per specificare un file locale denominato storage.parameters.json.

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

Anteprima modifiche

Prima di distribuire il file Bicep, è possibile visualizzare in anteprima le modifiche apportate dal file Bicep all'ambiente. Usare l'operazione di what-if per verificare che il file Bicep apportare le modifiche previste. Il valore di what-if convalida anche il file Bicep per gli errori.

Distribuire le specifiche del modello

Attualmente, l'interfaccia della riga di comando di Azure non supporta la creazione di specifiche di modello fornendo file Bicep. È tuttavia possibile creare un file Bicep con la risorsa Microsoft.Resources/templateSpecs per distribuire una specifica del modello. L'esempio di specifica Crea modello illustra come creare una specifica di modello in un file Bicep. È anche possibile compilare il file Bicep in un file JSON del modello ARM usando l'interfaccia della riga di comando di Bicep e quindi creare una specifica del modello con il modello JSON.

Nome distribuzione

Quando si distribuisce un file Bicep, è possibile assegnare un nome alla distribuzione. Questo nome consente di recuperare la distribuzione dalla cronologia di distribuzione. Se non si specifica un nome per la distribuzione, viene usato il nome del file Bicep. Ad esempio, se si distribuisce un file Bicep denominato e non si specifica un nome di azuredeploy.bicep distribuzione, la distribuzione viene 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 voce precedente viene sostituita con la 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.

deploymentName='ExampleDeployment'$RANDOM

In caso contrario, aggiungere un valore di data.

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

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 che distribuisce un account di archiviazione denominato e contemporaneamente si esegue un'altra distribuzione denominata che distribuisce un account di archiviazione denominato , si distribuisce un solo newStorage storage1 account di newStorage storage2 archiviazione. L'account di archiviazione risultante è denominato storage2 .

Tuttavia, se si esegue una distribuzione denominata che distribuisce un account di archiviazione denominato e subito dopo il completamento viene eseguita un'altra distribuzione denominata che distribuisce un account di archiviazione denominato , si hanno due account di newStorage storage1 newStorage storage2 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 contemporaneamente senza conflitti. Se si esegue una distribuzione denominata che distribuisce un account di archiviazione denominato e contemporaneamente si esegue un'altra distribuzione denominata che distribuisce un account di archiviazione denominato , nella cronologia di distribuzione sono presenti due account di archiviazione e due newStorage1 storage1 newStorage2 storage2 voci.

Per evitare conflitti con distribuzioni simultanee e per garantire voci univoche nella cronologia di distribuzione, assegnare a ogni distribuzione un nome univoco.

Passaggi successivi