O que são modelos do ARM?

Com a mudança para a cloud, muitas equipas adotaram métodos de desenvolvimento ágeis. Estas equipas têm de iterar processos rapidamente. Precisam de implementar repetidamente as suas soluções na cloud e de saber que o estado das respetivas infraestruturas se mantém fiável. À medida que a infraestrutura se tornou parte do processo iterativo, a divisão entre operações e desenvolvimento desapareceu. As equipas precisam de gerir a infraestrutura e o código da aplicação através de um processo unificado.

Para responder a estes desafios, pode automatizar implementações e utilizar a prática da infraestrutura como código. No código, define a infraestrutura que precisa de ser implementada. O código de infraestrutura torna-se parte do seu projeto. Tal como o código da aplicação, armazena o código da infraestrutura num repositório de origem e faz a sua versão. Qualquer pessoa na sua equipa pode executar o código e implementar ambientes semelhantes.

Para implementar a infraestrutura como código nas soluções do Azure, utilize modelos do Azure Resource Manager (modelos do ARM). O modelo é um ficheiro JavaScript Object Notation (JSON) que define a infraestrutura e a configuração do projeto. O modelo utiliza a sintaxe declarativa, que permite afirmar o que quer implementar sem ter de escrever a sequência de comandos de programação para a criar. No modelo, especifique os recursos a implementar e as propriedades desses recursos.

Dica

Introduzimos uma nova linguagem chamada Bicep que oferece as mesmas capacidades que os modelos do ARM, mas com uma sintaxe mais fácil de utilizar. Cada ficheiro Bicep é convertido automaticamente num modelo do ARM durante a implementação. Se estiver a considerar a infraestrutura como opções de código, recomendamos que veja Bicep. Para obter mais informações, consulte O que é o Bicep?.

Para saber mais sobre como pode começar a utilizar os modelos do ARM, veja o vídeo seguinte.

Porquê escolher modelos arm?

Se estiver a tentar decidir entre utilizar modelos do ARM e uma das outras infraestruturas como serviços de código, considere as seguintes vantagens de utilizar modelos:

  • Sintaxe declarativa: os modelos do ARM permitem-lhe criar e implementar uma infraestrutura do Azure de forma declarativa. Por exemplo, pode implementar não só máquinas virtuais, mas também a infraestrutura de rede, os sistemas de armazenamento e quaisquer outros recursos de que precise.

  • Resultados repetíveis: implemente repetidamente a sua infraestrutura ao longo do ciclo de vida de desenvolvimento e tenha a confiança de que os seus recursos são implementados de forma consistente. Os modelos são idempotentes, o que significa que pode implementar o mesmo modelo muitas vezes e obter os mesmos tipos de recursos no mesmo estado. Pode desenvolver um modelo que representa o estado pretendido, em vez de desenvolver muitos modelos separados para representar atualizações.

  • Orquestração: não tem de se preocupar com as complexidades das operações de ordenação. Resource Manager orquestra a implementação de recursos interdependentes para que sejam criados pela ordem correta. Sempre que possível, Resource Manager implementa recursos em paralelo para que as suas implementações sejam concluídas mais rapidamente do que as implementações em série. Pode implementar o modelo através de um comando, em vez de através de vários comandos imperativos.

    Diagrama que mostra a diferença entre a implementação imperativa e declarativa.

  • Ficheiros modulares: pode dividir os seus modelos em componentes mais pequenos e reutilizáveis e ligá-los no momento da implementação. Também pode aninhar um modelo dentro de outro modelo.

  • Criar qualquer recurso do Azure: pode utilizar imediatamente novos serviços e funcionalidades do Azure em modelos. Assim que um fornecedor de recursos introduzir novos recursos, pode implementar esses recursos através de modelos. Não tem de esperar que as ferramentas ou módulos sejam atualizados antes de utilizar os novos serviços.

  • Extensibilidade: com scripts de implementação, pode adicionar scripts do PowerShell ou Bash aos seus modelos. Os scripts de implementação expandem a sua capacidade de configurar recursos durante a implementação. Um script pode ser incluído no modelo ou armazenado numa origem externa e referenciado no modelo. Os scripts de implementação permitem-lhe concluir a configuração do ambiente ponto a ponto num único modelo do ARM.

  • Teste: pode certificar-se de que o seu modelo segue as diretrizes recomendadas ao testá-lo com o kit de ferramentas do modelo arm (arm-ttk). Este kit de teste é um script do PowerShell que pode transferir a partir do GitHub. O kit de ferramentas torna mais fácil desenvolver conhecimentos com a linguagem de modelo.

  • Pré-visualizar alterações: pode utilizar a operação what-if para obter uma pré-visualização das alterações antes de implementar o modelo. Com what-if, verá que recursos serão criados, atualizados ou eliminados e quaisquer propriedades de recursos que serão alteradas. A operação what-if verifica o estado atual do seu ambiente e elimina a necessidade de gerir o estado.

  • Validação incorporada: o seu modelo é implementado apenas após passar a validação. Resource Manager verifica o modelo antes de iniciar a implementação para se certificar de que a implementação será bem-sucedida. É menos provável que a implementação pare num estado semi-concluído.

  • Implementações controladas: no portal do Azure, pode rever o histórico de implementações e obter informações sobre a implementação do modelo. Pode ver o modelo que foi implementado, os valores dos parâmetros transmitidos e quaisquer valores de saída. Outras infraestruturas como serviços de código não são controladas através do portal.

    Captura de ecrã do portal do Azure a mostrar o histórico de implementações.

  • Política como código: Azure Policy é uma política como estrutura de código para automatizar a governação. Se estiver a utilizar políticas do Azure, a remediação de políticas é feita em recursos não conformes quando implementadas através de modelos.

  • Esquemas de Implementação: pode tirar partido dos Esquemas fornecidos pela Microsoft para cumprir as normas regulamentares e de conformidade. Estes esquemas incluem modelos pré-criados para várias arquiteturas.

  • Integração ci/CD: pode integrar modelos nas ferramentas de integração contínua e implementação contínua (CI/CD), que podem automatizar os pipelines de versão para atualizações rápidas e fiáveis de aplicações e infraestruturas. Ao utilizar o Azure DevOps e Resource Manager tarefa de modelo, pode utilizar o Azure Pipelines para criar e implementar continuamente projetos de modelo do ARM. Para saber mais, veja Projeto VS com pipelines e Tutorial: Integração contínua de modelos do Azure Resource Manager com o Azure Pipelines.

  • Código exportável: pode obter um modelo para um grupo de recursos existente ao exportar o estado atual do grupo de recursos ou ao ver o modelo utilizado para uma implementação específica. Ver o modelo exportado é uma forma útil de saber mais sobre a sintaxe do modelo.

  • Ferramentas de criação: pode criar modelos com o Visual Studio Code e a extensão da ferramenta de modelo. Obtém intellisense, realce de sintaxe, ajuda em linha e muitas outras funções de linguagem. Além do Visual Studio Code, também pode utilizar o Visual Studio.

