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

Concluído

Se já utiliza o Azure há algum tempo, provavelmente ouviu falar do Azure Resource Manager. Vamos analisar a função do Resource Manager e definir o que compõe um modelo do Resource Manager.

O que é o Azure Resource Manager?

O Azure Resource Manager é a interface de gestão e organização dos recursos na cloud. Pense no Resource Manager como uma forma de implementar recursos na cloud.

Se estiver familiarizado com os grupos de recursos do Azure, sabe que eles permitem tratar conjuntos de recursos relacionados como uma única unidade. O Resource Manager organiza os grupos de recursos que lhe permitem implementar, gerir e eliminar todos os recursos com uma única ação.

Considere os modelos financeiros que executa para os seus analistas. Para executar um modelo, poderá precisar de uma ou mais VMs, uma base de dados para armazenar dados e uma rede virtual para ligar tudo. Com o Resource Manager, você pode implantar esses ativos no mesmo grupo de recursos e gerenciá-los e monitorá-los juntos. Quando tiver terminado, pode eliminar todos os recursos num grupo de recursos numa única operação.

O que são os modelos do Resource Manager?

Um modelo do Resource Manager define com exatidão todos os recursos do Resource Manager numa implementação. Pode implementar um modelo do Resource Manager num grupo de recursos como uma única operação.

Um modelo do Resource Manager é um arquivo JSON, tornando o modelo uma forma de automação declarativa. Uma automatização declarativa significa que o utilizador define os recursos de que necessita mas não como criá-los. Dito de outra forma, você define o que precisa, mas o Gerenciador de Recursos precisa garantir que os recursos sejam implantados corretamente.

Uma automatização declarativa é semelhante à forma como os browsers apresentam ficheiros HTML. O ficheiro HTML descreve que elementos são apresentados na página, mas não descreve como apresentá-los. Essa parte é da responsabilidade do browser.

Nota

Você pode ouvir modelos do Resource Manager chamados de modelos ARM. Preferimos os nomes completos dos modelos do Azure Resource Manager ou dos modelos do Resource Manager.

Por que razão deve utilizar modelos do Resource Manager?

O uso de modelos do Resource Manager torna suas implantações mais rápidas e repetíveis. Por exemplo, já não tem de criar uma VM no portal, aguardar que fique concluída, criar a VM seguinte, etc. O Resource Manager gere toda a implementação automaticamente.

Eis mais algumas vantagens a ter em conta:

  • Os modelos melhoram a consistência.

    Os modelos do Resource Manager disponibilizam uma linguagem comum para o utilizador e outras pessoas descreverem as suas implementações. Independentemente da ferramenta ou do SDK utilizados para implementar o modelo, a estrutura, formato e expressões dentro do mesmo permanecem iguais.

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

    Os modelos permitem-lhe implementar múltiplos recursos na ordem correta. Por exemplo, não é aconselhável implementar uma máquina virtual antes de criar um disco do SO ou uma interface de rede. O Resource Manager mapeia cada recurso e os respetivos recursos dependentes e cria os recursos dependentes primeiro. O mapeamento de dependências ajuda a assegurar que a implementação é efetuada pela ordem correta.

  • Os modelos reduzem tarefas manuais e propensas a erros.

    Criar e ligar recursos manualmente pode demorar tempo e a probabilidade de cometer erros é alta. O Resource Manager garante que as implantações aconteçam sempre da mesma maneira.

  • Os modelos são código.

    Os modelos expressam os seus requisitos através de código. Pense num modelo como um tipo de infraestrutura como código que pode ser partilhada, testada e cuja versão pode ser controlada como qualquer outra parte de software. Como os modelos são código, pode criar um "rasto" que pode seguir. O código do modelo documenta a implementação. A maioria dos utilizadores gere os modelos através de algum tipo de controlo de revisão, como o Git. Ao alterar o modelo, o histórico de revisões do mesmo também documenta como o modelo (e a sua implementação) evoluiu ao longo do tempo.

  • Os modelos promovem a reutilização.

    O seu modelo pode conter parâmetros, que são preenchidos quando o modelo é executado. Um parâmetro pode definir um nome de utilizador ou palavra-passe, um nome de domínio, etc. Os parâmetros de modelo permitem que você crie várias versões de sua infraestrutura, como preparação e produção, mas ainda utilize o mesmo modelo.

  • Os modelos são vinculáveis.

    Você pode vincular modelos do Gerenciador de Recursos para tornar os próprios modelos modulares. Pode escrever pequenos modelos – sendo que cada um define uma parte de uma solução – e combiná-los de forma a criar um sistema completo.

