Übung: Bereitstellen Ihrer ARM-Vorlagen

Abgeschlossen

Hinweis

Wenn Sie zum ersten Mal eine Sandbox aktivieren und die Bedingungen akzeptieren, ist Ihr Microsoft-Konto einem neuen Azure-Verzeichnis mit dem Namen „Microsoft Learn Sandbox“ zugeordnet. Sie werden zu einem speziellen Abonnement mit der Bezeichnung „Concierge-Abonnement“ hinzugefügt.

Hier stellen Sie eine Azure Resource Manager-Vorlage von Ihrem Computer bzw. aus einem GitHub-Repository durch Angeben eines URIs bereit.

Wichtig

In dieser Übung werden die Azure Resource Manager-Tools für Visual Studio Code verwendet. Stellen Sie sicher, dass Sie diese Erweiterung in Visual Studio Code installieren.

Einrichten Ihrer Umgebung mit dem Microsoft Learn-Sandboxabonnement

Sie müssen sich über das Visual Studio Code-Terminal bei Ihrem Azure-Konto anmelden, um die einzelnen Bereitstellungen in dieser Einheit durchführen zu können.

Achten Sie darauf, dass Sie sich bei demselben Konto anmelden, über das die Sandbox aktiviert wurde.

Anmelden bei Azure

  1. Führen Sie im Terminal in Visual Studio Code den folgenden Befehl aus, um sich bei Azure anzumelden. Wenn Sie diesen Befehl ausführen, wird ein Browser geöffnet, in dem Sie sich bei Ihrem Konto anmelden können:

    Connect-AzAccount
    
  2. Sobald Sie angemeldet sind, wird im Terminal eine Liste der Abonnements angezeigt, die mit diesem Konto verknüpft sind. Wenn Sie die Sandbox aktiviert haben, sollte das Concierge-Abonnement in dieser Liste enthalten sein.

  3. Überprüfen Sie den Abonnementnamen. Der folgende Befehl listet Ihre Abonnements, Namen und deren IDs in einem leicht lesbaren Tabellenformat auf. Suchen Sie nach Concierge Subscription.

    Get-AzSubscription
    
  4. Ändern Sie Ihr aktives Abonnement in „Concierge-Abonnement“.

    $context = Get-AzSubscription -SubscriptionName "Concierge Subscription" | Set-AzContext
    

Festlegen der Standardressourcengruppe

Sie müssen jetzt die für Sie in der Sandbox erstellte Ressourcengruppe als Standardressourcengruppe festlegen. Um diesen Vorgang ausführen zu können, müssen Sie zunächst mithilfe des folgenden Befehls den Ressourcengruppennamen abrufen.

Get-AzResourceGroup | where-object ResourceGroupName -match "learn" | Set-AzDefault

Verwenden Sie in diesem Befehl den Ressourcennamen, den Sie mithilfe des vorherigen Befehls abgerufen haben. (Dieser Name sollte in etwa wie folgt aussehen: learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Mithilfe dieses Befehls können Sie den Parameter aus den restlichen Azure PowerShell-Befehlen in dieser Übung auslassen.

Hinweis

Wenn Sie einen PowerShell- oder Azure CLI-Befehl zum Bereitstellen einer Vorlage ausführen, müssen Sie normalerweise den Namen der Zielressourcengruppe angeben. Durch Ausführen des vorherigen Befehls wurde der Kontext der Bereitstellung festgelegt. Wir haben durch Ausführen des PowerShell-Befehls Set-AzDefault den Namen unserer Sandboxressourcengruppe angegeben:

Set-AzDefault -ResourceGroupName {Resource Group Name}

Bereitstellen als lokale Vorlage

In der folgenden Übung stellen Sie eine Vorlage von Ihrem lokalen Computer aus bereit. Der Name der Ressourcengruppe, den Sie normalerweise für die Bereitstellung in Ihrer eigenen Umgebung verwenden, ist hier nicht erforderlich, da Sie die Standardressourcengruppe bereits im vorherigen Abschnitt definiert haben.

  1. Kopieren Sie zunächst den Inhalt des folgenden Vorlagencodes, und fügen Sie ihn in eine Datei in einem lokalen Verzeichnis ein. Verwenden Sie beispielsweise C:\JSON\maintemplate.json.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "VnetName": {
            "type": "string",
            "defaultValue": "VNet-001",
            "metadata": {
              "description": "Virtual Network Name"
            }
          },
          "CostCenterIO": {
            "type": "string",
            "defaultValue": "12345",
            "metadata": {
              "description": "Cost Center IO number for cross billing"
            }
          },
          "OwnerName": {
            "type": "string",
            "defaultValue": "John Smith",
            "metadata": {
              "description": "Name of the stakeholder responsible for this resource"
            }
          }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },  
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  2. Nachdem Sie die Datei lokal gespeichert haben, können Sie den PowerShell-Befehl verwenden, um sie auf der Ressourcengruppenebene bereitzustellen, die in der letzten Lerneinheit behandelt wurde. Führen Sie den Befehl New-AzResourceGroupDeployment aus.

    $templateFile="C:\JSON\maintemplate.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-"+"$today"
    
    New-AzResourceGroupDeployment `
    -Name $DeploymentName `
    -TemplateFile $templateFile
    

    Sobald dieser Vorgang abgeschlossen ist, sollten Sie über Ergebnisse verfügen, die wie folgt aussehen:

    DeploymentName          : DeployLocalTemplate-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:50:04 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    
    

