Bereitstellen von Ressourcen mit Resource Manager-Vorlagen und Resource Manager-REST-APIDeploy resources with Resource Manager templates and Resource Manager REST API

In diesem Artikel wird erläutert, wie Ihre Ressourcen mithilfe der Resource Manager-REST-API und von Azure Resource Manager-Vorlagen in Azure bereitgestellt werden.This article explains how to use the Resource Manager REST API with Resource Manager templates to deploy your resources to Azure.

Sie können entweder Ihre Vorlage in den Anforderungstext einschließen oder eine Verknüpfung zu einer Datei erstellen.You can either include your template in the request body or link to a file. Bei einer Datei kann es sich um eine lokale Datei oder eine externe Datei handeln, die über einen URI verfügbar ist.When using a file, it can be a local file or an external file that is available through a URI. Wenn sich Ihre Vorlage in einem Speicherkonto befindet, können Sie den Zugriff auf die Vorlage beschränken und während der Bereitstellung ein SAS-Token (Shared Access Signature) angeben.When your template is in a storage account, you can restrict access to the template and provide a shared access signature (SAS) token during deployment.

BereitstellungsumfangDeployment scope

Sie können als Ziel für Ihre Bereitstellung eine Verwaltungsgruppe, ein Azure-Abonnement oder eine Ressourcengruppe auswählen.You can target your deployment to a management group, an Azure subscription, or a resource group. In den meisten Fällen wählen Sie eine Ressourcengruppe als Ziel für Bereitstellungen aus.In most cases, you'll target deployments to a resource group. Verwenden Sie Verwaltungsgruppen- oder Abonnementbereitstellungen, um Richtlinien und Rollenzuweisungen im angegebenen Bereich anzuwenden.Use management group or subscription deployments to apply policies and role assignments across the specified scope. Sie verwenden Abonnementbereitstellungen auch, um eine Ressourcengruppe zu erstellen und Ressourcen für sie bereitzustellen.You also use subscription deployments to create a resource group and deploy resources to it. Abhängig vom Umfang der Bereitstellung verwenden Sie unterschiedliche Befehle.Depending on the scope of the deployment, you use different commands.

Für die Bereitstellung in einer Ressourcengruppe verwenden Sie Bereitstellungen – Erstellen.To deploy to a resource group, use Deployments - Create. Die Anforderung wird gesendet an:The request is sent to:

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

Für die Bereitstellung in einem Abonnement verwenden Sie Bereitstellungen – Erstellen im Abonnementbereich.To deploy to a subscription, use Deployments - Create At Subscription Scope. Die Anforderung wird gesendet an:The request is sent to:

PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2019-05-01

Für die Bereitstellung in einer Verwaltungsgruppe verwenden Sie Bereitstellungen – Erstellen im Verwaltungsgruppenbereich.To deploy to a management group, use Deployments - Create At Management Group Scope. Die Anforderung wird gesendet an:The request is sent to:

PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{groupId}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2019-05-01

Die Beispiele in diesem Artikel verwenden Ressourcengruppenbereitstellungen.The examples in this article use resource group deployments. Weitere Informationen zu Abonnementbereitstellungen finden Sie unter Erstellen von Ressourcengruppen und Ressourcen auf Abonnementebene.For more information about subscription deployments, see Create resource groups and resources at the subscription level.

