Uma das grandes vantagens de usar a nuvem pública é a capacidade de implantar aplicações e serviços em escala. Mas a escala tem um outro lado, pois trabalhar com dezenas ou centenas de servidores impõe novas restrições à administração de sistemas. Onde poderíamos gerenciar um ou dois dispositivos usando uma CLI ou GUI, ou 10 ou 20 dispositivos usando nossos próprios scripts, gerenciar uma enorme frota de dispositivos requer uma abordagem muito diferente. Precisamos de infraestrutura como código e automação.

Essa abordagem é a base para o Azure Automation da Microsoft, uma coleção de ferramentas para gerenciar infraestruturas virtuais usando uma combinação de implantações declarativas e Desired State Configuration (DSC) baseada em PowerShell. A Azure Automation reúne tecnologias familiares como o Azure Resource Manager e a linguagem de definição de infraestrutura Bicep, reduzindo a curva de aprendizagem e alargando as suas capacidades.

Ao mesmo tempo, ter uma estrutura testável para implantação reduz os riscos associados ao dimensionamento e às atualizações de aplicativos. Depois que sua infraestrutura estiver instalada, a Automação do Azure vai além das implantações, pois o suporte ao DSC oferece uma abordagem prática para manter os servidores atualizados com patches de segurança.

A Automação do Azure adota uma abordagem programática para a automação de processos, usando runbooks para gerenciar operações. Os runbooks permitem agrupar todas as suas regras de configuração e implantação em um único arquivo executável, escrito em PowerShell ou Python. Para automações mais simples, a Microsoft fornece um ambiente de criação gráfica para simplificar a criação de novos runbooks.

Para obter os benefícios de ferramentas como essa, você precisa integrá-las ao seu sistema de construção e à sua estrutura de eventos. A Microsoft utiliza webhooks na Automação do Azure para desencadear operações. Por exemplo, você poderia ter uma Função do Azure acionada por um aumento na demanda que executará uma automação para provisionar mais instâncias do aplicativo. Os mesmos webhooks podem ser acionados por GitHub Actions ou Azure DevOps para implantar uma nova infraestrutura como parte de uma construção.

Construindo runbooks na Automação do Azure

Os runbooks são criados no editor de texto incorporado da Azure Automation ou através de um editor gráfico. O editor de texto tem uma aparência semelhante ao Visual Studio Code, com suporte para IntelliSense e uma biblioteca de trechos de código para simplificar a criação.

Se estiver a utilizar o PowerShell, o seu código de runbook pode incluir cmdlets pré-escritos, bem como suporte para runbooks infantis. Esta última opção permite criar uma biblioteca de runbooks que incorporam funções importantes (para criar um novo servidor, por exemplo) e montá-las em uma implantação de infraestrutura mais complexa.

Você não está limitado a criar e implantar infraestrutura. A Azure Automation também fornece ferramentas para trabalhar com serviços da plataforma Azure, utilizando as mesmas APIs CLI do Azure para configurar serviços e disponibilizar os recursos resultantes para o seu código. Você pode usar as ferramentas de identidade gerenciadas na Automação do Azure para atribuir uma conta e uma função que são usadas para configurar e gerenciar seu serviço de plataforma, por exemplo, para criar novas tabelas no Banco de Dados SQL do Azure para seu aplicativo.

Se adicionar suporte para a Configuração do Estado Desejado nos seus modelos Bicep ou Azure Resource Manager para VMs geridos, pode manter o desvio ao mínimo, garantindo que os servidores em diferentes regiões e zonas de disponibilidade mantêm a mesma configuração. A habilitação do DSC equivale a uma linha do PowerShell ou a uma entrada em um modelo do Azure Resource Manager. Também é possível automatizar a configuração, utilizando o Azure Automate para definir as definições do gestor de configuração e, em seguida, compilá-las para implantação numa frota de servidores.

