Övning – Använda copy till att undvika repetitioner

Slutförd

I den här sista övningen ska du fortsätta att arbeta med lagringskonton. Den här gången använder du copy-konstruktionen till att etablera flera lagringskonton från en enda definition.

Med Copy behöver du bara uppdatera en enda central plats när behoven ändras.

Skapa ARM-mallen

Här skapar du en ARM-mall (Azure Resource Manager) som definierar en lagringskontoresurs. I mallen används copy till att skapa liknande versioner av samma resurs ett angivet antal gånger.

  1. Skapa en fil i Visual Studio Code med namnet copy.json i samma katalog som azuredeploy.json.

  2. Lägg till följande innehåll i copy.json:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageCount": {
          "type": "int",
          "defaultValue": 1,
          "metadata": {
            "description": "the number of storage accounts copies being deployed"
          }
        },
        "storageAccountName": {
          "type": "string",
          "defaultValue": "storage",
          "metadata": {
            "description": "the name of the storage account"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[concat(parameters('storageAccountName'), copyIndex())]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "storageaccount1"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Premium_LRS",
            "tier": "Premium"
          },
          "copy": {
            "name": "storagecopy",
            "count": "[parameters('storageCount')]"
          }
        }
      ],
      "outputs": {}
    }
    

Parametern storageCount definierar hur många kopior som ska skapas.

Notera lagringskontoresursen under resources. För att göra namnet på lagringskontot unikt använder mallen copyIndex() för att lägga till det aktuella indexet i namnet på lagringskontot.

copy-avsnittet läser av hur många kopior som ska skapas från parametern storageCount.

Distribuera mallen

