O blog da AWS

Avaliação contínua da resiliência de aplicações utilizando AWS Resilience Hub e AWS CodePipeline

Por Scott Bryen, Arquiteto de Soluções Sênior e
Elie El khoury, Especialista do setor financeiro 

 

À medida que usuários adquiram uma mentalidade de DevOps e adotam um modelo de integração/entrega contínua a fim de implementar mudanças com maior velocidade, se torna fundamental avaliar o impacto de cada mudança na resiliência das aplicações. Este blog mostra um padrão de arquitetura para automatizar avaliações de resiliência como parte de seu pipeline de CI/CD ( Continuous Integration / Continuous Delivery). Ao executar automaticamente avaliações de resiliência nos pipelines de CI/CD, as equipes de desenvolvimento podem entender rapidamente se uma mudança afeta negativamente a resiliência de um aplicativo. O pipeline pode então interromper a implantação em demais ambientes, como QA/UAT e Produção, até que os problemas de resiliência sejam resolvidos.O  AWS Resilience Hub é um serviço gerenciado que oferece aos usuários uma forma centralizada de definir, validar e monitorar a resiliência das suas aplicações na AWS. Ele é integrado ao AWS Fault Injection Simulator (FIS), um serviço de engenharia de caos, para prover simulações de injeção de falhas similares a falhas reais. Usando o AWS Resilience Hub, você pode avaliar suas aplicações para encontrar oportunidades de aprimoramento de resiliência. Isso permitirá que você valide os objetivos de tempo de recuperação (RTO) e ponto de recuperação (RPO) de suas aplicações e garanta a continuidade dos negócios enquanto reduz os custos de recuperação. O Resilience Hub também fornece APIs para integrar sua avaliação e seus testes em seus pipelines de CI/CD para validação contínua da resiliência.O AWS CodePipeline é um serviço de implementação contínua totalmente gerenciado para atualizações rápidas e confiáveis de aplicações e elementos de infraestrutura. Você pode usar o AWS CodePipeline para modelar e automatizar seus processos de implementação de software. Isso permite um aumento de velocidade e qualidade das atualizações de software executando alterações por meio de um conjunto consistente de verificações de qualidade.

Avaliações contínuas de resiliência

A Figura 1 mostra a arquitetura de automação de avaliações de resiliência em um ambiente multi-contas. O AWS CodePipeline, o AWS Step Functions e o AWS Resilience Hub são provisionados na conta de implantação, enquanto as pilhas de aplicações do AWS CloudFormation são importadas da conta que possui sua carga de trabalho. Esse padrão se baseia na funcionalidade do AWS Resilience Hub de importar pilhas do CloudFormation de contas e/ou regiões diferentes ao encontrar uma estrutura de aplicação.

Figura 1. Padrão de arquitetura de alto nível para automatizar avaliações de resiliência

Adicionar aplicativo ao AWS Resilience Hub

Comece registrando sua aplicação no AWS Resilience Hub e atribuindo uma política de resiliência. Isso pode ser feito por meio do Console AWS ou através do CloudFormation. Nesse caso, a aplicação foi registrada por meio do Console AWS. O post de Sebastien Stormacq, Meça e melhore a resiliência de aplicações com o AWS Resilience Hub, mostra como registrar uma aplicação no AWS Resilience Hub.

Em um ambiente com várias contas, clientes possuem uma conta AWS para cada ambiente distinto, e recomendamos que se separe os recursos de CI/CD em outra conta dedicada. Neste post, a aplicação registrada no AWS Resilience Hub foi criada na conta de implantação e os recursos foram descobertos e implementados usando uma pilha do CloudFormation da conta de ambiente de aplicação. São necessárias permissões adequadas para utilizar o AWS Resilience Hub para gerenciar aplicações em várias contas.

Adding application to AWS Resilience HubFigura 2. Adicionar aplicativo ao AWS Resilience Hub

Crie o AWS Step Function para executar a avaliação de resiliência

Sempre que você faz uma alteração no seu aplicativo CloudFormation, você precisa atualizar e publicar a versão mais recente no AWS Resilience Hub para garantir que você esteja avaliando as mudanças mais recentes. Agora que as integrações do SDK do AWS Step Functions oferecem suporte ao AWS Resilience Hub, você pode criar uma máquina de estado para coordenar o processo, que será acionado a partir do AWS CodePipeline.

O AWS Step Functions é um serviço low-code de fluxo de trabalho visual que os desenvolvedores usam para criar aplicativos distribuídos, automatizar processos de TI e de negócios e criar pipelines de dados e aprendizado de máquina usando os serviços da AWS. Os fluxos de trabalho gerenciam falhas, novas tentativas, paralelização, integrações de serviços e observabilidade para que os desenvolvedores possam se concentrar em uma lógica de negócios de maior valor.

