Estratégias de arquitetura para projetar uma cadeia de suprimento para o desenvolvimento de cargas de trabalho

Aplica-se a esta recomendação da lista de verificação do Azure Well-Architected Framework Operational Excellence:

OE:06 Crie e otimize sua cadeia de fornecimento de carga de trabalho usando pipelines automatizados previsíveis que testam e promovem alterações entre ambientes. Projete esses pipelines para atender consistentemente às suas metas de confiabilidade, segurança, custo-eficiência e desempenho.

Para fornecer uma maneira previsível e padronizada de manter sua carga de trabalho, projete sua cadeia de fornecimento de desenvolvimento de carga de trabalho em torno da CI/CD (integração contínua e entrega contínua). Mantenha uma cadeia de suprimentos única e padronizada e implemente-a usando pipelines automatizados de CI/CD. Você pode usar vários pipelines desde que todos aderem à mesma cadeia de suprimentos.

Use uma cadeia de suprimentos padronizada para proteger sua carga de trabalho contra os riscos de alterações não gerenciadas. Tenha visibilidade contínua sobre o estado das cargas de trabalho para evitar comportamentos imprevisíveis e o retrabalho custoso para reconstituir mudanças não rastreadas quando ocorrerem problemas. Para minimizar esses riscos, padronize os processos e ferramentas que definem sua cadeia de suprimentos e garanta que sua equipe de carga de trabalho se comprometa totalmente com seu uso.

Definição

Termo Definição
Cadeia de fornecedores Em cargas de trabalho de nuvem, uma cadeia de suprimentos é um conjunto padronizado de ferramentas e processos que você usa para implementar a infraestrutura e a alteração de aplicativos entre ambientes.

Observação

As recomendações neste guia referem-se a ambientes de carga de trabalho em uma cadeia de promoção de código. Ambientes sandbox ou outros ambientes exploratórios e de prova de conceito (POC) exigem menos rigor e estrutura.

As recomendações a seguir podem ajudá-lo a definir os princípios básicos de sua cadeia de suprimentos.

Aplique uma política rígida de implantações automatizadas baseadas em modelos

Faça todas as alterações de carga de trabalho propostas por meio dos processos e ferramentas da cadeia de suprimentos e imponha implantações automatizadas baseadas em modelos. Essa abordagem mantém as configurações padronizadas, bem definidas e fortemente controladas entre ambientes. Para ambientes em uma cadeia de promoção de código, proíba atualizações manuais ou interação direta com o plano de controle de nuvem, como o portal ou as APIs. Aplique todas as alterações ao ambiente por meio de pipelines que seguem suas práticas de implantação definidas. Para impor essa política, limite o acesso apenas para leitura e use mecanismos de autorização para conceder acesso de gravação quando necessário.

Um aspecto importante desse princípio é que todas as alterações são propostas até que sejam implantadas na produção. Por meio de testes automatizados, como integração e teste de fumaça, você permite que sua cadeia de suprimentos rejeite automaticamente as alterações.

Oportunidade de IA: O diagnóstico manual de falhas de implantação atrasa as equipes, causa frustração e cria silos de conhecimento. Melhore a produtividade e a resiliência avaliando primeiro as ferramentas de DevOps fora da prateleira que fornecem análise de falhas assistidas por IA. Para estender esses recursos, coloque um agente personalizado em camadas em sua cadeia de ferramentas existente para identificar e resolver problemas comuns. Para cenários avançados, considere uma solução agente que monitora a telemetria de pipeline e os dados de incidentes históricos para detectar padrões de falha recorrentes e recomendar correções proativas.

Implante infraestrutura repetível e imutável como código

Implante uma infraestrutura repetível e imutável usando IaC (infraestrutura como código). Gerencie a infraestrutura por meio de definições declarativas controladas por versão que espelham o código-fonte do aplicativo. A aplicação da mesma IaC cria consistentemente o mesmo ambiente todas as vezes, semelhante à forma como o mesmo código-fonte cria o mesmo binário ao compilá-lo.

Para padronizar e automatizar como implantar e configurar a infraestrutura, adote IaC. Substitua implantações dependentes de pessoas por pipelines totalmente automatizados. Essa abordagem muda a responsabilidade de indivíduos para ferramentas e reduz o esforço manual. Permitir que os membros autorizados da equipe iniciem implantações por meio desse processo automatizado para manter a consistência e a qualidade entre ambientes.

