Oefening: uw ARM-sjablonen implementeren

Voltooid

Notitie

De eerste keer dat u een sandbox activeert en de voorwaarden accepteert, wordt uw Microsoft-account gekoppeld aan een nieuwe Azure-map met de naam Microsoft Learn-sandbox. U wordt toegevoegd aan een speciaal abonnement met de naam Concierge-abonnement.

Hier implementeert u een ARM-sjabloon (Azure Resource Manager) vanaf uw computer en vanaf een GitHub-opslagplaats door een URI op te geven.

Belangrijk

In deze oefening wordt Hulpprogramma's van Azure Resource Manager voor Visual Studio Code gebruikt. Zorg ervoor dat u deze extensie installeert in Visual Studio Code.

Uw omgeving instellen met het Microsoft Learn-sandbox-abonnement

Als u elke implementatie in deze eenheid wilt uitvoeren, moet u zich aanmelden bij uw Azure-account vanuit de Visual Studio Code-terminal.

Zorg ervoor dat u zich aanmeldt bij hetzelfde account waarmee u de sandbox hebt geactiveerd.

Aanmelden bij Azure

  1. Voer in de terminal in Visual Studio Code de volgende opdracht uit om u aan te melden bij Azure. Als u deze opdracht uitvoert, wordt een browser geopend waarmee u zich kunt aanmelden bij uw account.

    Connect-AzAccount
    
  2. Wanneer u bent aangemeld, ziet u een lijst met de abonnementen die zijn gekoppeld aan dit account in de terminal. Als u de sandbox hebt geactiveerd, wordt het Concierge-abonnement in deze lijst weergegeven.

  3. Controleer de naam van het abonnement. De volgende opdracht bevat uw abonnementen, namen en hun id's in een eenvoudig te lezen tabelindeling. Concierge SubscriptionZoek naar .

    Get-AzSubscription
    
  4. Wijzig uw actieve abonnement naar het Concierge-abonnement.

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

De standaardresourcegroep instellen

Stel nu de resourcegroep die voor u is gemaakt in de sandbox in als standaardresourcegroep. Als u deze bewerking wilt uitvoeren, moet u eerst de naam van de resourcegroep ophalen door de volgende opdracht uit te voeren.

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

