Condividi tramite


Distribuire risorse con i modelli arm e l'API REST di Azure Resource Manager

Questo articolo illustra come usare l'API REST di Azure Resource Manager con i modelli di Azure Resource Manager (modelli arm) per distribuire le risorse in Azure.

È possibile includere il modello nel corpo della richiesta o collegarsi a un file. Quando si usa un file, può essere un file locale o un file esterno disponibile tramite un URI. Quando il modello si trova in un account di archiviazione, è possibile limitare l'accesso al modello e fornire un token di firma di accesso condiviso durante la distribuzione.

Autorizzazioni necessarie

Per distribuire un file Bicep o un modello di ARM, è necessario l'accesso in scrittura alle risorse distribuite e l'accesso per tutte le operazioni sul tipo di risorsa Microsoft.Resources/deployments. Ad esempio, per distribuire una macchina virtuale, sono necessarie le autorizzazioni Microsoft.Compute/virtualMachines/write e Microsoft.Resources/deployments/*. L'operazione di simulazione ha gli stessi requisiti di autorizzazione.

Per un elenco dei ruoli e delle autorizzazioni, vedere Ruoli predefiniti di Azure.

Ambito di distribuzione

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

Gli esempi in questo articolo usano distribuzioni di gruppi di risorse.

Distribuire con l'API REST

  1. Impostare parametri e intestazioni comuni, inclusi i token di autenticazione.

  2. Se si esegue la distribuzione in un gruppo di risorse che non esiste, creare il gruppo di risorse. Specifica l'ID della sottoscrizione, il nome del nuovo gruppo di risorse e la posizione necessari per la tua soluzione. Per altre informazioni, vedere Creare un gruppo di risorse.

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>?api-version=2020-06-01
    

    Con un corpo della richiesta simile al seguente:

    {
     "location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. Prima di distribuire il modello, è possibile visualizzare in anteprima le modifiche apportate al modello nell'ambiente. Usare l'operazione di simulazione per verificare che il modello apporti le modifiche previste. La simulazione verifica anche il modello per individuare errori.

  4. Per distribuire un modello, specificare l'ID sottoscrizione, il nome del gruppo di risorse, il nome della distribuzione nell'URI della richiesta.

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2020-10-01
    

    Nel corpo della richiesta specificare un collegamento al modello e al file di parametri. Per altre informazioni sul file dei parametri, vedere Creare il file di parametri di Resource Manager.

    Si noti che mode è impostato su Incremental. Per eseguire una distribuzione completa, impostare mode su Completa. Prestare attenzione quando si usa la modalità completa, perché è possibile eliminare inavvertitamente le risorse che non si trovano nel modello.

    {
     "properties": {
       "templateLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
         "contentVersion": "1.0.0.0"
       },
       "parametersLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
         "contentVersion": "1.0.0.0"
       },
       "mode": "Incremental"
     }
    }
    

    Se vuoi registrare il contenuto della risposta, quello della richiesta, o entrambi, includi debugSetting nella richiesta.

    {
     "properties": {
       "templateLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
         "contentVersion": "1.0.0.0"
       },
       "parametersLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
         "contentVersion": "1.0.0.0"
       },
       "mode": "Incremental",
       "debugSetting": {
         "detailLevel": "requestContent, responseContent"
       }
     }
    }
    

    È possibile configurare l'account di archiviazione per usare un token di firma di accesso condiviso. Per ulteriori informazioni, vedi Delegating Access with a Shared Access Signature (Delega dell'accesso con una firma di accesso condiviso).

    Se è necessario specificare un'informazione riservata per un parametro, ad esempio una password, aggiungere tale valore a un archivio delle chiavi. Recuperare il Key Vault durante la distribuzione, come illustrato nell'esempio precedente. Per altre informazioni, vedere Usare Azure Key Vault per passare il valore del parametro sicuro durante la distribuzione.

  5. Anziché collegarsi ai file per il modello e i parametri, è possibile includerli nel corpo della richiesta. L'esempio seguente mostra il corpo della richiesta con il modello e il parametro inline:

    {
       "properties": {
       "mode": "Incremental",
       "template": {
         "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
         "contentVersion": "1.0.0.0",
         "parameters": {
           "storageAccountType": {
             "type": "string",
             "defaultValue": "Standard_LRS",
             "allowedValues": [
               "Standard_LRS",
               "Standard_GRS",
               "Standard_ZRS",
               "Premium_LRS"
             ],
             "metadata": {
               "description": "Storage Account type"
             }
           },
           "location": {
             "type": "string",
             "defaultValue": "[resourceGroup().location]",
             "metadata": {
               "description": "Location for all resources."
             }
           }
         },
         "variables": {
           "storageAccountName": "[format('{0}standardsa', uniquestring(resourceGroup().id))]"
         },
         "resources": [
           {
             "type": "Microsoft.Storage/storageAccounts",
             "apiVersion": "2022-09-01",
             "name": "[variables('storageAccountName')]",
             "location": "[parameters('location')]",
             "sku": {
               "name": "[parameters('storageAccountType')]"
             },
             "kind": "StorageV2",
             "properties": {}
           }
         ],
         "outputs": {
           "storageAccountName": {
             "type": "string",
             "value": "[variables('storageAccountName')]"
           }
         }
       },
       "parameters": {
         "location": {
           "value": "eastus2"
         }
       }
     }
    }
    
  6. Per ottenere lo stato della distribuzione del modello, usare Distribuzioni - Get.

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
    

Eseguire la distribuzione con ARMClient

ARMClient è uno strumento da riga di comando semplice per richiamare l'API di Azure Resource Manager. Per installare lo strumento, vedere ARMClient.

Per elencare le sottoscrizioni:

armclient GET /subscriptions?api-version=2021-04-01

Per elencare i gruppi di risorse:

armclient GET /subscriptions/<subscription-id>/resourceGroups?api-version=2021-04-01

Sostituire <subscription-id> con l'ID sottoscrizione di Azure.

Per creare un gruppo di risorse nell'area Stati Uniti centrali :

armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01  "{location: 'central us', properties: {}}"

In alternativa, è possibile inserire il corpo in un file JSON denominato CreateRg.json:

{
  "location": "Central US",
  "properties": { }
}
armclient PUT /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>?api-version=2021-04-01 '@CreateRg.json'

Per altre informazioni, vedere ARMClient: uno strumento da riga di comando per l'API di Azure.

Nome distribuzione

È possibile assegnare alla distribuzione un nome, ExampleDeploymentad esempio .

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. In alternativa, aggiungere un valore di data.

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.

Passaggi successivi