Implantar um fluxo de trabalho dos Aplicativos Lógicos do Azure usando um modelo do Azure Resource Manager

Concluído

Se você já usa o Azure há algum tempo, você provavelmente já ouviu falar sobre o Azure Resource Manager. Examinaremos a função do Resource Manager e definiremos o que constitui um modelo do Resource Manager.

O que é o Azure Resource Manager?

O Azure Resource Manager é a interface para gerenciar e organizar recursos de nuvem. Considere o Resource Manager como uma maneira de implantar recursos de nuvem.

Se está familiarizado com grupos de recursos do Azure, você sabe que eles permitem que você trate conjuntos de recursos relacionados como uma única unidade. O Azure Resource Manager é o que organiza os grupos de recursos que permitem que você implante, gerencie e exclua todos os recursos juntos em uma única ação.

Pense sobre os modelos financeiros que você executa para os analistas. Para executar um modelo, talvez sejam necessários uma ou mais VMs, um banco de dados para armazenar dados e uma rede virtual para habilitar a conectividade entre tudo. Com o Resource Manager, você implanta esses ativos no mesmo grupo de recursos e os gerencia e monitora juntos. Quando você terminar, você pode excluir todos os recursos em um grupo de recursos em uma única operação.

O que são modelos do Resource Manager?

Um modelo do Resource Manager define precisamente todos os recursos do Resource Manager em uma implantação. Você pode implantar um modelo do Resource Manager em um grupo de recursos como uma única operação.

Um modelo do Resource Manager é um arquivo JSON, ou seja, uma forma de automação declarativa. A automação declarativa significa que você define quais recursos precisa, mas não como criá-los. Em outras palavras, você define o que precisa e o Resource Manager garante que os recursos sejam implantados corretamente.

Você pode pensar na automação declarativa de modo semelhante a como os navegadores da Web exibem arquivos HTML. O arquivo HTML descreve quais elementos aparecem na página, mas não como para exibi-los. O "como" é responsabilidade do navegador da Web.

Observação

Você pode ouvir algumas pessoas se referirem aos modelos do Resource Manager como modelos do ARM. Preferimos os nomes completos modelos do Azure Resource Manager ou modelos do Resource Manager.

Por que usar modelos do Resource Manager?

O uso de modelos do Resource Manager torna suas implantações mais rápidas e mais repetíveis. Por exemplo, você não precisa mais criar uma VM no portal, aguardar ela terminar, depois criar a próxima VM e assim por diante. O Resource Manager cuida de toda a implantação para você.

Confira alguns outros benefícios a serem considerados:

  • Os modelos aprimoram a consistência.

    Os modelos do Resource Manager fornecem uma linguagem comum para você e outras pessoas descreverem suas implantações. Independentemente da ferramenta ou SDK usado para implantar o modelo, a estrutura, o formato e as expressões dentro desse modelo permanecem os mesmos.

  • Os modelos ajudam a exibir implantações complexas.

    Os modelos permitem que você implante vários recursos na ordem correta. Por exemplo, não convém que você implante uma máquina virtual antes de criar o adaptador de rede ou disco de sistema operacional. O Resource Manager mapeia cada recurso e seus recursos dependentes e cria os recursos dependentes primeiro. O mapeamento de dependências ajuda a garantir que a implantação seja executada na ordem correta.

  • Os modelos reduzem tarefas manuais e propensas a erros.

    Criar e conectar recursos manualmente podem ser tarefas demoradas e é fácil cometer erros no decorrer delas. O Resource Manager garante que as implantações ocorram da mesma maneira todas as vezes.

  • Os modelos são códigos.

    Os modelos expressam suas necessidades por meio de código. Pense em um modelo como um tipo de infraestrutura como código que pode ser compartilhada, testada e submetida a controle de versão como qualquer outro software. Além disso, já que os modelos são código, você pode criar uma "trilha de papel" que você pode seguir. O código de modelo documenta a implantação. A maioria dos usuários mantêm seus modelos sob algum tipo de controle de revisão, como o Git. Quando você altera o modelo, seu histórico de revisão documenta o modo como o modelo (e sua implantação) evoluíram ao longo do tempo.

  • Os modelos promovem a reutilização.

    O modelo pode conter parâmetros que são preenchidos quando o modelo é executado. Um parâmetro pode definir um nome de usuário ou senha, um nome de domínio e assim por diante. Os parâmetros de modelo permitem que você crie várias versões da infraestrutura, como preparo e produção, mas ainda utilize exatamente o mesmo modelo.

  • Os modelos são vinculáveis.

    É possível vincular modelos do Resource Manager para torná-los modulares. Você pode escrever modelos pequenos que definem uma parte de uma solução e combiná-los para criar um sistema completo.

