Distribuera resurser med ARM-mallar och Azure Resource Manager REST API

Den här artikeln beskriver hur du använder Azure Resource Manager REST API med Azure Resource Manager-mallar (ARM-mallar) för att distribuera dina resurser till Azure.

Du kan antingen inkludera mallen i begärandetexten eller länka till en fil. När du använder en fil kan det vara en lokal fil eller en extern fil som är tillgänglig via en URI. När mallen finns i ett lagringskonto kan du begränsa åtkomsten till mallen och ange en SAS-token (signatur för delad åtkomst) under distributionen.

Behörigheter som krävs

Om du vill distribuera en Bicep-fil eller en ARM-mall måste du ha skrivåtkomst till de resurser som du distribuerar och åtkomst till alla åtgärder i resurstypen Microsoft.Resources/deployments. Om du till exempel vill distribuera en virtuell dator behöver Microsoft.Compute/virtualMachines/write du och Microsoft.Resources/deployments/* behörigheter. Konsekvensåtgärden har samma behörighetskrav.

Det finns en lista med roller och behörigheter i Inbyggda roller i Azure.

Distributionsomfång

Du kan rikta distributionen till en resursgrupp, en Azure-prenumeration, en hanteringsgrupp eller en klientorganisation. Beroende på distributionens omfattning använder du olika kommandon.

Exemplen i den här artikeln använder resursgruppsdistributioner.

Distribuera med REST API

  1. Ange vanliga parametrar och rubriker, inklusive autentiseringstoken.

  2. Om du distribuerar till en resursgrupp som inte finns skapar du resursgruppen. Ange ditt prenumerations-ID, namnet på den nya resursgruppen och den plats som du behöver för din lösning. Mer information finns i Skapa en resursgrupp.

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

    Med en begärandetext som:

    {
     "location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. Innan du distribuerar mallen kan du förhandsgranska de ändringar som mallen gör i din miljö. Använd konsekvensåtgärden för att kontrollera att mallen gör de ändringar som du förväntar dig. What-if validerar också mallen för fel.

  4. Om du vill distribuera en mall anger du ditt prenumerations-ID, namnet på resursgruppen, namnet på distributionen i begärande-URI:n.

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

    I begärandetexten anger du en länk till mallen och parameterfilen. Mer information om parameterfilen finns i Skapa en parameterfil för Resource Manager.

    Observera att mode är inställt på Inkrementell. Om du vill köra en fullständig distribution anger du modetill Slutför. Var försiktig när du använder det fullständiga läget eftersom du oavsiktligt kan ta bort resurser som inte finns i mallen.

    {
     "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"
     }
    }
    

    Om du vill logga svarsinnehåll, begära innehåll eller båda, inkludera debugSetting i begäran.

    {
     "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"
       }
     }
    }
    

    Du kan konfigurera lagringskontot så att det använder en SAS-token (signatur för delad åtkomst). Mer information finns i Delegera åtkomst med en signatur för delad åtkomst.

    Om du behöver ange ett känsligt värde för en parameter (till exempel ett lösenord) lägger du till det värdet i ett nyckelvalv. Hämta nyckelvalvet under distributionen enligt föregående exempel. Mer information finns i Använda Azure Key Vault för att skicka säkert parametervärde under distributionen.

  5. I stället för att länka till filer för mallen och parametrarna kan du inkludera dem i begärandetexten. I följande exempel visas begärandetexten med mallen och parametern infogade:

    {
       "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. Om du vill hämta status för malldistributionen använder du Distributioner – Hämta.

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

Distribuera med ARMClient

ARMClient är ett enkelt kommandoradsverktyg för att anropa Azure Resource Manager API. Information om hur du installerar verktyget finns i ARMClient.

Så här listar du dina prenumerationer:

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

Så här listar du dina resursgrupper:

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

Ersätt <prenumerations-ID> med ditt Azure-prenumerations-ID.

Så här skapar du en resursgrupp i regionen USA, centrala :

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

Du kan också placera brödtexten i en JSON-fil med namnet CreateRg.json:

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

Mer information finns i ARMClient: ett kommandoradsverktyg för Azure API.

Distributionsnamnet

Du kan ge distributionen ett namn som ExampleDeployment.

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 slumpmässigt tal. Eller lägg till ett datumvärde.

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 newStorage som distribuerar ett lagringskonto med namnet storage1och samtidigt kör en annan distribution med namnet newStorage som distribuerar ett lagringskonto med namnet storage2distribuerar du bara ett lagringskonto. Det resulterande lagringskontot heter storage2.

Men om du kör en distribution med namnet newStorage som distribuerar ett lagringskonto med namnet storage1, och omedelbart efter att den har slutförts kör du en annan distribution med namnet newStorage som distribuerar ett lagringskonto med namnet storage2, så har du två lagringskonton. Den ena heter storage1och 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 konflikt. Om du kör en distribution med namnet newStorage1 som distribuerar ett lagringskonto med namnet storage1och samtidigt kör en annan distribution med namnet newStorage2 som distribuerar ett lagringskonto med namnet storage2, har du två lagringskonton och två poster i distributionshistoriken.

Om du vill undvika konflikter med samtidiga distributioner och för att säkerställa unika poster i distributionshistoriken ger du varje distribution ett unikt namn.

Nästa steg