Crie sua carga de trabalho como um grupo lógico de componentes que você pode agrupar em um modelo para tornar as implantações simples e repetíveis. Você pode pensar nesses pacotes como selos ou unidades de escala. Para obter mais informações, consulte Padrão de Carimbos de Implantação. Quando você precisar implantar sua carga de trabalho para escalar horizontalmente em outra zona ou na mesma região, implante uma unidade usando um pipeline. Dependendo de como você projeta seus carimbos, você pode implantar um subconjunto de sua carga de trabalho em vez de implantá-la por completo. Para garantir que os selos de implantação se conectem automaticamente aos recursos existentes, inclua componentes de rede em seus pipelines de IaC.

Para otimizar seu pipeline de IaC para consistência e eficiência, projete uma infraestrutura imutável em vez de uma infraestrutura mutável. Implemente uma infraestrutura imutável para garantir que todos os sistemas no escopo sejam substituídos pela configuração atualizada simultaneamente e de forma idêntica a cada implantação.

Oportunidade de IA: Simplifique o gerenciamento de pipeline e reduza o esforço manual usando a otimização de implantação alimentada por IA. O GitHub Copilot pode acelerar a geração de código em seus pipelines de CI/CD. A integração de IA pode validar e impor padrões organizacionais, recomendar estratégias de reversão e detectar descompasso comparando estados de infraestrutura atuais e pretendidos. Aprimore o monitoramento com modelos de IA que antecipam problemas e os exibem antecipadamente para intervenção.

Mantenha inventários de recursos precisos e monitorados continuamente em todos os ambientes e inclua etapas de aprovação e trilhas de auditoria para acompanhar as ações de IA.

Use o mesmo conjunto de artefatos de implantação em todos os ambientes

Use o mesmo conjunto de ativos de código e artefatos em todos os ambientes e pipelines. Um desafio comum para as organizações é quando ambientes de não produção diferem dos ambientes de produção. Criar ambientes de produção e não produção manualmente pode resultar em configurações incompatíveis entre os ambientes. Essa incompatibilidade retarda o teste e aumenta a probabilidade de que as alterações possam prejudicar um sistema de produção. Uma abordagem de IaC reduz esses problemas. Ao usar a automação IaC, você pode usar os mesmos arquivos de configuração de infraestrutura para todos os ambientes para produzir ambientes quase idênticos. Você pode adicionar parâmetros aos arquivos de configuração de infraestrutura e ajustá-los para atender aos requisitos de cada ambiente.

Para controlar os custos, normalmente há uma variação entre ambientes de produção e não produção. Normalmente, você não precisa do mesmo nível de redundância ou desempenho na não produção, portanto, contagens de recursos e SKUs podem ser diferentes. Certifique-se de controlar e entender a variação usando parâmetros padronizados para ajudá-lo a manter a previsibilidade à medida que você faz alterações.

Refletir a estrutura organizacional na cadeia de suprimentos

Reflita sua estrutura organizacional em seus projetos de cadeia de suprimentos e pipeline. Sua organização pode estar isolada entre as equipes. Você pode organizar suas equipes por função (como rede, dados e computação) ou integrá-las como equipes de DevOps que gerenciam a infraestrutura e os aplicativos. Existem muitas maneiras de organizar as equipes envolvidas em uma cadeia de suprimentos. Independentemente da estrutura, sua cadeia de suprimentos depende da colaboração em todas as equipes. Certifique-se de que todas as equipes sigam os processos padrão e usem ferramentas padrão para tornar a cadeia de suprimentos o mais eficiente possível.

Sua cadeia de fornecedores poderá depender de fornecedores externos se você terceirizar partes do ciclo de vida da carga de trabalho. Esses fornecedores são tão importantes para o sucesso da sua cadeia de fornecedores quanto os recursos internos. Certifique-se de que haja um acordo mútuo entre todas as equipes sobre os processos e ferramentas que você usa.

Escolha o método de implantação correto

Padronize seu método de implantação. Fale com o proprietário do produto sobre a quantidade aceitável de tempo de inatividade de produção para sua carga de trabalho. Dependendo de quanto tempo de inatividade é aceitável, você pode escolher o método de implantação que atenda aos seus requisitos. Idealmente, execute implantações durante uma janela de manutenção para reduzir a complexidade e o risco. Se nenhum tempo de inatividade for aceitável, use um método de implantação azul-verde.

Adote uma estratégia de exposição gradual, como implantações do tipo canário, para reduzir o risco de introduzir bugs não detectados para seus clientes. Implante alterações em grupos pequenos e controlados em estágios para que você possa detectar problemas antes de uma versão ampla. O grupo de distribuição inicial pode ser uma subseção de seus clientes que estão cientes da estratégia de distribuição. Essa subseção de clientes pode tolerar uma certa quantidade de comportamento inesperado e fornecer feedback. Ou pode ser um grupo de usuários internos, o que ajuda a limitar o impacto dos bugs durante a distribuição.

