Exercício — Usar copy para reduzir a repetição

Concluído

Neste exercício final, você continuará a trabalhar com contas de armazenamento. Desta vez, você usará o constructo copy para provisionar várias contas de armazenamento com base em uma só definição.

O Copy oferece um só local central que você precisará atualizar quando seus requisitos forem alterados.

Criar um modelo do ARM

Aqui, você criará um modelo do ARM (Azure Resource Manager) que define um recurso de conta de armazenamento. O modelo usa copy para criar versões semelhantes do mesmo recurso um número especificado de vezes.

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

  2. Adicione este conteúdo 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 serem criadas.

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

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

Implantar o modelo

Aqui, você implanta o modelo como fez anteriormente. A etapa de implantação provisiona duas contas de armazenamento semelhantes.

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

    $STORAGE_ACCT_NAME="tailwindsa" + (Get-Random -Count 1)
    
  2. Execute o seguinte comando New-AzResourceGroupDeployment para implantar o modelo:

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

    Aqui, você define storageCount como 2 para provisionar duas contas de armazenamento.

Verificar a implantação

Embora a saída mostre que duas contas de armazenamento foram criadas, aqui você executa o comando Get-AzResource para se concentrar nos recursos de saída.

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

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

O argumento tailwindsa* especifica que serão mostrados apenas os identificadores que correspondem ao prefixo do nome que você forneceu aos recursos.

A saída será semelhante 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…

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.

Ótimo trabalho! Conforme suas necessidades mudam, como o nível de desempenho de que você precisa, é possível modificar suas definições de recursos em um único local.

Limpar

A área restrita limpará automaticamente seus recursos quando você concluir este módulo.

Quando já estiver trabalhando na sua assinatura, analise se você ainda precisa dos recursos criados no fim de um projeto. Os recursos que você deixa em execução podem lhe custar dinheiro. Você pode excluir os recursos individualmente ou excluir o grupo de recursos para excluir todo o conjunto de recursos.

Criar um modelo do ARM

Aqui, você criará um modelo do ARM (Azure Resource Manager) que define um recurso de conta de armazenamento. O modelo usa copy para criar versões semelhantes do mesmo recurso um número especificado de vezes.

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

  2. Adicione este conteúdo 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 serem criadas.

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

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

Implantar o modelo

Aqui, você implanta o modelo como fez anteriormente. A etapa de implantação provisiona duas contas de armazenamento semelhantes.

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

    STORAGE_ACCT_NAME=tailwindsa$RANDOM
    
  2. Execute o seguinte comando az deployment group create para implantar o modelo:

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

    Aqui, você define storageCount como 2 para provisionar duas contas de armazenamento.

Verificar a implantação

Embora a saída mostre que duas contas de armazenamento foram criadas, aqui você executa o comando az deployment group show para se concentrar nos recursos de saída.

Execute o seguinte comando az deployment group show para exibir detalhes sobre a implantação:

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

O argumento --query especifica que serão mostrados apenas os identificadores dos recursos de saída.

A saída será semelhante 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

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.

Ótimo trabalho! Conforme suas necessidades mudam, como o nível de desempenho de que você precisa, é possível modificar suas definições de recursos em um único local.

Limpar

A área restrita limpará automaticamente seus recursos quando você concluir este módulo.

Quando já estiver trabalhando na sua assinatura, analise se você ainda precisa dos recursos criados no fim de um projeto. Os recursos que você deixa em execução podem lhe custar dinheiro. Você pode excluir os recursos individualmente ou excluir o grupo de recursos para excluir todo o conjunto de recursos.