Ejercicio: Uso de copy para reducir la repetición

Completado

En este ejercicio final, seguirá trabajando con cuentas de almacenamiento. Esta vez, usa la construcción copy para aprovisionar varias cuentas de almacenamiento a partir de una misma definición.

La construcción Copy proporciona una única ubicación central que debe actualizar cuando cambien los requisitos.

Creación de la plantilla de Resource Manager

Aquí crearemos una plantilla de Azure Resource Manager (ARM) que define un recurso de la cuenta de almacenamiento. La plantilla usa copy para crear versiones similares del mismo recurso un determinado número de veces.

  1. En Visual Studio Code, cree un archivo llamado copy.json en el mismo directorio que contiene azuredeploy.json.

  2. Agregue este contenido 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": {}
    }
    

El parámetro storageCount define el número de copias que se van a crear.

En resources, anote el recurso de la cuenta de almacenamiento. Para que el nombre de la cuenta de almacenamiento sea único, la plantilla usa copyIndex() para anexar el índice actual al nombre de la cuenta de almacenamiento.

En la sección copy se lee el número de copias que se van a crear a partir del parámetro storageCount.

Implementación de la plantilla

En este caso, implemente la plantilla como lo hizo anteriormente. En el paso de implementación se aprovisionan dos cuentas de almacenamiento similares.

  1. Cree una variable de PowerShell que contenga el nombre de la cuenta de almacenamiento.

    $STORAGE_ACCT_NAME="tailwindsa" + (Get-Random -Count 1)
    
  2. Ejecute el comando New-AzResourceGroupDeployment siguiente para implementar la plantilla:

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

    En este caso, storageCount se establece en 2 para aprovisionar dos cuentas de almacenamiento.

Comprobar la implementación

Aunque la salida muestra que se crearon dos cuentas de almacenamiento, aquí se ejecuta el comando Get-AzResource para centrarse en los recursos de salida.

Ejecute el comando Get-AzResource siguiente para asegurarse de que se implementaron los recursos:

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

El argumento tailwindsa* especifica que solo se muestren los identificadores que coincidan con el prefijo de nombre que asignó a los recursos.

La salida será similar a esta:

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…

En este ejemplo:

  • tailwindsa185277781 es el nombre base que se generó para la cuenta de almacenamiento ("tailwindsa" + Get-Random -Count 1).
  • tailwindsa1852777810 (el nombre base más "0") es la primera cuenta de almacenamiento.
  • tailwindsa1852777811 (el nombre base más "1") es la segunda cuenta de almacenamiento.

¡Excelente trabajo! A medida que cambien sus necesidades, como el nivel de rendimiento que necesita, puede modificar las definiciones de recursos desde una sola ubicación.

Limpieza

El espacio aislado limpia los recursos automáticamente cuando haya terminado con este módulo.

Al trabajar en una suscripción propia, se recomienda identificar al final de un proyecto si aún necesita los recursos creados. Los recursos que dejas en ejecución pueden costar dinero. Puede eliminar los recursos de forma individual o eliminar el grupo de recursos para eliminar todo el conjunto de recursos.

Creación de la plantilla de Resource Manager

Aquí crearemos una plantilla de Azure Resource Manager (ARM) que define un recurso de la cuenta de almacenamiento. La plantilla usa copy para crear versiones similares del mismo recurso un determinado número de veces.

  1. En Visual Studio Code, cree un archivo llamado copy.json en el mismo directorio que contiene azuredeploy.json.

  2. Agregue este contenido 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": {}
    }
    

El parámetro storageCount define el número de copias que se van a crear.

En resources, anote el recurso de la cuenta de almacenamiento. Para que el nombre de la cuenta de almacenamiento sea único, la plantilla usa copyIndex() para anexar el índice actual al nombre de la cuenta de almacenamiento.

En la sección copy se lee el número de copias que se van a crear a partir del parámetro storageCount.

Implementación de la plantilla

En este caso, implemente la plantilla como lo hizo anteriormente. En el paso de implementación se aprovisionan dos cuentas de almacenamiento similares.

  1. Cree una variable de Bash que contenga el nombre de la cuenta de almacenamiento.

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    
  2. Ejecute el comando az deployment group create siguiente para implementar la plantilla:

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

    En este caso, storageCount se establece en 2 para aprovisionar dos cuentas de almacenamiento.

Comprobar la implementación

Aunque la salida muestra que se crearon dos cuentas de almacenamiento, aquí se ejecuta el comando az deployment group show para centrarse en los recursos de salida.

Ejecute el comando az deployment group show siguiente para mostrar los detalles de la implementación:

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

El argumento --query especifica que solo se muestren los identificadores de los recursos de salida.

La salida será similar a esta:

/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

En este ejemplo:

  • tailwindsa982 es el nombre base que se generó para la cuenta de almacenamiento (tailwindsa$RANDOM).
  • tailwindsa9820 (el nombre base más "0") es la primera cuenta de almacenamiento.
  • tailwindsa9821 (el nombre base más "1") es la segunda cuenta de almacenamiento.

¡Excelente trabajo! A medida que cambien sus necesidades, como el nivel de rendimiento que necesita, puede modificar las definiciones de recursos desde una sola ubicación.

Limpieza

El espacio aislado limpia los recursos automáticamente cuando haya terminado con este módulo.

Al trabajar en una suscripción propia, se recomienda identificar al final de un proyecto si aún necesita los recursos creados. Los recursos que dejas en ejecución pueden costar dinero. Puede eliminar los recursos de forma individual o eliminar el grupo de recursos para eliminar todo el conjunto de recursos.