Ao definir seu método de implantação, adote uma política padrão de liberação da menor alteração viável em cada implantação. Determine o que se qualifica como a menor alteração viável com base na criticidade da carga de trabalho e na complexidade de seus componentes. Se você usar uma infraestrutura imutável, a menor alteração viável será reimplantar recursos com a configuração mais recente para substituir os recursos que executam a versão anterior. Se você usar uma infraestrutura mutável, poderá decidir que a menor alteração viável é apenas uma única atualização com escopo no grupo de recursos.

Oportunidade de IA: A análise orientada por IA identifica padrões de uso e recomenda tempos de implantação ideais, o que elimina a inspeção de log manual repetitiva. Evite supor períodos de baixo uso, implantar durante períodos de alto tráfego ou causar interrupções aos usuários. Comece com uma abordagem de IA generativa (GenAI) com pouco esforço, que conecta modelos diretamente à telemetria de sua carga de trabalho. Essa abordagem permite a detecção interativa de padrões e a geração de insights. Para cargas de trabalho em larga escala e com alto volume de transações, passe a usar modelos preditivos baseados em aprendizado de máquina que preveem janelas ideais de implantação à medida que evoluem as tendências de uso.

Siga uma abordagem em camadas

Siga uma abordagem em camadas para refletir diferentes ciclos de vida. Espera-se que as camadas de carga de trabalho mudem ao longo do ciclo de vida, mas você deve manter as operações do ciclo de vida estáticas e consistentes. Use pipelines de implantação separados para cada camada para que você possa aplicar alterações de forma independente e apropriada.

A landing zone fica na camada mais baixa da sua arquitetura. É um agrupamento lógico de elementos fundamentais, como assinaturas, grupos de gerenciamento, grupos de recursos, controles de governança e topologia de rede, que você pode usar para implantar e operar cargas de trabalho de forma consistente. Ele fornece às operações centrais ou às equipes de plataforma uma configuração de ambiente repetível. Para garantir a consistência, as zonas de destino do Azure incluem áreas de design comuns, uma arquitetura de referência, uma implementação de referência e um processo para adaptar implantações aos seus requisitos de design. Os princípios de design recomendam práticas baseadas na governança orientada por políticas, juntamente com a democratização da assinatura. Uma zona de destino deve exigir alterações mínimas ao longo do ciclo de vida da carga de trabalho. Para ver um exemplo de uma zona de destino com práticas recomendadas para Azure, consulte Azure zona de destino.

Mantenha sua infraestrutura principal estável, incluindo controladores de rede de entrada e saída, balanceadores de carga, soluções de roteamento de rede, DNS (Sistema de Nomes de Domínio) e servidores principais, fazendo grandes alterações somente quando necessário. Espere e planeje atualizações de configuração mais frequentes para esses componentes.

Normalmente, o aplicativo e as camadas de dados exigem atualizações de configuração frequentes e alterações de infraestrutura. Use os pipelines de implantação mais dinâmicos para esses componentes.

Incorpore tipos abrangentes de testes

Planeje uma estratégia de teste holística. Um princípio central da confiabilidade do sistema é o princípio da mudança para a esquerda. O processo de desenvolvimento de software tem etapas que se movem da esquerda para a direita. Não espere até o final para testar. Mova os testes o mais cedo possível para que você detecte problemas quando eles custam menos para corrigir. Os defeitos que você descobre no final do ciclo de vida podem ser caros ou até mesmo impossíveis de corrigir.

Teste todo o código, incluindo código de aplicativo, modelos de infraestrutura e scripts de configuração. Controle de versão do ambiente que executa aplicativos e implante-o por meio dos mesmos mecanismos que você usa para o código do aplicativo. Use as mesmas abordagens de teste que suas equipes usam para o código do aplicativo para validar o ambiente.