Os modelos executados pelos seus analistas financeiros são exclusivos, mas pode ver padrões na infraestrutura subjacente. Por exemplo, a maioria dos modelos necessita de uma base de dados para armazenar dados. Muitos modelos utilizam o mesmo sistema operativo, linguagem e framework para os detalhes. Você pode definir modelos que descrevem cada componente individual, como computação, armazenamento e rede. Em seguida, você pode combinar os componentes para atender às necessidades específicas de cada analista.

O que está incluído num modelo do Resource Manager?

Nota

Aqui, você verá alguns exemplos de código para dar uma ideia sobre a estrutura de cada seção. Não se preocupe se o que você vê não lhe é familiar. Pode rever os modelos dos outros e escrever os seus à medida que ganha mais experiência prática.

Você pode ter usado JavaScript Object Notation (JSON) antes para enviar dados entre servidores e aplicativos Web. Utilizar JSON também é uma forma popular de descrever como as aplicações e a infraestrutura estão configuradas.

JSON nos permite expressar dados armazenados como um objeto, como uma máquina virtual, em texto. Um documento JSON é essencialmente uma coleção de pares chave-valor. Cada tecla é uma cadeia de caracteres. O valor da chave pode ser uma cadeia de caracteres, um número, uma expressão booleana, 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 com 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, senha ou 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

Esta seção é onde você define os valores que são usados em todo o modelo. As variáveis podem tornar a manutenção dos seus modelos mais fácil. Por exemplo, pode definir um nome de conta de armazenamento como uma variável uma única vez e utilizá-la em todo o modelo. Se o nome da conta de armazenamento for alterado, só precisa de atualizar essa variável.

Eis um exemplo que ilustra algumas variáveis que descrevem as funcionalidades de rede de 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

Esta seção é onde você define procedimentos que não deseja repetir ao longo do modelo. Tal como as variáveis, as funções podem tornar a manutenção dos seus modelos mais fácil. Eis um exemplo que cria uma função para criar um nome exclusivo que pode ser utilizado ao criar recursos com requisitos de nomenclatura exclusivos globalmente.

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

Recursos

Nesta secção, pode definir os recursos do Azure que compõem a sua implementação.

Eis 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 na seção de variáveis e sua localização (ou região do Azure) é lida na seção de parâmetros.

Devido ao facto de os tipos de recursos poderem mudar ao longo do tempo, apiVersion refere-se à versão do tipo de recurso que pretende utilizar. À medida que os tipos de recursos evoluem e mudam, pode modificar os seus modelos para trabalhar com as funcionalidades mais recentes, quando estiver pronto.

Resultados

Esta seção é onde você define todas as informações que deseja receber quando o modelo é executado. Por exemplo, talvez você queira receber o endereço IP ou FQDN da sua VM, que são informações que você não sabe até que a implantação seja executada.

O exemplo a seguir mostra uma saída chamada hostname. O valor do FQDN é lido a partir das definições do 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 adicionando-o à lista de recursos a serem implantados na resources seção do modelo do Gerenciador de Recursos. O que adicionamos exatamente à secçã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 à secção de recursos. Aliás, o fragmento JSON seguinte mostra um modelo do Resource Manager para implementar o fluxo de trabalho básico que descrevemos na unidade anterior. Como pode ver no destaque, a secçã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 implementar este modelo através de um dos seguintes métodos:

  • Implementar com o portal do Azure
  • Implantar usando o módulo PowerShell Az
  • Implementar a partir da Interface de Linha de Comandos (CLI) do Azure.

Neste módulo, vamos implementar modelos com a CLI do Azure e os comandos az deployment group.

Como escrevo um modelo do Resource Manager?

Existem várias abordagens relativamente à escrita de modelos do Resource Manager. Embora possa escrever um modelo de raiz, é comum começar com um modelo existente e modificá-lo de forma a corresponder às suas necessidades.

Eis algumas formas de como pode obter um modelo para começar:

  • Utilize o portal do Azure para criar um modelo baseado nos recursos num grupo de recursos existente.
  • Comece com um modelo criado pelo utilizador ou pela sua equipa, com um fim semelhante.
  • Comece com um Modelo de Início Rápido do Azure. Poderá ver como fazê-lo a seguir.

Independentemente da sua abordagem, escrever um modelo envolve trabalhar com um editor de texto. Você pode trazer seu editor favorito, mas a extensão Azure Resource Manager Tools do Visual Studio Code foi especialmente projetada para criar modelos. Esta extensão facilita a navegação no código do modelo e disponibiliza o preenchimento automático de diversas tarefas comuns.

À medida que explora e escreve os seus modelos, reveja a documentação para compreender os tipos de recursos disponíveis e como utilizá-los.

Na próxima unidade, examinaremos e implantaremos um modelo existente da CLI do Azure.