Bereitstellen der gleichen lokalen Vorlage mit Parameterwerten

In der letzten Übung haben Sie die Vorlage mit den Standardwerten der Parameter bereitgestellt. Beim Bereitstellen einer lokalen ARM-Vorlage müssen Sie möglicherweise Parameterwerte übergeben. Sie können entweder Inlineparameter oder eine Parameterdatei verwenden.

Um Inlineparameter an die Bereitstellung zu übergeben, müssen Sie die Namen des Parameters mit dem Cmdlet New-AzResourceGroupDeployment angeben. In der nächsten Übung übergeben Sie die Parameter als Inlineparameter und als Parameterdatei.

  1. Wenn Sie dieselbe Vorlage wie in der letzten Übung verwenden, erstellen Sie eine Hashtabelle, die die Werte für die erforderlichen Vorlagenparameter enthält:

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $templateFile="C:\JSON\maintemplate.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-2-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile `
        -TemplateParameterObject $parameters
    

    Sobald dieser Vorgang abgeschlossen ist, sollten Sie über Ergebnisse verfügen, die wie folgt aussehen:

    DeploymentName          : DeployLocalTemplate-2-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:51:55 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    

    Anstatt Parameter als Inlinewerte in Ihrem Skript zu übergeben, fällt es Ihnen möglicherweise leichter, eine JSON-Datei zu verwenden, die die Parameterwerte enthält. Bei der Parameterdatei kann es sich um eine lokale Datei oder eine externe Datei bzw. eine Remotedatei mit einem URI handeln, auf den zugegriffen werden kann. Weitere Informationen zur Parameterdatei finden Sie unter Erstellen einer Resource Manager-Parameterdatei.

  2. Zum Übergeben einer lokalen Parameterdatei verwenden Sie den Parameter TemplateParameterFile im gleichen Befehl, den Sie bisher verwendet haben. Zunächst müssen Sie jedoch die Parameterdatei erstellen und speichern.

    1. Da Sie Visual Studio Code mit der Erweiterung „Azure Resource Manager-Tools“ verwenden, können Sie die lokal gespeicherte ARM-Vorlage öffnen und auf den Link Select/create parameter file... (Parameterdatei auswählen/erstellen...) klicken.

    2. Wählen Sie im Menü Neu und dann Nur erforderliche Parameter aus. Die Erweiterung erstellt eine Parameterdatei auf Grundlage der aktuell geöffneten Vorlage.

    Screenshot: Auswahl zum Erstellen einer Parameterdatei in Visual Studio Code

  3. Verwenden Sie den folgenden PowerShell-Befehl mit dem Parameter TemplateParameterFile:

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $templateFile="C:\JSON\maintemplate.json"
    $TemplateParameterFile= "C:\JSON\maintemplate.parameters.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-3-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile `
        -TemplateParameterFile $TemplateParameterFile
    

    Nach der Bereitstellung sollten Die Ergebnisse wie im folgenden Beispiel aussehen.

    DeploymentName          : DeployLocalTemplate-3-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:54:40 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    
    