Bereitstellen mit der REST-APIDeploy with the REST API

  1. Legen Sie allgemeine Parameter und Header fest, einschließlich Authentifizierungstoken.Set common parameters and headers, including authentication tokens.

  2. Erstellen Sie eine Ressourcengruppe, wenn noch keine vorhanden ist.If you don't have an existing resource group, create a resource group. Geben Sie Ihre Abonnement-ID, den Namen der neuen Ressourcengruppe und den Speicherort für Ihre Lösung an.Provide your subscription ID, the name of the new resource group, and location that you need for your solution. Weitere Informationen finden Sie unter Erstellen einer Ressourcengruppe.For more information, see Create a resource group.

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

    Mit dem Anforderungstext ähnlich dem folgenden:With a request body like:

    {
     "location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. Überprüfen Sie die Bereitstellung vor der Implementierung, indem Sie den Vorgang zum Überprüfen einer Vorlagenbereitstellung ausführen.Validate your deployment before executing it by running the Validate a template deployment operation. Geben Sie die Parameter beim Testen der Bereitstellung genauso an wie beim Ausführen der Bereitstellung (wie im nächsten Schritt zu sehen).When testing the deployment, provide parameters exactly as you would when executing the deployment (shown in the next step).

  4. Geben Sie zum Bereitstellen einer Vorlage Ihre Abonnement-ID, den Namen der Ressourcengruppe und den Namen der Bereitstellung im Anforderungs-URI an.To deploy a template, provide your subscription ID, the name of the resource group, the name of the deployment in the request URI.

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

    Geben Sie im Anforderungstext einen Link zu Ihrer Vorlage und Parameterdatei an.In the request body, provide a link to your template and parameter file. Beachten Sie, dass mode auf Incremental festgelegt ist.Notice the mode is set to Incremental. Legen Sie zum Ausführen einer vollständigen Bereitstellung mode auf Complete fest.To run a complete deployment, set mode to Complete. Gehen Sie bei Verwendung des Modus „Complete“ sehr umsichtig vor, da Sie versehentlich Ressourcen löschen können, die nicht in Ihrer Vorlage enthalten sind.Be careful when using the complete mode as you can inadvertently delete resources that aren't in your template.

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

    Wenn Sie den Antwortinhalt und/oder den Anforderungsinhalt protokollieren möchten, fügen Sie debugSetting in die Anforderung ein.If you want to log response content, request content, or both, include debugSetting in the request.

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

    Sie können das Speicherkonto so einrichten, das ein SAS-Token (Shared Access Signature) verwendet wird.You can set up your storage account to use a shared access signature (SAS) token. Weitere Informationen finden Sie unter Delegieren des Zugriffs mit einer SAS (Shared Access Signature).For more information, see Delegating Access with a Shared Access Signature.

  5. Anstatt für die Vorlage und die Parameter eine Verknüpfung mit Dateien zu erstellen, können Sie diese auch in den Anforderungstext einschließen.Instead of linking to files for the template and parameters, you can include them in the request body. Im folgenden Beispiel ist der Anforderungstext mit der inline angegebenen Vorlage und den Parametern dargestellt:The following example shows the request body with the template and parameter inline:

    {
       "properties": {
       "mode": "Incremental",
       "template": {
         "$schema": "https://schema.management.azure.com/schemas/2015-01-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": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
         },
         "resources": [
           {
             "type": "Microsoft.Storage/storageAccounts",
             "name": "[variables('storageAccountName')]",
             "apiVersion": "2018-02-01",
             "location": "[parameters('location')]",
             "sku": {
               "name": "[parameters('storageAccountType')]"
             },
             "kind": "StorageV2",
             "properties": {}
           }
         ],
         "outputs": {
           "storageAccountName": {
             "type": "string",
             "value": "[variables('storageAccountName')]"
           }
         }
       },
       "parameters": {
         "location": {
           "value": "eastus2"
         }
       }
     }
    }
    
  6. Rufen Sie den Status der Vorlagenbereitstellung mit Deployments - Get ab.To get the status of the template deployment, use Deployments - Get.

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

Erneute Bereitstellung bei BereitstellungsfehlernRedeploy when deployment fails

Dieses Feature ist auch bekannt als Rollback bei Fehler.This feature is also known as Rollback on error. Wenn eine Bereitstellung fehlschlägt, können Sie automatisch eine frühere, erfolgreiche Bereitstellung aus Ihrem Bereitstellungsverlauf bereitstellen.When a deployment fails, you can automatically redeploy an earlier, successful deployment from your deployment history. Geben Sie mit der Eigenschaft onErrorDeployment im Anforderungstext die erneute Bereitstellung an.To specify redeployment, use the onErrorDeployment property in the request body. Diese Funktionalität ist nützlich, wenn es einen bekannten guten Zustand für die Infrastrukturbereitstellung gibt, der wiederhergestellt werden soll.This functionality is useful if you've got a known good state for your infrastructure deployment and want to revert to this state. Es gibt eine Reihe von Vorbehalten und Einschränkungen:There are a number of caveats and restrictions:

  • Die Bereitstellung wird genauso wie zuvor mit denselben Parametern ausgeführt.The redeployment is run exactly as it was run previously with the same parameters. Sie können die Parameter nicht ändern.You cannot change the parameters.
  • Die vorherige Bereitstellung wird im vollständigen Modus ausgeführt.The previous deployment is run using the complete mode. Alle in der vorherigen Bereitstellung nicht enthaltenen Ressourcen werden gelöscht, und alle Ressourcenkonfigurationen werden auf ihren vorherigen Zustand zurückgesetzt.Any resources not included in the previous deployment are deleted, and any resource configurations are set to their previous state. Sorgen Sie dafür, dass Sie die Bereitstellungsmodi vollständig verstehen.Make sure you fully understand the deployment modes.
  • Die erneute Bereitstellung wirkt sich nur auf die Ressourcen aus. Datenänderungen sind davon nicht betroffen.The redeployment only affects the resources, any data changes aren't affected.
  • Dieses Feature wird nur bei Bereitstellungen von Ressourcengruppen unterstützt, nicht bei Bereitstellungen auf Abonnementebene.This feature is only supported on Resource Group deployments, not subscription level deployments. Weitere Informationen zu Bereitstellungen auf Abonnementebene finden Sie unter Erstellen von Ressourcengruppen und Ressourcen auf Abonnementebene.For more information about subscription level deployment, see Create resource groups and resources at the subscription level.

