Esercitazione: usare copy per ridurre la ripetizione

Completato

In questo esercizio finale si continuerà a lavorare con gli account di archiviazione. Questa volta si usa il costrutto copy per effettuare il provisioning di più account di archiviazione da una singola definizione.

Copy offre un'unica posizione centrale che è necessario aggiornare quando cambiano i requisiti.

Creare il modello di Resource Manager

In questo esercizio si crea un modello di Azure Resource Manager (ARM) che definisce una risorsa dell'account di archiviazione. Il modello usa copy per creare versioni simili della stessa risorsa un numero specificato di volte.

  1. In Visual Studio Code creare un file denominato copy.json nella stessa directory che contiene azuredeploy.json.

  2. Aggiungere questi contenuti a 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": {}
    }
    

Il parametro storageCount definisce il numero di copie da creare.

In resources prendere nota della risorsa dell'account di archiviazione. Per rendere univoco il nome dell'account di archiviazione, il modello usa copyIndex() per aggiungere l'indice corrente al nome dell'account di archiviazione.

La sezione copy legge il numero di copie da creare dal parametro storageCount.

Distribuire il modello

Il modello può essere distribuito come in precedenza. Il passaggio di distribuzione effettua il provisioning di due account di archiviazione simili.

  1. Creare una variabile di PowerShell che contenga il nome dell'account di archiviazione.

    $STORAGE_ACCT_NAME="tailwindsa" + (Get-Random -Count 1)
    
  2. Per distribuire il modello, eseguire il seguente comando New-AzResourceGroupDeployment:

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

    In questo caso si imposta storageCount su 2 per effettuare il provisioning di due account di archiviazione.

Verificare la distribuzione

Anche se l'output indica che sono stati creati due account di archiviazione, si esegue il comando Get-AzResource per concentrarsi sulle risorse di output.

Eseguire il seguente comando Get-AzResource per verificare che le risorse siano state distribuite:

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

L'argomento tailwindsa* specifica di visualizzare solo gli identificatori corrispondenti al prefisso del nome assegnato alle risorse.

L'output è simile al seguente:

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…

In questo esempio:

  • tailwindsa185277781 è il nome di base generato per l'account di archiviazione ("tailwindsa" + Get-Random -Count 1).
  • tailwindsa1852777810 (il nome di base più "0") è il primo account di archiviazione.
  • tailwindsa1852777811 (il nome di base più "1") è il secondo account di archiviazione.

Ottimo lavoro! Poiché le esigenze cambiano, ad esempio il livello di prestazioni necessario, è possibile modificare le definizioni delle risorse da un'unica posizione.

Eseguire la pulizia

La sandbox esegue automaticamente la pulizia delle risorse al termine di questo modulo.

Quando si lavora nella propria sottoscrizione, al termine di un progetto è buona norma determinare se le risorse create sono ancora necessarie. Le risorse che rimangono in esecuzione hanno un costo. È possibile eliminare risorse singole oppure gruppi di risorse per eliminare l'intero set di risorse.

Creare il modello di Resource Manager

In questo esercizio si crea un modello di Azure Resource Manager (ARM) che definisce una risorsa dell'account di archiviazione. Il modello usa copy per creare versioni simili della stessa risorsa un numero specificato di volte.

  1. In Visual Studio Code creare un file denominato copy.json nella stessa directory che contiene azuredeploy.json.

  2. Aggiungere questi contenuti a 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": {}
    }
    

Il parametro storageCount definisce il numero di copie da creare.

In resources prendere nota della risorsa dell'account di archiviazione. Per rendere univoco il nome dell'account di archiviazione, il modello usa copyIndex() per aggiungere l'indice corrente al nome dell'account di archiviazione.

La sezione copy legge il numero di copie da creare dal parametro storageCount.

Distribuire il modello

Il modello può essere distribuito come in precedenza. Il passaggio di distribuzione effettua il provisioning di due account di archiviazione simili.

  1. Creare una variabile Bash che contenga il nome dell'account di archiviazione.

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    
  2. Per distribuire il modello, eseguire il seguente comando az deployment group create:

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

    In questo caso si imposta storageCount su 2 per effettuare il provisioning di due account di archiviazione.

Verificare la distribuzione

Anche se l'output indica che sono stati creati due account di archiviazione, si esegue il comando az deployment group show per concentrarsi sulle risorse di output.

Eseguire il seguente comando az deployment group show per visualizzare i dettagli relativi alla distribuzione:

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

L'argomento --query specifica di visualizzare solo gli identificatori delle risorse di output.

L'output è simile al seguente:

/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>resource group name</rgn>/providers/Microsoft.Storage/storageAccounts/tailwindsa9820
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>resource group name</rgn>/providers/Microsoft.Storage/storageAccounts/tailwindsa9821

In questo esempio:

  • tailwindsa982 è il nome di base generato per l'account di archiviazione (tailwindsa$RANDOM).
  • tailwindsa9820 (il nome di base più "0") è il primo account di archiviazione.
  • tailwindsa9821 (il nome di base più "1") è il secondo account di archiviazione.

Ottimo lavoro! Poiché le esigenze cambiano, ad esempio il livello di prestazioni necessario, è possibile modificare le definizioni delle risorse da un'unica posizione.

Eseguire la pulizia

La sandbox esegue automaticamente la pulizia delle risorse al termine di questo modulo.

Quando si lavora nella propria sottoscrizione, al termine di un progetto è buona norma determinare se le risorse create sono ancora necessarie. Le risorse che rimangono in esecuzione hanno un costo. È possibile eliminare risorse singole oppure gruppi di risorse per eliminare l'intero set di risorse.