Em alternativa, pode configurar os seus VMs para utilizar o novo serviço Azure Automanage, que é uma versão atualizada do DSC destinada a gerir propriedades da máquina através do Azure Resource Manager. Essa abordagem fornece ferramentas para configuração do servidor e para conformidade. Na prática, é melhor usar o gerenciamento de conformidade, pois isso garante que as máquinas sejam atualizadas assim que forem implantadas e que todas as instâncias permaneçam sincronizadas, reduzindo o risco à medida que novas atualizações de segurança são implementadas.

Gerenciando tempos de execução de automação na Automação do Azure

Uma ferramenta fundamental para gerir e suportar runbooks é o ambiente Runtime da Azure Automation. O ambiente de tempo de execução permite definir e controlar os ambientes usados ​​para hospedar e executar código de automação. Ao bloquear isso, você reduz os riscos associados ao uso de um tempo de execução desconhecido, evitando possíveis incompatibilidades.

Ao definir um ambiente de tempo de execução, você pode controlar três fatores principais: o idioma usado para seus runbooks, a versão de destino e quaisquer pacotes de software necessários. Bloquear a versão do idioma evita diferenças entre versões, para que você sempre execute a versão usada para criar e testar seu código. Novos lançamentos com novas funcionalidades podem então incrementar versões de tempo de execução conforme necessário.

Existem boas razões para utilizar um tempo de execução recente do PowerShell (como o PowerShell 7.2), porque estes permitem incluir comandos CLI do Azure nos seus scripts. A Azure Automation utilizará sempre a versão mais recente do Azure CLI suportada pela linguagem subjacente, por isso tenha isto em mente se estiver a confiar em comandos que possam ter sido preteridos, mesmo que o resto do seu runbook permaneça inalterado.

Os ambientes de tempo de execução são criados e gerenciados no Portal do Azure ou por meio de sua API REST. A configuração é bastante simples, pois você seleciona o idioma e a versão das versões suportadas. Feito isso, você escolhe os pacotes e módulos que deseja usar e carrega-os em sua conta do Azure. Estes podem vir do seu ambiente de desenvolvimento local ou da galeria da Automação do Azure.

Se quiser atualizar a versão do idioma para uma nova versão de um runbook, tudo o que você precisa fazer é selecionar a versão mais recente e salvar seu ambiente atualizado. Pode ser necessário atualizar pacotes como resultado de quaisquer alterações.

Automação do Azure para gerenciamento de sistemas

É muito bom poder criar novas infraestruturas complexas sob demanda, mas você ainda precisa gerenciar esses novos servidores e redes. A Automação do Azure oferece ferramentas de controle de alterações que fornecem um inventário em tempo real dos seus servidores. Ao vinculá-los a ferramentas de gerenciamento de sistema, você poderá verificar recursos e monitorar operações.

O suporte para ferramentas de gerenciamento modernas inclui o Azure Automation State Configuration, uma versão hospedada na nuvem do PowerShell DSC local. Ao executar um servidor DSC no Azure, você pode gerenciar o estado do servidor e automatizar as atualizações conforme necessário. A Configuração do Estado da Automação do Azure ajuda você a controlar o que é atualizado e como, garantindo que atualizações indesejadas nunca sejam implantadas em um servidor.

Tenha em atenção que pode utilizar a Automação do Azure fora do Azure, como parte do serviço de gestão de nuvem híbrida Azure Arc. Isto adiciona uma função de Runbook Híbrido para servidores não Azure, incluindo hardware físico. O Azure Arc permite-lhe gerir dispositivos de borda e sistemas hospedados no Azure como parte de uma plataforma IoT ou gerir serviços seguros que necessitam de estar no local para conformidade regulamentar.

Lembra quando começamos a falar sobre servidores como gado? À medida que adicionamos mais e mais servidores, descobrimos que não poderíamos mais gerenciá-los à moda antiga, como animais de estimação. A nuvem nos levou a um novo patamar, onde nem sabemos quantos servidores temos. É por isso que precisamos automatizar a infraestrutura em nuvem, para fazer com que nossos aplicativos levantados e deslocados se comportem o mais próximo possível dos serviços nativos da nuvem que estão usando.