Bereitstellen einer externen oder Remotevorlage

In einigen Fällen müssen Sie die Bereitstellung von einem externen Speicherort oder einem Remotespeicherort anstatt aus einer Vorlage auf dem lokalen Computer durchführen. Sie können Vorlagen in einem Quellcodeverwaltungs-Repository (z.B. GitHub) speichern. Für den gemeinsamen Zugriff in Ihrer Organisation können Sie sie auch in einem Azure-Speicherkonto speichern.

  1. Verwenden Sie zum Bereitstellen einer externen Vorlage den TemplateUri-Parameter.

    In der nächsten Übung stellen Sie eine ARM-Vorlage aus einem GitHub-Repository bereit. Das Repository ist öffentlich, daher müssen Sie sich keine Gedanken über die Bereitstellung einer Vorlage machen, für die ein SAS-Token (Shared Access Signature) erforderlich ist. Informationen zur Verwendung eines privaten oder sicheren Remotestandorts finden Sie unter Bereitstellen einer privaten Vorlage mit SAS-Token.

    Der Vorlagen-URI für die Übung ist https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Es ist eine kurze Vorlage, die ein einfaches Speicherkonto in Ihrer Sandkastenumgebung bereitstellt.

  2. Der PowerShell-Befehl ist identisch mit dem Befehl für eine lokale Vorlage. Der einzige Unterschied besteht darin, dass der Parameter -TemplateUri den Parameter -TemplateFile ersetzt.

    Verwenden Sie den folgenden Code, um die Bereitstellung in der bereitgestellten Sandbox auszuführen:

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-4-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
    

    Die Ergebnisse ähneln dem folgenden Screenshot. Diese beschreiben die Informationen des Vorlagenspeicherorts.

    DeploymentName          : DeployLocalTemplate-4-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:56:55 p.m.
    Mode                    : Incremental
    TemplateLink            :
                              Uri            :
                              https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
                              ContentVersion : 1.0.0.0
    
    Parameters              :
                              Name                  Type                       Value
                              ====================  =========================  ==========
                              storageAccountType    String                     Standard_LRS
                              location              String                     westus
    
    Outputs                 :
                              Name                  Type                       Value
                              ====================  =========================  ==========
                              storageAccountName    String                     storepgxosadmbq77e
    
    DeploymentDebugLogLevel :
    
    

Hinweis

Dieser Abschnitt wurde mithilfe der Azure CLI-Befehle im Windows Linux-Subsystem (WSL2) unter Windows 10 geschrieben. Die Befehle sind identisch, unabhängig davon, ob Sie die Azure CLI in einer PowerShell-, CMD- oder Bash-Shell verwenden. Die Art, wie die Variablen adressiert werden, kann sich jedoch unterscheiden.

Anmelden bei Azure

  1. Führen Sie im Terminal in Visual Studio Code den folgenden Befehl aus, um sich bei Azure anzumelden. Wenn Sie diesen Befehl ausführen, wird ein Browser geöffnet, in dem Sie sich bei Ihrem Konto anmelden können:

    az login
    
  2. Sobald Sie angemeldet sind, wird im Terminal eine JSON-Liste der Abonnements angezeigt, die mit diesem Konto verknüpft sind. Wenn Sie die Sandbox aktiviert haben, sollte das Concierge-Abonnement in dieser Liste enthalten sein.

  3. Rufen Sie die Abonnement-ID ab. Mit dem folgenden Befehl werden Ihre Abonnements und deren IDs aufgelistet. Die Abonnement-ID befindet sich in der dritten Spalte. Suchen Sie nach Concierge Subscription, und kopieren Sie die dritte Spalte. Dieser sollte ungefähr wie aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e aussehen.

    az account list -o table
    
  4. Ändern Sie Ihr aktives Abonnement in „Concierge Subscription“. Stellen Sie sicher, dass Sie {Your subscription ID} durch die ID des Concierge-Abonnements ersetzen, die Sie mithilfe des letzten Befehls abgerufen haben.

    az account set -s {Your subscription ID}
    

Festlegen der Standardressourcengruppe

Sie müssen jetzt die für Sie in der Sandbox erstellte Ressourcengruppe als Standardressourcengruppe festlegen. Sie müssen zunächst den Ressourcengruppenname mithilfe des folgenden Befehls abrufen, um diesen Vorgang durchzuführen:

az group list -o table

Verwenden Sie in diesem Befehl den Ressourcennamen, den Sie mithilfe des vorherigen Befehls abgerufen haben. (Dieser Name sollte in etwa wie folgt aussehen: learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Mithilfe dieses Befehls können Sie den Parameter aus den restlichen Azure CLI-Befehlen in dieser Übung auslassen.

Hinweis

Wenn Sie einen Azure CLI-Befehl zum Bereitstellen einer Vorlage verwenden, müssen Sie normalerweise den Namen der Zielressourcengruppe angeben. In dieser Übung dieses Moduls wird diese Anforderung umgangen, indem der Kontext der Bereitstellung festgelegt wird. Im nächsten Schritt wird der Name der Sandbox-Ressourcengruppe mithilfe des Azure CLI-Befehls az configure festgelegt.

az configure --defaults group={Resource Group Name}

Bereitstellen als lokale Vorlage

In der folgenden Übung stellen Sie eine Vorlage von Ihrem lokalen Computer aus bereit. Der Name der Ressourcengruppe, den Sie normalerweise für die Bereitstellung in Ihrer eigenen Umgebung verwenden, ist hier nicht erforderlich, da Sie die Standardressourcengruppe bereits im vorherigen Abschnitt definiert haben.

  1. Kopieren Sie zunächst den Inhalt des folgenden Vorlagencodes, und fügen Sie ihn in eine Datei in einem lokalen Verzeichnis ein. Verwenden Sie beispielsweise C:\JSON\maintemplate.json oder /mnt/c/Users/you/json/maintemplate.json.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "VnetName": {
            "type": "string",
            "defaultValue": "VNet-001",
            "metadata": {
              "description": "Virtual Network Name"
            }
          },
          "CostCenterIO": {
            "type": "string",
            "defaultValue": "12345",
            "metadata": {
              "description": "Cost Center IO number for cross billing"
            }
          },
          "OwnerName": {
            "type": "string",
            "defaultValue": "John Smith",
            "metadata": {
              "description": "Name of the stakeholder responsible for this resource"
            }
          }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },  
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  2. Nachdem Sie die Datei lokal gespeichert haben, können Sie den Azure CLI-Befehl verwenden, um sie auf der Ressourcengruppenebene bereitzustellen, die in der letzten Lerneinheit behandelt wurde. Verwenden Sie den Befehl az deployment group create.

    Hinweis

    Im folgenden Beispiel befindet sich die Vorlagendatei im Ordner json auf dem Startlaufwerk des Windows Linux-Subsystems (WSL2). Passen Sie den Befehl an die Shell Ihrer Wahl an.

    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-"$today
    
    az deployment group create \
      --name $deploymentname \
      --template-file $templateFile
    

    Nach Abschluss sollte die resultierende Ausgabe wie im folgenden Beispiel aussehen. Suchen Sie nach der Zeile "provisioningState": "Succeeded", um sicherzustellen, dass Ihre Bereitstellung erfolgreich abgeschlossen wurde.

    {
      "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-2020-08-19",
      "properties": {
        "correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT8.9060761S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/    learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Network/virtualNetworks/VNet-001",
            "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a"
          }
        ],
        "outputs": null,
        "parameters": {
          "costCenterIO": {
            "type": "String",
            "value": "12345"
          },
          "ownerName": {
            "type": "String",
            "value": "John Smith"
          },
          "vnetName": {
            "type": "String",
            "value": "VNet-001"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Network",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  "westus"
                ],
                "properties": null,
                "resourceType": "virtualNetworks"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "11553431046699679955",
        "templateLink": null,
        "timestamp": "2020-08-19T14:47:06.403362+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    

Bereitstellen der gleichen lokalen Vorlage mit Parameterwerten

In der letzten Übung haben Sie die Vorlage mit den Standardwerten der Parameter bereitgestellt. Beim Bereitstellen einer lokalen ARM-Vorlage müssen Sie möglicherweise Parameterwerte übergeben. Sie können entweder Inlineparameter oder eine Parameterdatei verwenden.

In der nächsten Übung übergeben Sie Inlineparameter an Ihre Bereitstellung. Sie müssen die Namen der Parameter angeben, unabhängig davon, ob Sie Inlineparameter oder eine Parameterdatei verwenden, indem Sie den az deployment group create Befehl verwenden.

  1. Wenn Sie dieselbe Vorlage wie in der letzten Übung verwenden, erstellen Sie eine Variable, die die Parameter in einem JSON-Zeichenfolgenformat für die erforderlichen Vorlagenparameter enthält.

    Hinweis

    Im folgenden Beispiel befindet sich die Vorlagendatei im Ordner json des Windows Linux-Subsystems (WSL2). Passen Sie den Befehl an die Shell und das Betriebssystem Ihrer Wahl an.

    parameters="{\"vnetName\":{\"value\":\"VNet-001\"},\"costCenterIO\":{\"value\":\"12345\"},\"ownerName\":{\"value\":\"John Smith\"}}"
    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-2-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile \
    --parameters "$parameters"
    

    Sobald dieser Vorgang abgeschlossen ist, sollten Sie über Ergebnisse verfügen, die dem folgenden Beispiel ähneln. Überprüfen Sie den Abschnitt "parameters" und den Wert "provisioningState", um sicherzustellen, dass der Befehl erfolgreich durchgeführt wurde.

      {- Finished ..
        "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2-2020-08-19",      
        "location": null,
        "name": "DeployLocalTemplate-2-2020-08-19",
        "properties": {
          "correlationId": "bbbb1111-cc22-3333-44dd-555555eeeeee",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.6990388S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a"
            }
          ],
          "outputs": null,
          "parameters": {
            "costCenterIO": {
              "type": "String",
              "value": "12345"
            },
            "ownerName": {
              "type": "String",
              "value": "John Smith"
            },
            "vnetName": {
              "type": "String",
              "value": "VNet-001"
            }
          },
          "parametersLink": null,
          "providers": [
            {
              "id": null,
              "namespace": "Microsoft.Network",
              "registrationPolicy": null,
              "registrationState": null,
              "resourceTypes": [
                {
                  "aliases": null,
                  "apiVersions": null,
                  "capabilities": null,
                  "locations": [
                    "westus"
                  ],
                  "properties": null,
                  "resourceType": "virtualNetworks"
                }
              ]
            }
          ],
          "provisioningState": "Succeeded",
          "templateHash": "11553431046699679955",
          "templateLink": null,
          "timestamp": "2020-08-19T16:40:20.249786+00:00",
          "validatedResources": null
        },
        "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

    Anstatt Parameter als Inlinewerte in Ihrem Skript zu übergeben, fällt es Ihnen möglicherweise leichter, eine JSON-Datei zu verwenden, die die Parameterwerte enthält. Bei der Parameterdatei kann es sich um eine lokale Datei oder eine externe Datei bzw. eine Remotedatei mit einem URI handeln, auf den zugegriffen werden kann. Weitere Informationen zur Parameterdatei finden Sie unter Erstellen einer Resource Manager-Parameterdatei.

  2. Zum Übergeben einer lokalen Parameterdatei verwenden Sie den Parameter --parameters im gleichen Befehl, den Sie bisher verwendet haben. Zunächst müssen Sie jedoch die Parameterdatei erstellen und speichern.

    1. Da Sie Visual Studio Code mit der Erweiterung „Azure Resource Manager-Tools“ verwenden, können Sie die lokal gespeicherte ARM-Vorlage öffnen und auf den Link Select or create a parameter file to enable full validation (Parameterdatei auswählen oder erstellen, um vollständige Überprüfung zu aktivieren) klicken.

    2. Klicken Sie im Menü auf Neu. Die Erweiterung erstellt eine Parameterdatei auf Grundlage der aktuell geöffneten Vorlage.

    Screenshot: Auswahl zum Erstellen einer Parameterdatei in Visual Studio Code

  3. Verwenden Sie den folgenden Azure CLI-Befehl mit dem Parameter --parameters.

    Hinweis

    Im folgenden Beispiel befindet sich die Vorlagendatei im Ordner json des Windows Linux-Subsystems (WSL2). Passen Sie den Befehl an die Shell und das Betriebssystem Ihrer Wahl an.

    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    templateparameterfile=/mnt/c/Users/<UserName>/json/maintemplate.parameters.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-3-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile \
    --parameters $templateparameterfile
    

    Nach der Bereitstellung sehen Die Ergebnisse houdl wie im folgenden Beispiel aus.

      {- Finished ..
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
        "location": null,
        "name": "DeployLocalTemplate-3-2020-08-19",
        "properties": {
          "correlationId": "cccc2222-dd33-4444-55ee-666666ffffff",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.2058912S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b"
            }
          ],
          "outputs": null,
          "parameters": {
            "costCenterIO": {
              "type": "String",
              "value": "12345"
            },
            "ownerName": {
              "type": "String",
              "value": "John Smith"
            },
            "vnetName": {
              "type": "String",
              "value": "VNet-001"
            }
          },
          "parametersLink": null,
          "providers": [
            {
              "id": null,
              "namespace": "Microsoft.Network",
              "registrationPolicy": null,
              "registrationState": null,
              "resourceTypes": [
                {
                  "aliases": null,
                  "apiVersions": null,
                  "capabilities": null,
                  "locations": [
                    "westus"
                  ],
                  "properties": null,
                  "resourceType": "virtualNetworks"
                }
              ]
            }
          ],
          "provisioningState": "Succeeded",
          "templateHash": "11553431046699679955",
          "templateLink": null,
          "timestamp": "2020-08-19T20:42:44.069215+00:00",
          "validatedResources": null
        },
        "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