Ficheiro de modelo

No seu modelo, pode escrever expressões de modelo que expandem as capacidades do JSON. Estas expressões utilizam as funções fornecidas pelo Resource Manager.

O modelo tem as seguintes secções:

  • Parâmetros – forneça valores durante a implementação que permitem que o mesmo modelo seja utilizado com ambientes diferentes.

  • Variáveis – defina os valores que são reutilizados nos seus modelos. Podem ser construídos a partir de valores de parâmetros.

  • Funções definidas pelo utilizador – crie funções personalizadas que simplificam o seu modelo.

  • Recursos – especifique os recursos a implementar.

  • Saídas – devolve valores dos recursos implementados.

Processo de implementação de modelos

Quando implementa um modelo, o Resource Manager converte o modelo em operações da API REST. Por exemplo, quando o Resource Manager recebe um modelo com a seguinte definição de recursos:

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-09-01",
    "name": "mystorageaccount",
    "location": "centralus",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "StorageV2"
  },
]

Converte a definição para a operação de API REST seguinte, a qual é enviada para o fornecedor de recursos Microsoft.Storage:

PUT
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/mystorageaccount?api-version=2022-09-01
REQUEST BODY
{
  "location": "centralus",
  "sku": {
    "name": "Standard_LRS"
  },
  "kind": "StorageV2",
  "properties": {}
}

Repare que a apiVersion que definiu no modelo para o recurso é utilizada como a versão da API para a operação REST. Pode implementar repetidamente o modelo e ter confiança de que continuará a funcionar. Ao utilizar a mesma versão da API, não tem de se preocupar com alterações interruptivas que possam ser introduzidas em versões posteriores.

Para implementar um modelo, utilize qualquer uma das seguintes opções:

Estrutura do modelo

A forma como define modelos e grupos de recursos é inteiramente da sua responsabilidade, bem como pretende gerir a sua solução. Por exemplo, pode implementar a sua aplicação de três camadas através de um único modelo para um grupo de recursos.

Diagrama que mostra uma implementação de aplicação de três camadas com um único modelo.

No entanto, não precisa de definir toda a infraestrutura num único modelo. Muitas vezes, faz sentido dividir os requisitos de implementação num conjunto de modelos direcionados e com uma finalidade específica. Pode reutilizar facilmente estes modelos para soluções diferentes. Para implementar uma solução específica, crie um modelo principal que liga todos os modelos necessários. A imagem seguinte mostra como implementar uma solução de três camadas através de um modelo principal que inclui três modelos aninhados.

Diagrama que mostra uma implementação de aplicação de três camadas com modelos aninhados.

Se imaginar as suas camadas com ciclos de vida separados, pode implementar as três camadas em grupos de recursos separados. Repare que os recursos ainda podem ser ligados a recursos noutros grupos de recursos.

Diagrama que mostra uma implementação de aplicação de três camadas com grupos de recursos separados.

Para obter mais informações sobre modelos aninhados, veja Utilizar modelos ligados com o Azure Resource Manager.

Partilhar modelos

Depois de criar o seu modelo, poderá querer partilhá-lo com outros utilizadores na sua organização. As especificações de modelo permitem-lhe armazenar um modelo como um tipo de recurso. Pode utilizar o controlo de acesso baseado em funções para gerir o acesso às especificações do modelo. Os utilizadores com acesso de leitura à especificação de modelo podem implementá-la, mas não podem alterar o modelo.

Esta abordagem significa que pode partilhar modelos de forma segura que cumpram os padrões da sua organização.

Passos seguintes