Här distribuerar du mallen på samma sätt som tidigare. Distributionssteget etablerar två liknande lagringskonton.

  1. Skapa en PowerShell-variabel för namnet på lagringskontot.

    $STORAGE_ACCT_NAME="tailwindsa" + (Get-Random -Count 1)
    
  2. Distribuera mallen med följande New-AzResourceGroupDeployment-kommando:

    New-AzResourceGroupDeployment `
    -TemplateFile "./copy.json" `
    -storageAccountName $STORAGE_ACCT_NAME `
    -storageCount 2
    

    Här ställer du in storageCount2 för att etablera två lagringskonton.

Verifiera distributionen

Även om utdata visar att två lagringskonton har skapats så kör du kommandot Get-AzResource för att fokusera på resurserna.

Kör följande Get-AzResource-kommando för att kontrollera att resurserna har distribuerats:

Get-AzResource -Name tailwindsa* -ResourceGroupName <rgn>resource group name</rgn> | Select-Object -Property Name,ResourceId

Argumentet tailwindsa* anger att du bara vill se de ID:n som matchar resursernas namnprefix.

Ditt resultat ser ut ungefär så här:

Name                 ResourceId
----                 ----------
tailwindsa1852777810 /subscriptions/11112222-3333-4444-5555-1111222233334444/resourceGroups/<rgn>resoure group</rgn>/providers/Microsoft.Storage/storageAccount…
tailwindsa1852777811 /subscriptions/11112222-3333-4444-5555-1111222233334444/resourceGroups/<rgn>resoure group</rgn>/providers/Microsoft.Storage/storageAccount…

I det här exemplet:

  • tailwindsa185277781 är basnamnet som genererades för lagringskontot ("tailwindsa" + Get-Random -Count 1).
  • tailwindsa1852777810 (basnamnet plus 0) är det första lagringskontot.
  • tailwindsa1852777811 (basnamnet plus 1) är det andra lagringskontot.

Bra jobbat! När dina behov ändras, till exempel den prestandanivå du behöver, kan du ändra resursdefinitionerna från en och samma plats.

Rensa

Sandbox-miljön rensar automatiskt resurserna när du är klar med den här modulen.

När du arbetar i din egen prenumeration kan det dock vara klokt att i slutet av ett projekt kontrollera om du fortfarande behöver de resurser som du skapade. Resurser som du lämnar igång kan kosta pengar. Du kan ta bort enstaka resurser eller hela resursgruppen om du vill ta bort alla resurser.

Skapa ARM-mallen

Här skapar du en ARM-mall (Azure Resource Manager) som definierar en lagringskontoresurs. I mallen används copy till att skapa liknande versioner av samma resurs ett angivet antal gånger.

  1. Skapa en fil i Visual Studio Code med namnet copy.json i samma katalog som azuredeploy.json.

  2. Lägg till följande innehåll i copy.json:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageCount": {
          "type": "int",
          "defaultValue": 1,
          "metadata": {
            "description": "the number of storage accounts being deployed"
          }
        },
        "storageAccountName": {
          "type": "string",
          "defaultValue": "storage",
          "metadata": {
            "description": "the name of the storage account"
          }
        }
      },
      "functions": [],
      "variables": {},
      "resources": [
        {
          "name": "[concat(parameters('storageAccountName'), copyIndex())]",
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2019-06-01",
          "tags": {
            "displayName": "storageaccount1"
          },
          "location": "[resourceGroup().location]",
          "kind": "StorageV2",
          "sku": {
            "name": "Premium_LRS",
            "tier": "Premium"
          },
          "copy": {
            "name": "storagecopy",
            "count": "[parameters('storageCount')]"
          }
        }
      ],
      "outputs": {}
    }
    

Parametern storageCount definierar hur många kopior som ska skapas.

Notera lagringskontoresursen under resources. För att göra namnet på lagringskontot unikt använder mallen copyIndex() för att lägga till det aktuella indexet i namnet på lagringskontot.

copy-avsnittet läser av hur många kopior som ska skapas från parametern storageCount.

Distribuera mallen

Här distribuerar du mallen på samma sätt som tidigare. Distributionssteget etablerar två liknande lagringskonton.

  1. Skapa en Bash-variabel för namnet på lagringskontot.

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    
  2. Distribuera mallen med följande az deployment group create-kommando:

    az deployment group create \
      --template-file copy.json \
      --parameters storageAccountName=$STORAGE_ACCT_NAME storageCount=2
    

    Här ställer du in storageCount2 för att etablera två lagringskonton.

Verifiera distributionen

Även om utdata visar att två lagringskonton har skapats så kör du kommandot az deployment group show för att fokusera på resurserna.

Kör följande az deployment group show-kommando för att visa information om distributionen:

az deployment group show \
  --name copy \
  --query "properties.outputResources[].id" \
  --output tsv

Argumentet --query anger att du bara vill se ID:n för de resurser som har skapats.

Ditt resultat ser ut ungefär så här:

/subscriptions/4b328dc1-56b1-4031-89b0-c0898204f8a5/resourceGroups/<rgn>resource group name</rgn>/providers/Microsoft.Storage/storageAccounts/tailwindsa9820
/subscriptions/4b328dc1-56b1-4031-89b0-c0898204f8a5/resourceGroups/<rgn>resource group name</rgn>/providers/Microsoft.Storage/storageAccounts/tailwindsa9821

I det här exemplet:

  • tailwindsa982 är basnamnet som genererades för lagringskontot (tailwindsa$RANDOM).
  • tailwindsa9820 (basnamnet plus 0) är det första lagringskontot.
  • tailwindsa9821 (basnamnet plus 1) är det andra lagringskontot.

Bra jobbat! När dina behov ändras, till exempel den prestandanivå du behöver, kan du ändra resursdefinitionerna från en och samma plats.

Rensa

Sandbox-miljön rensar automatiskt resurserna när du är klar med den här modulen.

När du arbetar i din egen prenumeration kan det dock vara klokt att i slutet av ett projekt kontrollera om du fortfarande behöver de resurser som du skapade. Resurser som du lämnar igång kan kosta pengar. Du kan ta bort enstaka resurser eller hela resursgruppen om du vill ta bort alla resurser.