Zur Verwendung dieser Option müssen die Bereitstellungen eindeutige Namen aufweisen, damit sie im Verlauf identifiziert werden können.To use this option, your deployments must have unique names so they can be identified in the history. Wenn die Bereitstellungen keine eindeutigen Namen aufweisen, wird die vorherige erfolgreich ausgeführte Bereitstellung im Verlauf möglicherweise durch die aktuelle fehlerhafte Bereitstellung überschrieben.If you don't have unique names, the current failed deployment might overwrite the previously successful deployment in the history. Diese Option kann nur für Bereitstellungen auf Stammebene verwendet werden.You can only use this option with root level deployments. Bereitstellungen aus einer geschachtelten Vorlage können nicht erneut bereitgestellt werden.Deployments from a nested template aren't available for redeployment.

Um die letzte erfolgreich ausgeführte Bereitstellung erneut bereitzustellen, wenn bei der aktuellen Bereitstellung Fehler auftreten, verwenden Sie folgenden Code:To redeploy the last successful deployment if the current deployment fails, use:

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

Um eine bestimmte Bereitstellung erneut bereitzustellen, wenn bei der aktuellen Bereitstellung Fehler auftreten, verwenden Sie folgenden Code:To redeploy a specific deployment if the current deployment fails, use:

{
  "properties": {
    "templateLink": {
      "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
      "contentVersion": "1.0.0.0"
    },
    "mode": "Incremental",
    "parametersLink": {
      "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
      "contentVersion": "1.0.0.0"
    },
    "onErrorDeployment": {
      "type": "SpecificDeployment",
      "deploymentName": "<deploymentname>"
    }
  }
}

Die angegebene Bereitstellung muss erfolgreich ausgeführt worden sein.The specified deployment must have succeeded.

ParameterdateiParameter file

Bei der Verwendung einer Parameterdatei zum Übergeben von Parameterwerten während der Bereitstellung müssen Sie eine JSON-Datei in einem Format wie im folgenden Beispiel erstellen.If you use a parameter file to pass parameter values during deployment, you need to create a JSON file with a format similar to the following example:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "webSiteName": {
            "value": "ExampleSite"
        },
        "webSiteHostingPlanName": {
            "value": "DefaultPlan"
        },
        "webSiteLocation": {
            "value": "West US"
        },
        "adminPassword": {
            "reference": {
               "keyVault": {
                  "id": "/subscriptions/{guid}/resourceGroups/{group-name}/providers/Microsoft.KeyVault/vaults/{vault-name}"
               },
               "secretName": "sqlAdminPassword"
            }
        }
   }
}

Die Parameterdatei darf nicht größer als 64 KB sein.The size of the parameter file can't be more than 64 KB.

Wenn Sie einen vertraulichen Wert für einen Parameter (z.B. ein Kennwort) angeben müssen, fügen Sie den Wert einem Schlüsseltresor hinzu.If you need to provide a sensitive value for a parameter (such as a password), add that value to a key vault. Rufen Sie den Schlüsseltresor während der Bereitstellung wie im vorherigen Beispiel gezeigt ab.Retrieve the key vault during deployment as shown in the previous example. Weitere Informationen finden Sie unter Übergeben sicherer Werte während der Bereitstellung.For more information, see Pass secure values during deployment.

Nächste SchritteNext steps