Well-Architected Framework – Operational Excellence – Parte 2

Olá, pessoal! Tudo bem?

Encerrando o assunto sobre o terceiro pilar do Well-Architected Framework, vamos falar sobre as áreas de Operação e Evolução. Para quem quiser ler a primeira parte do post, ele pode ser encontrado aqui.

Operação

O sucesso operacional tem como base as metas definidas no negócio, e para atingi-los, precisamos de métricas eficientes para entender o estado atual do workload, avaliando sua performance em relação a estas metas e respondendo rapidamente a eventos que venham a acontecer.

Entendendo a saúde operacional

Boas métricas devem ser definidas para entendermos o comportamento do workload, comparando-as a resultados já pré-definidos. As métricas a serem coletadas deverão contemplar, no mínimo, a saúde individual de cada um dos componentes do workload e o seu estado geral, considerando métricas operacionais e de negócio. Desta forma, poderemos obter insights rapidamente sobre a eficiência do workload, permitindo validar a aderência do mesmo aos objetivos técnicos e de negócio, além de permitir o aprimoramento dos processos operacionais.

Este pilar nos sugere os seguintes serviços para utilizarmos durante este processo:

  • Amazon CloudWatch: O Amazon CloudWatch permite a criação de dashboards, agrupando métricas, e facilitando a obtenção de insights sobre as mesmas;
  • Amazon CloudWatch Logs: Permite o armazenamento de logs de diversos serviços da AWS, que podem ser utilizados para a obtenção de insights sobre o workload;
  • Amazon ES: O Amazon ES (ou ElasticSearch Service) é o ElasticSearch gerenciado pela AWS. Ele nos permite analisar logs e métricas de monitoramento de forma fácil;
  • Personal Health Dashboard: É uma ferramenta da AWS que fornece informações sobre eventos que ocorrem em seu ambiente, que podem causar impacto em nossas contas/infraestruturas;
  • Service Health Dashboard: Fornece informações sobre a saúde individual dos serviços da AWS, em todas as regiões onde os mesmos estão disponíveis. Este dashboard permitindo identificarmos rapidamente se um eventual problema em nosso workload está em nosso domínio ou em domínio da AWS.

Respondendo aos eventos

Entendendo a saúde operacional do nosso workload, nos possibilita agir assertivamente e antecipadamente na respostas a eventos planejados (como a Black Friday) e não planejados (como a falha de um componente).

Os alertas causados por estes eventos devem ser tratados utilizando runbooks (para operações de rotina) e playbooks (para resolução de problemas) para garantir a consistência nos resultados. Sempre que possível, devemos automatizar a execução destes artefatos, principalmente para termos uma resposta imediata, evitando erro humano. Porém eventualmente intervenções manuais podem ser necessárias, especialmente em processos críticos e quando processos automatizados falharem.

Vale salientar também que cada alerta definido deve ter um “pai”, sendo endereçado a um time específico, que terá a responsabilidade de responder a estes eventos de forma adequada.

A AWS nos recomenda os serviços abaixo para nos auxiliar nesta tarefa:

  • AWS Lambda: A AWS Lambda permite facilmente a criação de funções (escritas em alguma linguagem de programação), permitindo a automação de procedimentos que podemos utilizar como resposta a eventos gerados no workload;
  • Amazon CloudWatch: O CloudWatch permite a agregação de logs e a criação de alarmes sobre padrões apresentados sobre estes logs, possibilitando a resposta rápida a eventos;
  • Amazon CloudWatch Events: Através do CloudWatch Events podemos definir alarmes sobre eventos que ocorrem nos serviços da AWS, permitindo a resposta automatizada a estes eventos;
  • Amazon SNS: O Amazon SNS é um serviço de mensagens da AWS, no formato publisher/subscriber, que permite o envio de notificações para uma série de serviços e protocolos diferentes, como SMS, HTTPS, SQS e Lambda, onde este último pode ser utilizado para automatizar a resposta a eventos do sistema;
  • Auto Scaling: Permite mantermos a disponibilidade do sistema efetuando scale in e scale out das instâncias EC2, em resposta a variações na demanda, com base em configurações pré-determinadas;
  • AWS Systems Manager: Permite gerenciarmos tarefas automatizadas em instâncias EC2.

Evolução