AWS Step Function for orchestrating AWS SDK callsFigura 3. AWS Step Function para orquestrar chamadas do AWS SDK

  • A primeira etapa do fluxo de trabalho é atualizar os recursos associados ao aplicativo definido no AWS Resilience Hub chamando ImportResourcesToDraftApplication.
  • Verifique se o processo de importação foi concluído usando um estado de espera, uma chamada para DescribeDraftAppVersionResourcesImportStatus e, em seguida, um estado de escolha para decidir se deseja prosseguir ou continuar aguardando.
  • Depois de concluído, publique o rascunho do aplicativo chamando publishAppVersion para garantir que estamos avaliando a versão mais recente.
  • Depois de publicado, invoque StartAppAssessment para iniciar uma avaliação de resiliência.
  • Verifique se a avaliação será concluída usando um estado de espera, uma chamada para DescribeAppAssessment e, em seguida, um estado de escolha para decidir se deseja progredir ou continuar aguardando.
  • No estado de escolha, use o status da avaliação da resposta para determinar se a avaliação está pendente, em andamento ou bem-sucedida.
  • Se for bem-sucedido, use o status de conformidade da resposta para determinar se deve progredir para o sucesso ou para o fracasso.
    • O status de conformidade será “PolicyMet” ou ”PolicyBreached”.
  • Se a política for violada, publique no SNS para alertar a equipe de desenvolvimento antes de progredir o status para fracasso.

Crie um estágio dentro do pipeline de código

Agora que criamos a AWS Step Function, precisamos integrá-la ao nosso pipeline. O post Entrega contínua refinada com CodePipeline e AWS Step Functions demonstra como você pode acionar uma Step Function a partir do AWS Code Pipeline.

Ao adicionar o estágio, você precisa passar o ARN da pilha que foi implantado no estágio anterior, bem como o ARN do aplicativo no AWS Resilience Hub. Eles serão necessários nas chamadas do SDK da AWS e você poderá transmiti-los como uma entrada Literal.

AWS CodePipeline stage step function inputFigura 4. Estágio do AWS CodePipeline com a entrada da step function

Example state using the input from AWS CodePipeline stageFigura 5. Exemplo de estado usando a entrada do estágio do AWS CodePipeline

Para obter mais informações sobre essas chamadas do SDK da AWS, consulte os documentos de referência da API do AWS Resilience Hub.

Os clientes geralmente executam suas cargas de trabalho em ambientes mais baixos de uma forma menos resiliente para economizar custos. É importante adicionar o estágio de avaliação no ponto apropriado do seu pipeline. Recomendamos adicionar isso ao seu pipeline após a implantação em um ambiente de teste que espelhe a produção, mas antes da implantação na produção. Ao fazer isso, você pode falhar rapidamente e interromper as mudanças que reduzirão a resiliência na produção.

Uma observação sobre cotas de serviço: o AWS Resilience Hub permite que você execute 20 avaliações por mês por aplicativo. Se você precisar aumentar essa cota, crie um ticket com o AWS Support.

Conclusão

Neste post, propomos uma abordagem para avaliar continuamente a resiliência como parte do seu pipeline de CI/CD usando o AWS Resilience Hub, o AWS CodePipeline e o AWS Step Functions. Essa abordagem permitirá que você entenda rapidamente se uma mudança enfraquecerá a sua resiliência.

O AWS Resilience Hub também gera experimentos recomendados do AWS FIS que você pode implantar e usar para testar a resiliência do seu aplicativo. Além de avaliar a resiliência, também recomendamos que você integre a execução desses testes em seu pipeline. O post Teste de caos com o AWS Fault Injection Simulator e o AWS CodePipeline descreve como isso pode ser implementado.

 

Este artigo foi traduzido do Blog da AWS em Inglês.

 


Sobre os autores

Scott Bryen é um Arquiteto de Soluções Sênior que trabalha na equipe de serviços financeiros da AWS no Reino Unido. Ele ajuda seus clientes de serviços financeiros a acelerar sua jornada na nuvem e a usar a nuvem para transformar seus negócios.

 

 

 

 

Elie El khoury é especialista do setor financeiro na AWS. Elie mora na cidade de Nova York, onde trabalha com clientes de serviços financeiros para ajudá-los a projetar, implantar e dimensionar seus aplicativos na nuvem. Fora do trabalho, Elie gosta de andar de bicicleta, fazer caminhadas e passar o tempo com amigos e familiares.