Gebruik in deze opdracht de resourcenaam die u hebt opgehaald uit de vorige opdracht. (Het ziet er ongeveer als volgt uit learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Met deze opdracht kunt u die parameter weglaten uit de rest van de Azure PowerShell-opdrachten in deze oefening.

Notitie

Wanneer u normaal gesproken een PowerShell- of Azure CLI-opdracht uitvoert om een sjabloon te implementeren, moet u de naam van de doelresourcegroep opgeven. Als u de vorige opdracht uitvoert, hebben we de context van de implementatie ingesteld. We hebben de naam van de sandbox-resourcegroep opgegeven door de Opdracht Set-AzDefault PowerShell uit te voeren:

Set-AzDefault -ResourceGroupName {Resource Group Name}

Een lokale sjabloon implementeren

In de volgende oefening implementeert u een sjabloon vanaf uw lokale computer. De naam van de resourcegroep die normaal gesproken wordt gebruikt bij een implementatie in uw eigen omgeving is hier niet nodig, omdat we de standaard resourcegroep al hebben gedefinieerd in de vorige sectie.

  1. Kopieer en plak om te beginnen de inhoud van de volgende sjablooncode in een bestand in een lokale map. Gebruik bijvoorbeeld 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. Nadat u het bestand lokaal hebt opgeslagen, kunt u de PowerShell-opdracht gebruiken om het te implementeren op het niveau van de resourcegroep waarover we in de laatste les hebben gesproken. Gebruik namelijk de opdracht New-AzResourceGroupDeployment .

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

    Nadat deze is voltooid, moet u resultaten hebben zoals in dit voorbeeld.

    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 :
    
    

Dezelfde lokale sjabloon met parameterwaarden implementeren

In de laatste oefening hebt u uw sjabloon geïmplementeerd door de standaardwaarde van de parameter te gebruiken. Wanneer u een lokale ARM-sjabloon implementeert, moet u mogelijk parameterwaarden doorgeven. U kunt zowel inlineparameters als een parameterbestand gebruiken.

Als u inline-parameters wilt doorgeven aan uw-implementatie, moet u de namen van de parameter opgeven met de cmdlet New-AzResourceGroupDeployment. In de volgende oefening geeft u de parameters door als inlineparameters en als een parameterbestand.

  1. Met behulp van dezelfde sjabloon als de laatste oefening maakt u een hash-tabel die de waarden voor de vereiste sjabloonparameters bevat.

    $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
    

    Zodra dit is voltooid, moet u resultaten krijgen die er ongeveer zo uitzien:

    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 :
    

    In plaats van parameters als inlinewaarden in uw script door te geven, is het wellicht eenvoudiger om een JSON-bestand te gebruiken dat de parameterwaarden bevat. Het parameterbestand kan een lokaal bestand of een extern bestand met een toegankelijke URI zijn. Zie Een Resource Manager-parameterbestand maken voor meer informatie over het parameterbestand.

  2. Gebruik voor het doorgeven van een lokaal parameterbestand de parameter TemplateParameterFile in dezelfde opdracht die eerder is gebruikt. Maar eerst moet u uw parameterbestand maken en opslaan.

    1. Omdat we Visual Studio Code gebruiken met de extensie Azure Resource Manager Tools, kunt u de ARM-sjabloon openen die u lokaal hebt opgeslagen en de koppeling Parameterbestand selecteren/maken selecteren... selecteren.

    2. Selecteer Nieuw in het menu en selecteer vervolgens Alleen vereiste parameters. De extensie maakt een parameterbestand op basis van de momenteel geopende sjabloon.

    Schermopname van selecties voor het maken van een parameterbestand in Visual Studio Code.

  3. Gebruik de volgende PowerShell-opdracht met de TemplateParameterFile parameter.

    $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
    

    Na de implementatie moeten uw resultaten eruitzien zoals in het volgende voorbeeld.

    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 :
    
    

Een externe sjabloon implementeren

In sommige gevallen moet u implementaties uitvoeren vanaf een externe locatie in plaats van een sjabloon op uw lokale computer. U kunt sjablonen opslaan in een opslagplaats voor broncodebeheer (zoals GitHub). U kunt de sjablonen ook opslaan in een Azure-opslagaccount voor gedeelde toegang in uw organisatie.

  1. Als u een externe sjabloon wilt implementeren, gebruikt u de TemplateUri-parameter.

    In de volgende oefening gaat u een ARM-sjabloon implementeren vanuit een GitHub-opslagplaats. De opslagplaats is openbaar, zodat u zich geen zorgen hoeft te maken over het implementeren van een sjabloon waarvoor een SAS-token (Shared Access Signature) is vereist. Zie Persoonlijke sjabloon met SAS-token implementeren voor details over het gebruik van een persoonlijke of beveiligde locatie op afstand.

    De sjabloon-URI voor de oefening is https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Het is een korte sjabloon waarmee een basisopslagaccount in uw sandbox-omgeving wordt geïmplementeerd.

  2. De PowerShell-opdracht is exact gelijk aan die voor een lokale sjabloon. Het enige verschil is dat de parameter -TemplateUri de parameter -TemplateFile vervangt.

    Gebruik de volgende code om implementaties uit te voeren in de beschikbare sandbox:

    $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
    

    De resultaten zijn hetzelfde als de volgende schermopname. Deze bieden een overzicht van de locatiegegevens van de sjabloon.

    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 :
    
    

Notitie

Deze sectie is geschreven met behulp van de Azure CLI-opdrachten in het Windows Linux-subsysteem (WSL2) in Windows 10. De opdrachten zijn hetzelfde, ongeacht of u de Azure CLI in een PowerShell, CMD of Bash-shell gebruikt. De manier waarop met de variabelen wordt omgegaan, kan echter verschillen.

Aanmelden bij Azure

  1. Voer in de terminal in Visual Studio Code de volgende opdracht uit om u aan te melden bij Azure. Als u deze opdracht uitvoert, wordt een browser geopend waarmee u zich kunt aanmelden bij uw account.

    az login
    
  2. Wanneer u bent aangemeld, ziet u een JSON-lijst met de abonnementen die zijn gekoppeld aan het account in de terminal. Als u de sandbox hebt geactiveerd, wordt het Concierge-abonnement in deze lijst weergegeven.

  3. Verkrijg de abonnements-id. De volgende opdracht bevat uw abonnementen en hun id's. De abonnements-id is de derde kolom. Zoek naar Concierge Subscription en kopieer de derde kolom. Het zou er ongeveer zo uit moeten cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0zien.

    az account list -o table
    
  4. Wijzig uw actieve abonnement naar het Concierge-abonnement. Vervang {Your subscription ID} door de id van het Concierge-abonnement dat u met de vorige opdracht hebt opgehaald.

    az account set -s {Your subscription ID}
    

De standaardresourcegroep instellen

Stel nu de resourcegroep die voor u is gemaakt in de sandbox in als standaardresourcegroep. Als u deze bewerking wilt uitvoeren, moet u eerst de naam van de resourcegroep ophalen met behulp van de volgende opdracht:

az group list -o table

Gebruik in deze opdracht de resourcenaam die u hebt opgehaald uit de vorige opdracht. (Het ziet er ongeveer als volgt uit learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Met deze opdracht kunt u die parameter weglaten uit de rest van de Azure CLI-opdrachten in deze oefening.

Notitie

Normaal gesproken moet u wanneer u een Azure CLI-opdracht gebruikt voor het implementeren van een sjabloon de naam van de doelresourcegroep opgeven. In de oefening in deze module omzeilen we deze vereiste door de context van onze implementatie in te stellen. De naam van de resourcegroep voor de sandbox wordt in de volgende stap opgegeven met behulp van de Azure CLI-opdracht az configure.

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

Een lokale sjabloon implementeren

In de volgende oefening implementeert u een sjabloon vanaf uw lokale computer. De naam van de resourcegroep die normaal gesproken wordt gebruikt bij een implementatie in uw eigen omgeving is hier niet nodig, omdat we de standaard resourcegroep al hebben gedefinieerd in de vorige sectie.

  1. Kopieer en plak om te beginnen de inhoud van de volgende sjablooncode in een bestand in een lokale map. Gebruik bijvoorbeeld C:\JSON\maintemplate.json of /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. Nadat u het bestand lokaal hebt opgeslagen, kunt u de Azure CLI-opdracht gebruiken om het te implementeren op het niveau van de resourcegroep waarover we in de laatste les hebben gesproken. Gebruik az deployment group create.

    Notitie

    In het volgende voorbeeld bevindt het sjabloonbestand zich in een json-map op het basisstation in het Windows Linux-subsysteem (WSL2). Pas uw opdracht aan op basis van de door u gekozen shell.

    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
    

    Nadat de uitvoer is voltooid, moet de resulterende uitvoer eruitzien als in het volgende voorbeeld. Als u er zeker van wilt zijn dat uw implementatie is geslaagd, kijkt u naar de regel "provisioningState": "Succeeded".

    {
      "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-2020-08-19",
      "properties": {
        "correlationId": "6ad759d5-cda5-4a71-a772-05a03d983c6f",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT8.9060761S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/    learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Network/virtualNetworks/VNet-001",
            "resourceGroup": "learn-e692001a-b605-48d4-97bd-7c05669db9dd"
          }
        ],
        "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-e692001a-b605-48d4-97bd-7c05669db9dd",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    

Dezelfde lokale sjabloon met parameterwaarden implementeren

In de laatste oefening hebt u uw sjabloon geïmplementeerd door de standaardwaarde van de parameter te gebruiken. Wanneer u een lokale ARM-sjabloon implementeert, moet u mogelijk parameterwaarden doorgeven. U kunt zowel inlineparameters als een parameterbestand gebruiken.

In de volgende oefening geeft u inlineparameters door aan uw implementatie. U moet de namen van de parameters opgeven, ongeacht of u inlineparameters of een parameterbestand gebruikt, met behulp van de az deployment group create opdracht.

  1. Met behulp van dezelfde sjabloon als de laatste oefening maakt u een variabele die de parameters in een JSON-tekenreeksindeling voor de vereiste sjabloonparameters bevat.

    Notitie

    In het volgende voorbeeld bevindt het sjabloonbestand zich in een json-map in het Windows Linux-subsysteem (WSL2). Pas uw opdracht aan op basis van de door u gekozen shell en het besturingssysteem.

    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"
    

    Nadat de bewerking is voltooid, moet u resultaten hebben die op het volgende voorbeeld lijken. Zie de "parameters" sectie en de "provisioningState" waarde om ervoor te zorgen dat de opdracht is geslaagd.

      {- Finished ..
        "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2-2020-08-19",      
        "location": null,
        "name": "DeployLocalTemplate-2-2020-08-19",
        "properties": {
          "correlationId": "edb2992e-08be-4ec2-940e-df23b1c09453",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.6990388S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-e692001a-b605-48d4-97bd-7c05669db9dd"
            }
          ],
          "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-e692001a-b605-48d4-97bd-7c05669db9dd",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

    In plaats van parameters als inlinewaarden in uw script door te geven, is het wellicht eenvoudiger om een JSON-bestand te gebruiken dat de parameterwaarden bevat. Het parameterbestand kan een lokaal bestand of een extern bestand met een toegankelijke URI zijn. Zie Een Resource Manager-parameterbestand maken voor meer informatie over het parameterbestand.

  2. Gebruik voor het doorgeven van een lokaal parameterbestand de parameter --parameters in dezelfde opdracht die eerder is gebruikt. Maar eerst moet u uw parameterbestand maken en opslaan.

    1. Omdat we Visual Studio Code gebruiken met de extensie Azure Resource Manager Tools, kunt u de ARM-sjabloon openen die u lokaal hebt opgeslagen en selecteert u het parameterbestand Selecteren of maken om een volledige validatiekoppeling in te schakelen.

    2. Selecteer Nieuw in het menu. De extensie maakt een parameterbestand op basis van de momenteel geopende sjabloon.

    Schermopname van selecties voor het maken van een parameterbestand in Visual Studio Code.

  3. Gebruik de volgende Azure CLI-opdracht met de parameter --parameters.

    Notitie

    In het volgende voorbeeld bevindt het sjabloonbestand zich in een json-map in het Windows Linux-subsysteem (WSL2). Pas uw opdracht aan op basis van de gekozen shell en het gekozen besturingssysteem.

    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
    

    Na de implementatie zien uw resultaten er als volgt uit.

      {- Finished ..
        "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
        "location": null,
        "name": "DeployLocalTemplate-3-2020-08-19",
        "properties": {
          "correlationId": "2a668f55-d8d0-48ac-862f-7170b48c02b6",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.2058912S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
            }
          ],
          "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-159e2742-d3a1-4e71-84a3-16e19830242b",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

Een externe sjabloon implementeren

In sommige gevallen moet u implementaties uitvoeren vanaf een externe locatie in plaats van een sjabloon op uw lokale computer. U kunt sjablonen opslaan in een opslagplaats voor broncodebeheer (zoals GitHub). U kunt de sjablonen ook opslaan in een Azure-opslagaccount voor gedeelde toegang in uw organisatie.

  1. Als u een externe sjabloon wilt implementeren, gebruikt u de --template-uri-parameter.

In deze oefening implementeert u een ARM-sjabloon vanuit een GitHub-opslagplaats. De opslagplaats is openbaar, zodat u zich geen zorgen hoeft te maken over het implementeren van een sjabloon waarvoor een SAS-token (Shared Access Signature) is vereist. Zie Persoonlijke sjabloon met SAS-token implementeren voor details over het gebruik van een persoonlijke of beveiligde locatie op afstand.

De sjabloon-URI voor de oefening is https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Het is een korte sjabloon waarmee een basisopslagaccount in uw sandbox-omgeving wordt geïmplementeerd.

  1. De Azure CLI-opdracht is exact gelijk aan die voor een lokale sjabloon. Het enige verschil is dat de parameter --template-uri de parameter --template-file vervangt.

  2. Gebruik de volgende code om implementaties uit te voeren in de beschikbare sandbox:

    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
    

    De resultaten zijn hetzelfde als het volgende codeblok. Deze bieden een overzicht van de sjabloonlocatie in het gedeelte "templateLink". Ze laten ook zien of de implementatie is geslaagd in de "provisioningState" sectie.

    {- Finished ..
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-4-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-4-2020-08-19",
      "properties": {
        "correlationId": "2ccc49de-9d46-4375-a25d-19ec10daf88b",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT24.3286124S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
          }
        ],
        "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-159e2742-d3a1-4e71-84a3-16e19830242b",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }