Recomendações para práticas de implantação seguras
Aplica-se a esta recomendação da lista de verificação do Azure Well-Architected Framework Operational Excellence:
OE: 11 | Defina claramente as práticas de implantação seguras da carga de trabalho. Enfatize os ideais de métodos de liberação pequenos, incrementais e com controle de qualidade. Use padrões modernos de implantação e técnicas de exposição progressiva para controlar o risco. Considere implantações de rotina e implantações de emergência ou hotfix. |
---|
Este guia descreve as recomendações para o uso de práticas de implantação segura (SDP). Processos e procedimentos de implantação seguros definem como fazer e implantar alterações com segurança em sua carga de trabalho. A implementação do SDP exige que você pense nas implantações através das lentes do gerenciamento de riscos. Você pode minimizar o risco de erro humano em suas implantações e limitar os efeitos de implantações problemáticas em seus usuários implementando o SDP.
Principais estratégias de design
Há quatro diretrizes importantes a serem lembradas ao implementar práticas de implantação seguras:
Segurança e consistência: Todas as alterações na carga de trabalho de produção são inerentemente arriscadas e devem ser feitas com foco na segurança e consistência.
Exposição progressiva: você pode minimizar o raio de explosão potencial de problemas causados pela implantação adotando um modelo de implantação de exposição progressiva.
Modelos de integridade: as implantações devem passar por verificações de integridade antes que cada fase de exposição progressiva possa começar.
Detecção de problemas: quando os problemas são detectados, a implantação deve ser interrompida imediatamente e a recuperação iniciada.
As seções a seguir fornecem recomendações detalhadas sobre cada um desses pontos.
Garanta a segurança e a consistência das implantações
Se estiver implantando uma atualização no código do aplicativo, na infraestrutura como código (IaC), no sinalizador de recursos ou em uma atualização de configuração, você estará introduzindo riscos na carga de trabalho. Não há implantações de baixo risco na produção. Toda implantação deve seguir um padrão e deve ser automatizada para reforçar a consistência e minimizar o risco de erro humano. É fundamental que a cadeia de suprimentos de carga de trabalho e os pipelines de implantação sejam confiáveis, seguros e tenham padrões de implantação claramente definidos. Trate cada implantação como um risco possível e sujeite cada implantação ao mesmo nível de gerenciamento de risco. Apesar dos riscos, você deve continuar a implantar alterações regulares em sua carga de trabalho. Deixar de implantar atualizações regulares apresenta outros riscos, como vulnerabilidades de segurança que devem ser abordadas por meio de implantações. Para obter mais informações, consulte Recomendações para projetar uma cadeia de suprimentos de desenvolvimento de carga de trabalho.
Implantações pequenas frequentes são preferíveis a implantações grandes e pouco frequentes. Pequenas alterações são mais fáceis de resolver quando surgem problemas e implantações frequentes ajudam sua equipe a criar confiança no processo de implantação. Também é importante que você aprenda com a produção revisando seus processos de carga de trabalho quando encontrar uma anomalia durante a implantação. Você pode encontrar pontos fracos no design de sua infraestrutura ou implantação. Quando ocorrerem problemas durante as implantações, certifique-se de que as autópsias sem culpa façam parte do processo de SDP para capturar lições sobre o incidente.
Adote um modelo de exposição progressiva
Quando ocorrem problemas de implantação, o objetivo é detectá-los o mais cedo possível para minimizar o efeito sobre os usuários finais. Implemente um modelo de implantação de distribuição gradual, também conhecido como modelo de exposição progressiva, para atingir essa meta. As implantações canário são um exemplo comum de exposição progressiva. Nesse modelo de implantação, um pequeno grupo de usuários internos ou externos recebe o novo recurso primeiro. Depois que o primeiro grupo executa a nova versão sem problemas, o recurso é implantado em grupos sucessivamente maiores até que toda a população de usuários esteja executando a nova versão. Os sinalizadores de recursos normalmente são usados para habilitar a nova versão para os usuários de destino em implantações canárias.
Outro modelo de implantação comum é uma abordagem azul-verde. Nesse modelo, dois conjuntos idênticos, ou pools, de infraestrutura de carga de trabalho são implantados. Ambos os pools são capazes de lidar com uma carga de produção completa. O primeiro pool (azul) executa a versão atual da implantação em que todos os usuários chegam. O segundo pool (verde) é atualizado com o novo recurso e testado internamente. Após o teste interno, um subconjunto do tráfego de produção é roteado do pool azul para o pool verde. Assim como as implantações canário, a distribuição é progressiva à medida que você transfere mais tráfego para o pool verde em ondas de distribuição sucessivamente maiores. Depois de concluir a distribuição, o pool de atualização se torna o pool azul e o pool verde está pronto para a próxima implantação. As duas piscinas são logicamente separadas uma da outra para proteger contra avarias. Você pode implantar uma variação do modelo azul-verde em uma carga de trabalho que usa o padrão de design Selos de Implantação implantando em um selo por vez.
Em ambos os modelos, o tempo entre cada fase da distribuição deve ser longo o suficiente para permitir que você monitore as métricas de integridade da carga de trabalho. Você deve fornecer amplo tempo de consolidação, tempo entre grupos de distribuição, para ajudar a garantir que usuários de diferentes regiões ou usuários que executam tarefas diferentes tenham tempo para usar a carga de trabalho em sua capacidade normal. Os tempos de cozimento devem ser medidos em horas e dias, em vez de minutos. Os tempos de cozimento também devem aumentar para cada grupo de distribuição para que você possa levar em conta diferentes fusos horários e padrões de uso ao longo do dia.
Desenvolva modelos robustos de integridade da carga de trabalho
Desenvolva um modelo de integridade robusto como parte de sua plataforma de observabilidade e estratégias de confiabilidade. Seu modelo de integridade deve fornecer visibilidade detalhada dos componentes e da integridade geral da carga de trabalho. Durante uma implantação, se você receber um alerta sobre uma alteração de integridade reldisparada a um usuário final, a distribuição deverá ser interrompida imediatamente e uma investigação sobre a causa do alerta deverá ser realizada para ajudar a determinar o próximo curso de ação. Se não houver problemas relatados pelos usuários finais e todos os indicadores de integridade permanecerem verdes durante todo o tempo de cozimento, a distribuição deverá continuar. Certifique-se de incluir métricas de uso em seu modelo de integridade para ajudar a garantir que a falta de problemas relatados pelo usuário e sinais de integridade negativos não estejam ocultando um problema. Para obter mais informações, consulte Criando um modelo de integridade.
Implementar mecanismos de detecção de falhas
Quando sua implantação causa um problema em um dos grupos de distribuição, a distribuição deve ser interrompida imediatamente. Uma investigação sobre a causa do problema e a gravidade dos efeitos deve ser realizada assim que o alerta for recebido. A recuperação do problema pode incluir:
Reverter a implantação desfazendo as alterações feitas na implantação e revertendo para a última configuração de trabalho conhecida.
Implementando a implantação resolvendo o problema no meio da distribuição. Você pode resolver problemas no meio da distribuição aplicando um hotfix ou minimizando o problema.
Implantando nova infraestrutura usando a última configuração de trabalho conhecida.
A reversão de alterações, especialmente alterações de banco de dados, esquema ou outras alterações de componentes com estado, pode ser complexa. Suas diretrizes de SDP devem fornecer instruções claras sobre como lidar com alterações de dados de acordo com o design do patrimônio de dados para sua carga de trabalho. Da mesma forma, o rollforward deve ser tratado com cuidado para garantir que o SDP não seja negligenciado e que o hotfix ou outros esforços de minimização sejam executados com segurança.
Estabeleça protocolos para implantações de emergência
Implemente o controle de versão em seus artefatos de build para ajudar a garantir que você possa reverter e avançar quando necessário.
Use um fluxo de lançamento ou uma estrutura de ramificação baseada em tronco, que impõe uma colaboração totalmente sincronizada entre a equipe de desenvolvimento, em vez de um Gitflow ou uma estrutura de ramificação baseada em ambiente.
Automatize o máximo possível do seu SDP. Para obter diretrizes detalhadas sobre como automatizar a IaC e os processos de integração contínua e entrega contínua de aplicativos (CI/CD), consulte Recomendações para implementar a automação.
Use práticas de CI para integrar regularmente alterações de código em repositórios. As práticas de CI podem ajudá-lo a identificar conflitos de integração e reduzir a probabilidade de mesclagens grandes e arriscadas. Para obter mais informações, consulte o Guia de integração contínua.
Use sinalizadores de recursos para habilitar ou desabilitar seletivamente novos recursos ou alterações na produção. Os sinalizadores de recursos podem ajudá-lo a controlar a exposição do novo código e reverter rapidamente a implantação se surgirem problemas.
Implante alterações em ambientes de preparo que espelham seu ambiente de produção. Os ambientes de prática permitem que você teste as alterações em uma configuração controlada antes de implantar no ambiente ativo.
Estabeleça verificações de pré-implantação, incluindo revisão de código, verificações de segurança e verificações de conformidade, para ajudar a garantir que as alterações sejam seguras para implantação.
Implemente disjuntores para interromper automaticamente o tráfego para um serviço que está com problemas. Isso pode ajudar a evitar uma maior degradação do sistema.
Protocolos SDP de emergência
Estabeleça protocolos prescritivos que definam como seu SDP pode ser ajustado para um hotfix ou para problemas de emergência, como uma violação de segurança ou exposição a vulnerabilidades. Por exemplo, seus protocolos SDP de emergência podem incluir:
Aceleração da etapa de promoção e aprovação.
Teste de fumaça e aceleração de testes de integração.
Redução do tempo de cozimento.
Em alguns casos, a emergência pode limitar a qualidade e os portões de teste, mas os portões ainda devem ser executados o mais rápido possível como um exercício fora de banda. Certifique-se de definir quem pode aprovar a aceleração do SDP em uma emergência e os critérios que devem ser atendidos para que a aceleração seja aprovada. Alinhe seus protocolos SDP de emergência com seu plano de resposta a emergências para ajudar a garantir que todas as emergências sejam tratadas de acordo com os mesmos protocolos.
Considerações
Criar e manter práticas de implantação seguras é complexo. Seu sucesso na implementação completa de padrões robustos depende da maturidade de suas práticas em muitas áreas de desenvolvimento de software. O uso de automação, somente IaC para alterações de infraestrutura, consistência nas estratégias de ramificação, uso de sinalizadores de recursos e muitas outras práticas podem ajudar a garantir a implantação segura. Use este guia para otimizar sua carga de trabalho e informar seus planos de melhoria à medida que suas práticas evoluem.
Facilitação do Azure
O Azure Pipelines e o GitHub Actions dão suporte a implantações de vários estágios usando portões de aprovação, que podem ajudá-lo a projetar sua distribuição de exposição progressiva para implantações.
Use os slots de preparo do Serviço de Aplicativo do Azure para alternar facilmente entre as versões do código. Os slots de preparo são úteis para testes em ambientes de preparo e podem ser usados para implantações azul-verde.
Armazene e gerencie seus sinalizadores de recursos de aplicativo Web na Configuração de Aplicativos do Azure. Usando esse serviço, você pode criar, alterar e implantar recursos em um plano de gerenciamento unificado.
Implante aplicativos de carga de trabalho em sua máquina virtual usando aplicativos de VM.
Use os balanceadores de carga do Azure para implementar estratégias de implantação e expor a integridade de seus aplicativos de carga de trabalho usando recursos nativos.
Use a extensão de Integridade do Aplicativo para relatar a integridade do aplicativo de dentro de uma instância do Conjunto de Dimensionamento de Máquinas Virtuais. A extensão investiga um ponto de extremidade do aplicativo local e atualiza o status de integridade com base nas respostas TCP/HTTP(S) recebidas do aplicativo.
Use os Aplicativos Lógicos do Azure para criar uma nova versão do aplicativo sempre que uma atualização for feita nele. O Azure mantém um histórico de versões do aplicativo e pode reverter ou promover para qualquer versão anterior.
Muitos serviços de Banco de Dados do Azure fornecem funcionalidade de restauração pontual que pode ajudá-lo a reverter. Os serviços que oferecem suporte à restauração pontual incluem:
Exemplo
Consulte o guia de arquitetura de arquitetura de clusters do AKS (implantação azul-verde) do Serviço de Kubernetes do Azure para obter um exemplo de como usar esse modelo de implantação.
Links relacionados
- Extensão de integridade do aplicativo
- Configuração de Aplicativos do Azure
- Slots de preparo do Serviço de Aplicativo do Azure
- Azure Cosmos DB
- Banco de Dados do Azure para MySQL
- Banco de Dados do Azure para PostgreSQL
- Balanceadores de carga do Azure
- Aplicativos Lógicos do Azure
- Azure Pipelines
- Banco de Dados SQL do Azure
- Instância Gerenciada do SQL do Azure
- Construindo um modelo de integridade
- Guia de integração contínua
- Carimbos de implantação
- Considerações de desempenho para sua infraestrutura de implantação
- Engenharia de lançamento: desenvolvimento de aplicativos
- Engenharia de lançamento: Integração contínua
- Engenharia de lançamento: Reversão
- Testando seu aplicativo e o ambiente do Azure
- Aplicativos VM
Links da comunidade
Lista de verificação de Excelência Operacional
Consulte o conjunto completo de recomendações.