Manter várias implantações do Azure usando arquivos de parâmetro e marcas de modelo do Azure Resource Manager

Concluído

Há dois recursos dos modelos ARM (Azure Resource Manager) que você deseja usar ao implantar em mais de um ambiente do Azure. Esses recursos são as marcas de recurso e os arquivos de parâmetro de modelo ARM.

Ao adicionar mais recursos aos seus ambientes, você vê rapidamente que precisa de uma forma de identificar a finalidade desses recursos. Os recursos têm um atributo tags: para esse fim. À medida que você implanta em mais ambientes, precisa de uma forma eficiente de controlar os parâmetros de entrada. Os modelos ARM podem usar arquivos de parâmetro para gerenciar parâmetros para cada ambiente de implantação.

O que é uma marca de recurso do Azure?

Você marca os recursos para adicionar valores que ajudam a identificar o uso deles. Por exemplo, você pode adicionar marcas que listam o ambiente e o projeto aos quais um recurso pertence. Ou então, você pode adicionar marcas que identificam um centro de custo ou a equipe proprietária de determinado recurso. Adicione valores que façam sentido para sua organização.

Um valor de marca é exibido na página de visão geral para o recurso do Azure e em relatórios de custo.

Como criar uma marca de recurso do Azure?

Cada recurso tem um atributo tags:. Até agora, você esteve usando o padrão displayName para a marca da sua conta de armazenamento:

"tags": {
          "displayName": "[parameters('storageName')]"
        },

Para tornar esse atributo mais útil, você pode definir um parâmetro que tenha mais informações e, em seguida, usar esse parâmetro no atributo tags:. Por exemplo, você pode criar um parâmetro para conter um objeto chamado resourceTags:

"resourceTags": {
    "type": "object",
    "defaultValue": {
        "Environment": "Dev",
        "Project": "Inventory"
        }
    }

Aqui, você criou um objeto para conter valores para um nome de ambiente e um nome de projeto, mas pode definir o que quiser.

Em seguida, você pode usar esse parâmetro para qualquer recurso que seja para o ambiente de desenvolvimento e para o projeto Inventory. Por exemplo, sua conta de armazenamento.

"resources": [{
        "name": "[variables('uniqueStorageName')]",
        "type": "Microsoft.Storage/storageAccounts",
        "apiVersion": "2019-06-01",
        "tags": "[parameters('resourceTags')]",
        ...
    }],

O que é um arquivo de parâmetro de modelo ARM?

Um arquivo de parâmetro de modelo do ARM contém valores que são passados para esse modelo quando o modelo for executado. Ao usar um arquivo de parâmetro para cada ambiente em que um modelo ARM é implantado, garanta que os parâmetros corretos sejam definidos para esse ambiente específico. Você também garante que seja possível acompanhar o histórico e a manutenção desses valores de parâmetro no controle do código-fonte.

Como fazer para usar arquivos de parâmetro de modelo ARM?

Os arquivos de parâmetro de modelo ARM são arquivos JSON que contêm valores de parâmetro. Por exemplo, para os parâmetros que você usou no modelo ARM até agora, é possível criar um arquivo de parâmetro de modelo como o seguinte:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "storagePrefix": {
        "value": "storage"
      },
      "storageSKU": {
        "value": "Standard_LRS"
      },
      "resourceTags": {
        "value": {
          "Environment": "Dev",
          "Project": "Learn"
        }
      }
    }
  }

Em seguida, é possível criar um arquivo semelhante a esse para cada ambiente. Por exemplo, esses arquivos podem ser chamados azuredeploy.parameters.dev.json e azuredeploy.parameters.prod.json e manter valores diferentes para os parâmetros.

Para implantar um modelo ARM usando um arquivo de parâmetro, especifique o caminho para o arquivo de parâmetro no comando de implantação. Na CLI do Azure, você usa --parameters {path to parameter file}. No PowerShell, você usa -TemplateParameterFile {path to parameter file}.

templateFile="{path-to-the-template-file}"
devParameterFile="{path-to-azuredeploy.parameters.dev.json}"
az group create \
  --name myResourceGroupDev \
  --location "East US"
az deployment group create \
  --name devenvironment \
  --resource-group myResourceGroupDev \
  --template-file $templateFile \
  --parameters $devParameterFile