Wdrażanie zasobów przy użyciu szablonów usługi ARM i interfejsu API REST usługi Azure Resource Manager

W tym artykule wyjaśniono, jak używać interfejsu API REST usługi Azure Resource Manager z szablonami usługi Azure Resource Manager (szablonami usługi ARM) do wdrażania zasobów na platformie Azure.

Szablon można dołączyć do treści żądania lub połączyć z plikiem. W przypadku korzystania z pliku może to być plik lokalny lub plik zewnętrzny dostępny za pośrednictwem identyfikatora URI. Gdy szablon znajduje się na koncie magazynu, możesz ograniczyć dostęp do szablonu i podać token sygnatury dostępu współdzielonego (SAS) podczas wdrażania.

Wymagane uprawnienia

Aby wdrożyć plik Bicep lub szablon usługi ARM, potrzebujesz dostępu do zapisu w zasobach wdrażanych i dostępu do wszystkich operacji w typie zasobu Microsoft.Resources/deployments. Na przykład w celu wdrożenia maszyny wirtualnej potrzebne Microsoft.Compute/virtualMachines/write są uprawnienia i Microsoft.Resources/deployments/* uprawnienia. Operacja analizy co-jeżeli ma te same wymagania dotyczące uprawnień.

Aby uzyskać listę ról i uprawnień, zobacz Role wbudowane platformy Azure.

Zakres wdrożenia

Wdrożenie można kierować do grupy zasobów, subskrypcji platformy Azure, grupy zarządzania lub dzierżawy. W zależności od zakresu wdrożenia należy użyć różnych poleceń.

  • Aby wdrożyć w grupie zasobów, użyj opcji Wdrożenia — utwórz. Żądanie jest wysyłane do:

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
    
  • Aby wdrożyć w subskrypcji, użyj opcji Wdrożenia — utwórz w zakresie subskrypcji. Żądanie jest wysyłane do:

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

    Aby uzyskać więcej informacji na temat wdrożeń na poziomie subskrypcji, zobacz Tworzenie grup zasobów i zasobów na poziomie subskrypcji.

  • Aby wdrożyć w grupie zarządzania, użyj opcji Wdrożenia — utwórz w zakresie grupy zarządzania. Żądanie jest wysyłane do:

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

    Aby uzyskać więcej informacji na temat wdrożeń na poziomie grupy zarządzania, zobacz Tworzenie zasobów na poziomie grupy zarządzania.

  • Aby wdrożyć w dzierżawie, użyj opcji Wdrożenia — tworzenie lub aktualizowanie w zakresie dzierżawy. Żądanie jest wysyłane do:

    PUT https://management.azure.com/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
    

    Aby uzyskać więcej informacji na temat wdrożeń na poziomie dzierżawy, zobacz Tworzenie zasobów na poziomie dzierżawy.

Przykłady w tym artykule korzystają z wdrożeń grup zasobów.

Wdrażanie przy użyciu interfejsu API REST

  1. Ustaw typowe parametry i nagłówki, w tym tokeny uwierzytelniania.

  2. Jeśli wdrażasz w grupie zasobów, która nie istnieje, utwórz grupę zasobów. Podaj identyfikator subskrypcji, nazwę nowej grupy zasobów i lokalizację potrzebną dla rozwiązania. Aby uzyskać więcej informacji, zobacz Tworzenie grupy zasobów.

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

    Z treścią żądania, na przykład:

    {
     "location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. Przed wdrożeniem szablonu możesz wyświetlić podgląd zmian, które zostaną wprowadzone w środowisku. Użyj operacji analizy co-jeżeli, aby sprawdzić, czy szablon wprowadza oczekiwane zmiany. Co-jeżeli weryfikuje również szablon pod kątem błędów.

  4. Aby wdrożyć szablon, podaj identyfikator subskrypcji, nazwę grupy zasobów, nazwę wdrożenia w identyfikatorze URI żądania.

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

    W treści żądania podaj link do pliku szablonu i parametrów. Aby uzyskać więcej informacji na temat pliku parametrów, zobacz Tworzenie pliku parametrów usługi Resource Manager.

    Zwróć uwagę, że parametr mode jest ustawiony na przyrostowy. Aby uruchomić pełne wdrożenie, ustaw wartość modeUkończono. Należy zachować ostrożność podczas korzystania z trybu pełnego, ponieważ przypadkowo usuwaj zasoby, które nie są w szablonie.

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

    Jeśli chcesz rejestrować zawartość odpowiedzi, żądać zawartości lub obu tych elementów, dołącz debugSetting do żądania.

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

    Konto magazynu można skonfigurować tak, aby używało tokenu sygnatury dostępu współdzielonego (SAS). Aby uzyskać więcej informacji, zobacz Delegowanie dostępu za pomocą sygnatury dostępu współdzielonego.

    Jeśli musisz podać wartość wrażliwą dla parametru (takiego jak hasło), dodaj wartość do magazynu kluczy. Pobierz magazyn kluczy podczas wdrażania, jak pokazano w poprzednim przykładzie. Aby uzyskać więcej informacji, zobacz Używanie usługi Azure Key Vault do przekazywania bezpiecznej wartości parametru podczas wdrażania.

  5. Zamiast łączyć się z plikami dla szablonu i parametrów, możesz je uwzględnić w treści żądania. Poniższy przykład przedstawia treść żądania z wbudowanym szablonem i parametrem:

    {
       "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. Aby uzyskać stan wdrożenia szablonu, użyj pozycji Wdrożenia — Pobierz.

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

Wdrażanie za pomocą klienta ARMClient

ARMClient to proste narzędzie wiersza polecenia do wywoływania interfejsu API usługi Azure Resource Manager. Aby zainstalować narzędzie, zobacz ARMClient.

Aby wyświetlić listę subskrypcji:

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

Aby wyświetlić listę grup zasobów:

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

Zastąp wartość <subscription-id> identyfikatorem subskrypcji platformy Azure.

Aby utworzyć grupę zasobów w regionie Środkowe stany USA :

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

Możesz też umieścić treść w pliku JSON o nazwie CreateRg.json:

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

Aby uzyskać więcej informacji, zobacz ARMClient: narzędzie wiersza polecenia dla interfejsu API platformy Azure.

Nazwa wdrożenia

Możesz nadać wdrożeniu nazwę, taką jak ExampleDeployment.

Za każdym razem, gdy uruchamiasz wdrożenie, wpis jest dodawany do historii wdrożenia grupy zasobów o nazwie wdrożenia. Jeśli uruchomisz inne wdrożenie i nadasz mu taką samą nazwę, wcześniejszy wpis zostanie zastąpiony bieżącym wdrożeniem. Jeśli chcesz zachować unikatowe wpisy w historii wdrażania, nadaj każdemu wdrożeniu unikatową nazwę.

Aby utworzyć unikatową nazwę, można przypisać liczbę losową. Możesz też dodać wartość daty.

Jeśli uruchamiasz współbieżne wdrożenia do tej samej grupy zasobów o tej samej nazwie wdrożenia, zostanie ukończone tylko ostatnie wdrożenie. Wszystkie wdrożenia o tej samej nazwie, które nie zostały zakończone, są zastępowane ostatnim wdrożeniem. Jeśli na przykład uruchomisz wdrożenie o nazwie newStorage , które wdraża konto magazynu o nazwie , a jednocześnie uruchom inne wdrożenie o nazwie newStorage , które wdraża konto magazynu o nazwie storage1storage2, wdrażasz tylko jedno konto magazynu. Wynikowe konto magazynu nosi nazwę storage2.

Jeśli jednak uruchomisz wdrożenie o nazwie newStorage , które wdraża konto magazynu o nazwie , i natychmiast po zakończeniu uruchamiania innego wdrożenia o nazwie newStorage , które wdraża konto magazynu o nazwie storage1storage2, masz dwa konta magazynu. Jeden ma nazwę storage1, a drugi ma nazwę storage2. Jednak w historii wdrażania masz tylko jeden wpis.

Po określeniu unikatowej nazwy dla każdego wdrożenia można uruchamiać je współbieżnie bez konfliktu. Jeśli uruchomisz wdrożenie o nazwie newStorage1 , które wdraża konto magazynu o nazwie , a jednocześnie uruchom kolejne wdrożenie o nazwie newStorage2 , które wdraża konto magazynu o nazwie storage1storage2, wówczas masz dwa konta magazynu i dwa wpisy w historii wdrożenia.

Aby uniknąć konfliktów z wdrożeniami współbieżnymi i zapewnić unikatowe wpisy w historii wdrożenia, nadaj każdemu wdrożeniu unikatową nazwę.

Następne kroki