Os modelos executados pelos seus analistas financeiros são exclusivos, mas você vê padrões na infraestrutura subjacente. Por exemplo, a maioria dos modelos exige um banco de dados para armazenar dados. Muitos modelos usam as mesmas linguagens de programação, estruturas e sistemas operacionais para cuidar dos detalhes. Você pode definir modelos que descrevem cada componente individual, como computação, armazenamento e rede. Depois, você pode combinar os componentes para atender às necessidades específicas de cada analista.

O que compõe um modelo do Resource Manager?

Observação

Aqui, você verá alguns exemplos de código para ter uma ideia da estrutura de cada seção. Não se preocupe se você não estiver familiarizado com o aparecer. Você pode examinar modelos de outras pessoas e criar os seus à medida que ganha mais experiência prática.

Talvez você já tenha usado o JSON (JavaScript Object Notation) para enviar dados entre servidores e aplicativos Web. JSON também é uma maneira comum de descrever como a infraestrutura e os aplicativos são configurados.

O JSON permite expressar os dados armazenados como um objeto (assim como uma máquina virtual) em texto. Um documento JSON é essencialmente uma coleção de pares chave-valor. Cada chave é uma cadeia de caracteres. O valor da chave pode ser uma cadeia de caracteres, um número, uma expressão booliana, uma lista de valores ou um objeto (que é uma coleção de outros pares chave-valor).

Um modelo do Resource Manager pode conter as seguintes seções:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "",
    "parameters": {  },
    "variables": {  },
    "functions": [  ],
    "resources": [  ],
    "outputs": {  }
}

Embora essas seções sejam expressas usando JSON, elas não estão relacionadas à linguagem JSON real. Vamos examinar cada seção em mais detalhes.

Parâmetros

Esta seção é onde você especifica quais valores são configuráveis quando o modelo é executado. Por exemplo, você pode permitir que os usuários do modelo especifiquem um nome de usuário, uma senha ou um nome de domínio.

Aqui está um exemplo que ilustra dois parâmetros: um para o nome de usuário de uma VM e outro para sua senha.

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "Username for the Virtual Machine."
    }
  },
  "adminPassword": {
    "type": "securestring",
    "metadata": {
      "description": "Password for the Virtual Machine."
    }
  }
}

Variáveis

É nesta seção que você define os valores que serão usados em todo o modelo. As variáveis podem ajudar a facilitar a manutenção de seus modelos. Por exemplo, você pode definir um nome de conta de armazenamento uma vez como uma variável e usar essa variável em todo o modelo. Se o nome da conta de armazenamento for alterado, você precisará apenas atualizar a variável.

Aqui está um exemplo que ilustra algumas variáveis que descrevem os recursos de rede para uma VM.

"variables": {
  "nicName": "myVMNic",
  "addressPrefix": "10.0.0.0/16",
  "subnetName": "Subnet",
  "subnetPrefix": "10.0.0.0/24",
  "publicIPAddressName": "myPublicIP",
  "virtualNetworkName": "MyVNET"
}

Funções

É nesta seção que você define os procedimentos que não desejará repetir em todo o modelo. Assim como as variáveis, as funções podem ajudar a facilitar a manutenção de seus modelos. Aqui está um exemplo que cria uma função para criar um nome exclusivo que pode ser usado durante a criação de recursos que têm requisitos de nomenclatura globalmente exclusivos.

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

Recursos

É nesta seção que você define os recursos do Azure que compõem a sua implantação.

Aqui está um exemplo que cria um recurso de endereço IP público.

