Exercício – Utilizar copy para reduzir a repetição

Concluído

Neste exercício final, vai continuar a trabalhar com contas de armazenamento. Desta vez, vai utilizar a construção copy para aprovisionar várias contas de armazenamento numa única definição.

A construção Copy proporciona-lhe uma única localização central que precisa de atualizar quando os requisitos mudam.

Criar o modelo ARM

Agora, irá criar um modelo do Azure Resource Manager (ARM) que define um recurso da conta de armazenamento. O modelo utiliza copy para criar versões semelhantes do mesmo recurso um determinado número de vezes.

  1. No Visual Studio Code, crie um ficheiro chamado copy.json no mesmo diretório que contém azuredeploy.json.

  2. Adicione estes conteúdos ao 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": {}
    }
    

O parâmetro storageCount define o número de cópias a criar.

Em resources, observe o recurso da conta de armazenamento. Para tornar o nome da conta de armazenamento exclusivo, o modelo utiliza copyIndex() para acrescentar o índice atual ao nome da conta de armazenamento.

A secção copy lê o número de cópias a serem feitas a partir do parâmetro storageCount.

Implementar o modelo

Vai agora implementar o modelo como fez anteriormente. O passo de implementação aprovisiona duas contas de armazenamento semelhantes.

  1. Crie uma variável do PowerShell com o nome da conta de armazenamento.

    $STORAGE_ACCT_NAME="tailwindsa" + (Get-Random -Count 1)
    
  2. Para implementar o modelo, execute o seguinte comando New-AzResourceGroupDeployment:

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

    Agora, vai definir storageCount como 2 para aprovisionar duas contas de armazenamento.

Verificar a implementação

Embora a saída mostre que foram criadas duas contas de armazenamento, vai executar o comando Get-AzResource para se centrar nos recursos de saída.

Execute o seguinte comando Get-AzResource para garantir que os recursos foram implementados:

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

O argumento tailwindsa* especifica para mostrar apenas os identificadores que correspondem ao prefixo do nome deu os recursos.

A saída é semelhante ao seguinte:

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…

Neste exemplo:

  • tailwindsa185277781 é o nome base que foi gerado para a conta de armazenamento ("tailwindsa" + Get-Random -Count 1).
  • tailwindsa1852777810 (o nome base mais “0”) é a primeira conta de armazenamento.
  • tailwindsa1852777811 (o nome base mais “1”) é a segunda conta de armazenamento.

Bom trabalho! À medida que as suas necessidades mudam, como o escalão de desempenho necessário, pode modificar as definições dos recursos numa única localização.

Limpeza

O sandbox limpará automaticamente os seus recursos quando concluir este módulo.

Ao trabalhar na sua própria subscrição, recomendamos que verifique, depois de concluir um projeto, se ainda vai precisar dos recursos que criou. Os recursos que você deixa funcionando podem custar dinheiro. Pode eliminar recursos individualmente ou eliminar o grupo de recursos para eliminar todo o conjunto de recursos.

Criar o modelo ARM

Agora, irá criar um modelo do Azure Resource Manager (ARM) que define um recurso da conta de armazenamento. O modelo utiliza copy para criar versões semelhantes do mesmo recurso um determinado número de vezes.

  1. No Visual Studio Code, crie um ficheiro chamado copy.json no mesmo diretório que contém azuredeploy.json.

  2. Adicione estes conteúdos ao 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": {}
    }
    

O parâmetro storageCount define o número de cópias a criar.

Em resources, observe o recurso da conta de armazenamento. Para tornar o nome da conta de armazenamento exclusivo, o modelo utiliza copyIndex() para acrescentar o índice atual ao nome da conta de armazenamento.

A secção copy lê o número de cópias a serem feitas a partir do parâmetro storageCount.

Implementar o modelo

Vai agora implementar o modelo como fez anteriormente. O passo de implementação aprovisiona duas contas de armazenamento semelhantes.

  1. Crie uma variável Bash com o nome da conta de armazenamento.

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    
  2. Para implementar o modelo, execute o seguinte comando az deployment group create:

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

    Agora, vai definir storageCount como 2 para aprovisionar duas contas de armazenamento.

Verificar a implementação

Embora a saída mostre que foram criadas duas contas de armazenamento, vai executar o comando az deployment group show para se centrar nos recursos de saída.

Execute o seguinte comando az deployment group show para apresentar os detalhes sobre a implementação:

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

O argumento --query especifica para mostrar apenas os identificadores dos recursos de saída.

A saída é semelhante ao seguinte:

/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

Neste exemplo:

  • tailwindsa982 é o nome base que foi gerado para a conta de armazenamento (tailwindsa$RANDOM).
  • tailwindsa9820 (o nome base mais “0”) é a primeira conta de armazenamento.
  • tailwindsa9821 (o nome base mais “1”) é a segunda conta de armazenamento.

Bom trabalho! À medida que as suas necessidades mudam, como o escalão de desempenho necessário, pode modificar as definições dos recursos numa única localização.

Limpeza

O sandbox limpará automaticamente os seus recursos quando concluir este módulo.

Ao trabalhar na sua própria subscrição, recomendamos que verifique, depois de concluir um projeto, se ainda vai precisar dos recursos que criou. Os recursos que você deixa funcionando podem custar dinheiro. Pode eliminar recursos individualmente ou eliminar o grupo de recursos para eliminar todo o conjunto de recursos.