Use o teste automatizado quando possível para garantir a consistência. Inclua os seguintes tipos de teste em seu projeto de cadeia de suprimentos.

  • Teste de unidade: Execute testes de unidade como parte de uma rotina de integração contínua. Os testes de unidade devem ser extensos e rápidos. O ideal é que eles cubram 100% do código e sejam executados em menos de 30 segundos.

    Implemente o teste de unidade para verificar se a sintaxe e a funcionalidade de módulos individuais de código funcionam da maneira que deveriam, como produzir uma saída definida para uma entrada conhecida. Você também pode usar testes de unidade para verificar se os ativos de IaC são válidos.

    Aplique testes de unidade a todos os ativos de código, incluindo modelos e scripts.

  • Teste de fumaça: Os testes de fumaça verificam se uma carga de trabalho pode ser configurada em um ambiente de teste e é executada conforme o esperado. Os testes de fumaça não verificam a interoperabilidade dos componentes.

    Os testes de fumaça verificam se a metodologia de implantação da infraestrutura e do aplicativo funciona e se o sistema responde conforme o esperado após a conclusão do processo.

  • Teste de integração: Os testes de integração garantem que os componentes do aplicativo operem individualmente e determinem se os componentes podem interagir entre si conforme o esperado.

    Pode levar um tempo considerável para executar um grande conjunto de testes de integração. Por esse motivo, é melhor incorporar o princípio de shift-left e realizar testes desde o início do ciclo de vida do desenvolvimento de software (SDLC). Reserve os testes de integração para cenários que você não pode testar com um teste de fumaça ou um teste de unidade.

    Você pode executar processos de teste de longa duração em um intervalo regular, se necessário. Um intervalo regular oferece um bom equilíbrio e detecta problemas de interoperabilidade entre os componentes da aplicação no máximo um dia após seu surgimento.

    Alguns cenários de teste se beneficiam de execuções manuais. Use o teste manual quando precisar introduzir elementos de interatividade humana nos testes.

  • Teste de aceitação: Dependendo do contexto, você pode executar manualmente o teste de aceitação. Pode ser parcial ou totalmente automatizado. O teste de aceitação determina se o sistema de software atende às especificações de requisitos.

    O principal objetivo deste teste é avaliar a conformidade do sistema com os requisitos de negócios e determinar se o sistema atende aos critérios exigidos para entrega aos usuários finais.

Oportunidade de IA: Aprimore sua estratégia de teste para encontrar casos de borda focados no cliente e cenários difíceis de detectar e muitas vezes negligenciados. Comece usando sua análise e relatórios existentes para identificar lacunas de cobertura e, em seguida, use ferramentas como Copilot para gerar novos casos de teste e scripts. Otimize o conjunto de testes removendo testes redundantes para melhorar a velocidade e a eficiência. Considere uma solução de IA agente que analisa o uso de produção, os dados de monitoramento e os defeitos históricos para localizar padrões e criar automaticamente testes na base de código que correspondam aos padrões da sua organização.

Implementar barreiras de qualidade em processos de aprovação de código

Implemente portões de qualidade em todo o processo de promoção de código por meio de testes. Promova seu código por meio de ambientes mais baixos, como desenvolvimento e teste, antes de avançar para ambientes mais altos, como preparo e produção. Defina portões de qualidade claros e metas para cada estágio e promova apenas alterações na produção depois que eles atendem a esses critérios. Seus requisitos de negócios determinam o foco dos portões de qualidade. Considere também os princípios fundamentais do Well-Architected Framework: Confiabilidade, Segurança e Eficiência de Desempenho.

Integre fluxos de trabalho de aprovação aos portões de qualidade. Defina e automatize claramente os fluxos de trabalho de aprovação quando apropriado. Defina critérios de aceitação de qualidade em sua automação para que você possa percorrer seus portões de forma eficiente e segura.

Oportunidade de IA: Elimine gargalos durante as revisões roteando automaticamente as PRs para os SMEs (especialistas em assuntos certos). Comece com Copilot para avaliar o escopo e o impacto. Em seguida, adicione uma integração de CI/CD agente para avaliar alterações de código, configurações e padrões de aprovação. Dê acesso de privilégio mínimo somente a artefatos necessários, como repositórios, pipelines, dados de configuração, histórico de incidentes e logs de aprovação. Com esse acesso, você pode avaliar o impacto, atribuir revisores, identificar gargalos e recomendar aprovação automática ou revisão extra. Para cargas de trabalho de alto valor, use dados históricos para treinar modelos que prevejam o risco de implantação e os resultados de aprovação. Mantenha os humanos informados e seja cauteloso com a aprovação automática.

Suporte ao Azure

O Azure DevOps é uma coleção de serviços que ajudam você a criar uma prática de desenvolvimento colaborativa, eficiente e consistente.

O Azure Pipelines fornece serviços de build e versão para dar suporte a CI/CD em seus aplicativos.

O GitHub Actions para Azure se integra ao Azure para simplificar as implantações. Use o GitHub Actions para automatizar processos de CI/CD. Você pode criar fluxos de trabalho que criam e testam cada solicitação de pull em seu repositório ou implantar solicitações de pull mescladas na produção.

Você pode usar o Terraform, o Bicep e o Azure Resource Manager para implantações de IaC. Dependendo de seus requisitos e da familiaridade de sua equipe com as ferramentas, você pode usar uma ou mais dessas ferramentas para suas implantações e gerenciamento dos recursos.

Exemplo

Para obter um exemplo que mostra como usar o Azure Pipelines para criar um pipeline de CI/CD, consulte Arquitetura de linha de base do Azure Pipelines.

Lista de verificação de excelência operacional

Consulte o conjunto completo de recomendações.