{
  "type": "Microsoft.Network/publicIPAddresses",
  "name": "[variables('publicIPAddressName')]",
  "location": "[parameters('location')]",
  "apiVersion": "2018-08-01",
  "properties": {
    "publicIPAllocationMethod": "Dynamic",
    "dnsSettings": {
      "domainNameLabel": "[parameters('dnsLabelPrefix')]"
    }
  }
}

Aqui, o tipo de recurso é Microsoft.Network/publicIPAddresses. Seu nome é lido da seção de variáveis e sua localização, ou região do Azure, é lida da seção de parâmetros.

Já que tipos de recursos podem ser alterados ao longo do tempo, apiVersion refere-se à versão do tipo de recurso que você deseja usar. Conforme os tipos de recursos evoluem e mudam, você pode modificar seus modelos para trabalhar com os recursos mais recentes quando está pronto para isso.

Saídas

É nesta seção que você define todas as informações que desejará receber quando o modelo for executado. Por exemplo, talvez você deseje receber o endereço IP ou o FQDN da VM, que são informações desconhecidas até que a implantação seja executada.

O exemplo a seguir mostra uma saída chamada hostname. O valor FQDN é lido nas configurações de endereço IP público da VM.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
  }
}

Como implantar um fluxo de trabalho de Aplicativos Lógicos do Azure em um modelo?

Um fluxo de trabalho de Aplicativos Lógicos do Azure é um recurso no Azure. Portanto, podemos implantá-lo em um modelo por meio de sua adição à lista de recursos a serem implantados na seção resources do modelo do Resource Manager. O que exatamente adicionamos à seção de recursos para que o fluxo de trabalho seja definido? Adicionamos a definição de fluxo de trabalho JSON do fluxo de trabalho em questão à seção de recursos. Na verdade, o snippet JSON a seguir mostra um modelo do Resource Manager para implantar o fluxo de trabalho básico descrito na unidade anterior. Como você pode ver no realce, a seção de recursos contém a definição de fluxo de trabalho completa.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Logic/workflows",
            "apiVersion": "2017-07-01",
            "name": "HelloLogicAppsTemplate",
            "location": "westus2",
            "properties": {
                "state": "Enabled",
                "definition": {
                    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "triggers": {
                        "manual": {
                            "type": "Request",
                            "kind": "Http",
                            "inputs": {
                                "method": "GET",
                                "schema": {}
                            }
                        }
                    },
                    "actions": {
                        "Response": {
                            "runAfter": {},
                            "type": "Response",
                            "kind": "Http",
                            "inputs": {
                                "body": "Hello Logic Apps Template!",
                                "statusCode": 200
                            }
                        }
                    },
                    "outputs": {}
                },
                "parameters": {}
            }
        }
    ],
    "outputs": {
        "logicAppUrl": {
           "type": "string",
           "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', 'HelloLogicAppsTemplate'), '/triggers/manual'), '2017-07-01').value]"
        }
     }
}

Podemos implantar esse modelo usando um dos métodos a seguir.

  • Implantar usando o portal do Azure
  • Implantar usando o módulo Az do PowerShell
  • Implantar da CLI (interface de linha de comando) do Azure.

Neste módulo, implantaremos modelos usando a CLI do Azure e os comandos az deployment group.

Como fazer para escrever um modelo do Resource Manager?

Há muitas abordagens para escrever modelos do Resource Manager. Embora você possa escrever um modelo do zero, é comum começar com um modelo existente e modificá-lo para atender às suas necessidades.

Aqui estão algumas maneiras para você obter um modelo inicial:

  • Use o portal do Azure para criar um modelo com base nos recursos em um grupo de recursos existente.
  • Comece com um modelo criado por você ou sua equipe e que serve a uma finalidade similar.
  • Comece com um modelo de início rápido do Azure. Você verá como na próxima parte.

Independentemente de sua abordagem, gravar um modelo envolve trabalhar com um editor de texto. Você pode usar seu editor favorito, mas a extensão Ferramentas do Azure Resource Manager do Visual Studio Code foi especialmente projetada para a criação de modelos. Essa extensão facilita a navegação pelo código de modelo e fornece preenchimento automático para muitas tarefas comuns.

Conforme você explora e cria seus modelos, confira a documentação para entender quais são os tipos de recursos disponíveis e como usá-los.

Na próxima unidade, vamos examinar e implantar um modelo existente por meio da CLI do Azure.