Implementar recursos com modelos ARM e AZure Resource Manager REST API

Este artigo explica como usar o API rest gestor de recursos Azure com modelos Azure Resource Manager (modelos ARM) para implantar os seus recursos para o Azure.

Pode incluir o seu modelo no corpo de pedido ou ligar-se a um ficheiro. Ao utilizar um ficheiro, pode ser um ficheiro local ou um ficheiro externo que esteja disponível através de um URI. Quando o seu modelo estiver numa conta de armazenamento, pode restringir o acesso ao modelo e fornecer um sinal de assinatura de acesso partilhado (SAS) durante a implementação.

Âmbito de implantação

Pode direcionar a sua implementação para um grupo de recursos, subscrição Azure, grupo de gestão ou inquilino. Dependendo do alcance da implantação, utiliza-se diferentes comandos.

Os exemplos deste artigo utilizam implementações de grupos de recursos.

Implementar com a API REST

  1. Desacorda os parâmetros e cabeçalhos comuns,incluindo fichas de autenticação.

  2. Se estiver a implantar para um grupo de recursos que não existe, crie o grupo de recursos. Forneça o seu ID de subscrição, o nome do novo grupo de recursos e a localização que necessita para a sua solução. Para obter mais informações, consulte Criar um grupo de recursos.

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>?api-version=2020-06-01
    

    Com um corpo de pedido como:

    {
     "location": "West US",
     "tags": {
       "tagname1": "tagvalue1"
     }
    }
    
  3. Antes de implementar o seu modelo, pode visualizar as alterações que o modelo irá fazer para o seu ambiente. Utilize a operação "e se" para verificar se o modelo faz as alterações que espera. E se também valida o modelo para erros.

  4. Para implementar um modelo, forneça o seu ID de subscrição, o nome do grupo de recursos, o nome da implementação no URI de pedido.

    PUT https://management.azure.com/subscriptions/<YourSubscriptionId>/resourcegroups/<YourResourceGroupName>/providers/Microsoft.Resources/deployments/<YourDeploymentName>?api-version=2020-10-01
    

    No corpo de pedido, forneça um link para o seu modelo e arquivo de parâmetros. Para obter mais informações sobre o ficheiro de parâmetros, veja Criar ficheiro de parâmetros do Resource Manager.

    Note que o mode é definido para Incremental. Para executar uma implementação completa, definir mode para completar. Tenha cuidado ao utilizar o modo completo, pois pode eliminar inadvertidamente recursos que não estão no seu modelo.

    {
     "properties": {
       "templateLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
         "contentVersion": "1.0.0.0"
       },
       "parametersLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
         "contentVersion": "1.0.0.0"
       },
       "mode": "Incremental"
     }
    }
    

    Se pretender registar o conteúdo da resposta, solicite conteúdo, ou ambos, inclua debugSetting no pedido.

    {
     "properties": {
       "templateLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/template.json",
         "contentVersion": "1.0.0.0"
       },
       "parametersLink": {
         "uri": "http://mystorageaccount.blob.core.windows.net/templates/parameters.json",
         "contentVersion": "1.0.0.0"
       },
       "mode": "Incremental",
       "debugSetting": {
         "detailLevel": "requestContent, responseContent"
       }
     }
    }
    

    Pode configurar a sua conta de armazenamento para utilizar um token de assinatura de acesso partilhado (SAS). Para mais informações, consulte o Acesso do Delegado com uma assinatura de acesso partilhado.

    Se precisar de fornecer um valor sensível para um parâmetro (como uma palavra-passe), adicione esse valor a um cofre de chaves. Recupere o cofre da chave durante a colocação, como mostra o exemplo anterior. Para obter mais informações, consulte use Azure Key Vault para passar o valor do parâmetro seguro durante a implementação.

  5. Em vez de ligar aos ficheiros para o modelo e parâmetros, pode incluí-los no corpo de pedido. O exemplo a seguir mostra o corpo de pedido com o modelo e o parâmetro inline:

    {
       "properties": {
       "mode": "Incremental",
       "template": {
         "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
         "contentVersion": "1.0.0.0",
         "parameters": {
           "storageAccountType": {
             "type": "string",
             "defaultValue": "Standard_LRS",
             "allowedValues": [
               "Standard_LRS",
               "Standard_GRS",
               "Standard_ZRS",
               "Premium_LRS"
             ],
             "metadata": {
               "description": "Storage Account type"
             }
           },
           "location": {
             "type": "string",
             "defaultValue": "[resourceGroup().location]",
             "metadata": {
               "description": "Location for all resources."
             }
           }
         },
         "variables": {
           "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'standardsa')]"
         },
         "resources": [
           {
             "type": "Microsoft.Storage/storageAccounts",
             "apiVersion": "2018-02-01",
             "name": "[variables('storageAccountName')]",
             "location": "[parameters('location')]",
             "sku": {
               "name": "[parameters('storageAccountType')]"
             },
             "kind": "StorageV2",
             "properties": {}
           }
         ],
         "outputs": {
           "storageAccountName": {
             "type": "string",
             "value": "[variables('storageAccountName')]"
           }
         }
       },
       "parameters": {
         "location": {
           "value": "eastus2"
         }
       }
     }
    }
    
  6. Para obter o estado da implementação do modelo, use Implementações - Obtenha.

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}?api-version=2020-10-01
    

Nome de implantação

Pode dar à sua implantação um nome como ExampleDeployment .

Sempre que executa uma implantação, uma entrada é adicionada ao histórico de implantação do grupo de recursos com o nome de implantação. Se executar outra implantação e lhe der o mesmo nome, a entrada anterior é substituída pela implementação atual. Se pretender manter entradas únicas no histórico de implantação, dê a cada implementação um nome único.

Para criar um nome único, pode atribuir um número aleatório. Ou adicionar um valor de data.

Se executar implementações simultâneas para o mesmo grupo de recursos com o mesmo nome de implantação, apenas a última implementação é concluída. Quaisquer implementações com o mesmo nome que não tenham terminado são substituídas pela última implantação. Por exemplo, se executar uma implantação com o nome newStorage de uma conta de armazenamento chamada , e ao mesmo tempo executar outra storage1 implantação com o nome de uma newStorage conta de armazenamento chamada , implementa storage2 apenas uma conta de armazenamento. A conta de armazenamento resultante é storage2 nomeada.

No entanto, se executar uma implantação com o nome newStorage de uma conta de armazenamento chamada , e imediatamente após a sua storage1 conclusão, executar outra implantação com o nome newStorage de uma conta de armazenamento chamada , storage2 então tem duas contas de armazenamento. Um tem o nome storage1 , e o outro chama-se storage2 . Mas só tens uma entrada na história da implantação.

Quando especificar um nome único para cada implantação, pode executá-los simultaneamente sem conflitos. Se executar uma implantação com o nome newStorage1 de uma conta de armazenamento chamada , e ao mesmo tempo executar outra storage1 implantação com o nome de uma newStorage2 conta de armazenamento , storage2 então tem duas contas de armazenamento e duas entradas no histórico de implantação.

Para evitar conflitos com implementações simultâneas e para garantir entradas únicas no histórico de implantação, dê a cada implementação um nome único.

Passos seguintes