A evolução do workload e de operações, se dá pelo aprendizado obtido com a experiência adquirida através do tempo. Compartilhando este aprendizado, poderemos beneficiar outros times da empresa (e outros profissionais fora dela) fornecendo insights sobre o que foi aprendido.

Aprendendo com a experiência

Como qualquer processo de aprendizado, a observação é extremamente importante nesta prática. Por este motivo, enquanto operamos o nosso workload, devemos observar logs e métricas, afim de obter insights sobre onde podemos otimizá-lo. Somando isto a alguns outros parâmetros, como mudanças de prioridades operacionais e/ou de negócio, e lições aprendidas de outras fontes (como outras equipes), podemos planejar e executar melhorias nos processos operacionais e no próprio workload.

Durante o planejamento, podemos envolver desenvolvedores, profissionais das áreas de negócio entre outros, para que possam contribuir na identificação e priorização de tais melhorias. É interessante reforçar que é uma boa prática definir melhorias pequenas, que possam ser efetuadas de forma incremental, e que possibilitem o rollback, caso necessário.

Quanto a execução destas melhorias, a flexibilidade dos ambientes de nuvem nos viabilizam a experimentação. O que é importante, pois através de experimentos, podemos comparar seus resultados com resultados previamente estabelecidos, e validar a eficiência de tais melhorias.

Vale salientar que este processo não deve ser feito apenas no ambiente de produção, mas sim em todos os ambientes (Dev, Staging, QA, etc). E outro ponto importante é que este processo é cíclico, e deve ser efetuado regularmente.

Na AWS, podemos utilizar os seguintes serviços para nos auxiliar:

  • Amazon ES: A flexibilidade do ElasticSearch nos permite obter insights sobre logs e outros dados de forma rápida e segura;
  • Amazon QuickSight: É um serviço de BI que nos permite criar visualizações para obter insights dos nossos dados;
  • Amazon Athena: O Athena permite efetuarmos queries sobre arquivos existentes no S3, possibilitando a obtenção de informações sobre logs;
  • Amazon S3: Permite o armazenamento de logs. Inclusive, diversos serviços da AWS geram logs para o S3, bastando apenas uma pequena configuração;
  • Amazon CloudWatch: Possibilita o armazenamento de logs e extração de métricas, além de possibilitar criação de dashboards para facilitar a visualização das mesmas.

Compartilhando o aprendizado

Por fim, depois de passar pelo processo de aprendizado citado acima, é importante compartilhar o que foi aprendido com os demais times da empresa, afim de facilitar o desenvolvimento, reduzir erros reincidentes, e tornar este conhecimento mais solido dentro da organização.

Artefatos e documentos gerados durante o aprendizado, devem ser compartilhados (aplicando as devidas permissões, é claro), para que todos possam usufruir e obter novos conhecimentos dos mesmos.

Serviços que a AWS possui e que podem ser utilizados para auxiliar no compartilhamento são:

  • AWS IAM: Permite gerenciarmos o acesso a recursos compartilhados, sejam na mesma conta ou contas diferentes;
  • Amazon SNS: O Amazon SNS permite o envio de notificações como reflexo da publicação/atualização de recursos;
  • AWS CodeCommit: O CodeCommit é o VCS da AWS, que possibilita controlarmos o fonte de infraestrutura como código (IaC), que pode ser compartilhado com outros times (gerenciando permissões com o IAM);
  • AWS Lambda: Pode ser criada para executar processos operacionais, e pode ser compartilhada com outras contas da AWS;
  • AWS CloudFormation: Permite a padronização da infraestrutura utilizando código, inclusive podendo ser utilizado como documentação e também compartilhado;
  • Amazon Machine Images (AMIs): AMIs são imagens para EC2 pré-configuradas, que também podem ser compartilhadas publicamente ou com outras contas da AWS.

Conclusão

O sucesso do workload, e em muitos casos, do negócio, dependem fortemente de como entendemos os requisitos, definimos prioridades, refinamos o time, observamos e respondemos a eventos, e evoluímos. Estas atividades, entre outras, fazem parte da excelência operacional, que pode ser considerada um dos pilares mais importantes do Well-Architected Framework.

Chegamos ao final do nosso papo sobre mais um pilar. Espero que tenham gostado!

Um grande abraço e boa semana!

Postado em AWS

Deixe uma resposta