Amazon Web Services: Tudo que Você Deve Saber - Parte 6 (Gerenciando Servidores e Aplicações)

Amazon Web Services: Tudo que Você Deve Saber




Gerenciando Servidores e Aplicações

Filosofia

  • Os princípios do aplicativo Twelve-Factor da Heroku listam algumas práticas recomendadas gerais para a implantação de aplicativos na nuvem. Recomendo a leitura, mesmo para sysadmins, afinal são tempos de DevOps! :)
  • Animais de estimação vs gado: trate os servidores como gado, como não animais de estimação. Ou seja, desenhe seus sistemas para que os componentes de infraestrutura sejam descartáveis (lembre isso aos devs, sysadmin!). Deve ser minimamente preocupante se um servidor for destruído inesperadamente.
  • O conceito de infraestrutura imutável é uma extensão dessa ideia.
  • Minimize o estado da aplicação nas instâncias EC2. Em geral, as instâncias devem poder ser mortas ou morrer inesperadamente com impacto mínimo. O estado que está em seu aplicativo deve se mover rapidamente para RDS, S3, DynamoDB, EFS ou outros armazenamentos de dados que não estejam na instância. O EBS também é uma opção, embora geralmente não seja o volume inicializável, e o EBS exigirá uma nova montagem manual ou automática.

Gerenciamento de Configuração do Servidor

  • Há um  grande conjunto de ferramentas de código aberto para gerenciar a configuração das instâncias do servidor.
  • Geralmente, eles não são dependentes de nenhuma infraestrutura de nuvem específica e trabalham com qualquer variedade de Linux (ou em muitos casos, uma variedade de sistemas operacionais).
  • As principais ferramentas de gerenciamento de configuração são: Puppet, Chef, Ansible e Saltstack. Estes não são o foco aqui, mas podemos mencioná-los conforme eles se relacionam com a AWS.

Containers e AWS

  • A Docker e a tendência de containers estão mudando a forma como muitos servidores e serviços são implantados em geral.
  • Os containers são projetados como forma de empacotar suas aplicações e todas as suas dependências de forma conhecida. Quando você constrói um container, você está incluindo todas as bibliotecas ou binários que sua aplicação precisa, fora do kernel. Uma grande vantagem desta abordagem é que é fácil testar e validar um container localmente sem se preocupar com alguma diferença entre o seu computador e os servidores em que você está implantado.
  • Uma consequência disso é que você precisará de menos AMIs e scripts de inicialização; Para a maioria das implantações, o único script de inicialização que você precisa é um modelo que obtém uma imagem do docker exportada e a executa.
  • Empresas que estão abraçando arquiteturas de microsserviço frequentemente irão se voltar para implantações baseadas em containers.
  • AWS lançou a ECS Como um serviço para gerenciar clusters via Docker no final de 2014, embora muitas pessoas ainda utilizem o Docker diretamente.

Visibilidade

  • Armazene e monitore dados de instância (como identificação de instância, zona de disponibilidade, etc.) e informações de implantação (ID de compilação de aplicativo, revisão Git, etc.) em seus logs ou relatórios. O serviço de metadados de instância pode ajudar a coletar alguns dos dados AWS que você precisará.
  • Use serviços de gerenciamento de logs: assegure-se de configurar uma maneira de visualizar e gerenciar logs externamente a partir de servidores.
    • Serviços baseados em nuvem, como a Sumo Logic, Splunk Cloud, Scalyr, e Loggly são os mais fáceis de configurar e usar (e também os mais caros, o que pode ser um fator dependendo da quantidade de dados de log que você possui).
    • Principais alternativas de código aberto incluem Elasticsearch, Logstash, Kibana (o “Elastic Stack”) e Graylog.
    • Se você pode pagar (você tem poucos dados ou muito dinheiro) e não tem necessidades especiais, faz sentido usar os serviços hospedados sempre que possível, uma vez que a configuração de seus próprios sistemas de processamento de log escalável é notoriamente demorada.
  • Métricas de rastreamento e gráfico: o AWS Console pode mostrar gráficos simples do CloudWatch, você normalmente vai querer rastrear e ver gráficos de muitos tipos de métricas do CloudWatch e seus aplicativos. Recolha e exporte métricas úteis em todos os lugares que você puder (e enquanto o volume for gerenciável o suficiente, você pode pagar).
    • Serviços como Librato, KeenIO, e Datadog tem recursos mais sofisticados ou melhores interfaces de usuário que podem economizar muito tempo. (Uma comparação mais detalhada está aqui).
    • Use Prometheus ou Graphite como bancos de dados de séries temporais para suas métricas (ambos são de código aberto).
    • A Grafana pode visualizar com os painéis as métricas armazenadas de ambos os bancos de dados da série temporal (também de código aberto).

Dicas para gerenciar servidores


  • Configurações do fuso horário nos servidores: a menos que seja absolutamente necessário, configure sempre o fuso horário nos servidores para UTC (veja as instruções para sua distribuição, como Ubuntu, CentOS ou Amazon Linux). Numerosos sistemas distribuídos dependem do tempo de sincronização e coordenação e a UTC fornece o plano de referência universal: não está sujeito a mudanças de horário de verão e ajustes na hora local. Também irá poupar-lhe muita depuração de dor de cabeça com problemas difíceis de fuso horários e fornecer uma linha de tempo coerente de eventos em seus sistemas de log e auditoria.
  • NTP e tempo preciso: se você não estiver usando o Amazon Linux (que vem pré-configurado), você deve confirmar que seus servidores configurem NTP corretamente, para evitar uma deriva de tempo insidiosa (o que pode causar todos os tipos de problemas, desde quebrar chamadas de API até registros enganadores). Isso deve ser parte de sua configuração automática para cada servidor. Se o tempo já deriva substancialmente (geralmente> 1000 segundos), lembre-se de que o NTP não o desligará, então talvez seja necessário corrigir manualmente (por exemplo, assim no Ubuntu).
  • Testando infraestrutura imutável: se você deseja ser pró-ativo ao testar a capacidade do seu serviço para lidar com a falha ou terminação da instância, pode ser útil testar o encerramento da instância aleatoriamente durante o horário comercial, o que irá expor esses problemas no momento em que os engenheiros estejam disponíveis para identificar e consertar. É o tipo de exercício que a Netflix recomenda e tem até ferramenta pra isso (especificamente, Chaos Monkey). Alternativamente, chaos-lambda da BBC é uma opção leve que é executada na AWS Lambda.

Christian Guerreiro

Professor por vocação, blogueiro e servidor público por opção, amante da tecnologia e viciado em informação.


Ensino a distância em Tecnologia da Informação: Virtualização com VMware, Big Data com Hadoop, Certificação ITIL 2011 Foundations e muito mais.


Suporte o Tecnologia que Interessa!

Você acha que as informações compartilhadas aqui são úteis?
Então me ajude a produzir ainda mais e melhores conteúdos!


É muito fácil. Basta divulgar nossos treinamentos pra alguém que conheça!


E se for de Salvador, podemos estruturar um curso presencial para sua empresa!

Eu vou ficar muito grato (e quem fizer os curso também :)!