Bereitstellen einer externen oder Remotevorlage

In einigen Fällen müssen Sie die Bereitstellung von einem externen Speicherort oder einem Remotespeicherort anstatt aus einer Vorlage auf dem lokalen Computer durchführen. Sie können Vorlagen in einem Quellcodeverwaltungs-Repository (z.B. GitHub) speichern. Für den gemeinsamen Zugriff in Ihrer Organisation können Sie sie auch in einem Azure-Speicherkonto speichern.

  1. Verwenden Sie zum Bereitstellen einer externen Vorlage den --template-uri-Parameter.

In dieser Übung stellen Sie eine ARM-Vorlage aus einem GitHub-Repository bereit. Das Repository ist öffentlich, daher müssen Sie sich keine Gedanken über die Bereitstellung einer Vorlage machen, für die ein SAS-Token (Shared Access Signature) erforderlich ist. Informationen zur Verwendung eines privaten oder sicheren Remotestandorts finden Sie unter Bereitstellen einer privaten Vorlage mit SAS-Token.

Der Vorlagen-URI für die Übung ist https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Es ist eine kurze Vorlage, die ein einfaches Speicherkonto in Ihrer Sandkastenumgebung bereitstellt.

  1. Der Azure CLI-Befehl ist identisch mit dem Befehl für eine lokale Vorlage. Der einzige Unterschied besteht darin, dass der Parameter --template-uri den Parameter --template-file ersetzt.

  2. Verwenden Sie den folgenden Code, um die Bereitstellung in der bereitgestellten Sandbox auszuführen:

    parameters="{\"vnetName\":{\"value\":\"VNet-001\"},\"costCenterIO\":{\"value\":\"12345\"},\"ownerName\":{\"value\":\"John Smith\"}}"
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-4-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
    

    Die Ergebnisse ähneln dem folgenden Codeblock. Diese beschreiben die Informationen des Vorlagenspeicherorts im Abschnitt "templateLink". Sie zeigen außerdem im Abschnitt "provisioningState", ob die Bereitstellung erfolgreich durchgeführt wurde.

    {- Finished ..
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-4-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-4-2020-08-19",
      "properties": {
        "correlationId": "dddd3333-ee44-5555-66ff-777777aaaaaa",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT24.3286124S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b"
          }
        ],
        "outputs": {
          "storageAccountName": {
            "type": "String",
            "value": "store7zk7eyqew54l4"
          }
        },
        "parameters": {
          "location": {
            "type": "String",
            "value": "westus"
          },
          "storageAccountType": {
            "type": "String",
            "value": "Standard_LRS"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Storage",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  "westus"
                ],
                "properties": null,
                "resourceType": "storageAccounts"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "12600309984865991765",
        "templateLink": {
          "contentVersion": "1.0.0.0",
          "id": null,
          "relativePath": null,
          "uri": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json"
        },
        "timestamp": "2020-08-19T20:53:36.759312+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }