REL08-BP04 Implantar usando infraestrutura imutável - Pilar Confiabilidade

REL08-BP04 Implantar usando infraestrutura imutável

A infraestrutura imutável é um modelo que não requer atualizações, patches de segurança ou alterações na configuração no local nas workloads de produção. Quando uma alteração é necessária, a arquitetura é criada em uma nova infraestrutura e implantada na produção.

Siga uma estratégia de implantação de infraestrutura imutável para aumentar a confiabilidade, a consistência e a reprodutibilidade nas implantações de workload.

Resultado desejado: com uma infraestrutura imutável, nenhuma modificação no local é permitida para executar recursos de infraestrutura em uma workload. Em vez disso, quando uma alteração é necessária, um novo conjunto de recursos atualizados da infraestrutura que contém todas as alterações necessárias é implantado paralelamente aos recursos existentes. Essa implantação é validada automaticamente e, se bem-sucedida, o tráfego é gradualmente transferido para o novo conjunto de recursos.

Essa estratégia de implantação aplica-se a atualizações de software, patches de segurança, alterações na infraestrutura, atualizações de configuração e atualizações de aplicações, entre outros.

Práticas comuns que devem ser evitadas:

  • Implementação de mudanças no local em recursos da infraestrutura em execução.

Benefícios de implementar esta prática recomendada:

  • Maior consistência em todos os ambientes: como não há diferenças nos recursos de infraestrutura entre os ambientes, a consistência aumenta e os testes são simplificados.

  • Redução nos desvios de configuração: ao substituir recursos de infraestrutura por uma configuração conhecida e com controle de versão, a infraestrutura é redefinida para um estado conhecido, testado e confiável, evitando assim desvios de configuração.

  • Implantações atômicas confiáveis: as implantações são concluídas com sucesso ou nada muda, aumentando a consistência e a confiabilidade no processo de implantação.

  • Implantações simplificadas: as implantações são simplificadas porque não precisam oferecer suporte a atualizações. As atualizações são apenas novas implantações.

  • Implantações mais seguras com processos de reversão e recuperação rápidos: as implantações são mais seguras porque a versão de trabalho anterior não foi alterada. Em caso de erros, é possível reverter para ela.

  • Postura de segurança aprimorada: ao não permitir alterações na infraestrutura, os mecanismos de acesso remoto (como o SSH) podem ser desabilitados. Isso reduz o vetor de ataque, melhorando a postura de segurança da organização.

Nível de risco exposto se esta prática recomendada não for estabelecida: Médio

Orientação para implementação

Automação

Ao definir uma estratégia de implantação de infraestrutura imutável, é recomendável usar a automação o máximo possível para aumentar a reprodutibilidade e minimizar o potencial de erro humano. Para obter mais detalhes, consulte REL08-BP05 Implantar alterações com automação e Automatizar implantações seguras e sem intervenção manual.

Com a infraestrutura como código (IaC), as etapas de provisionamento, orquestração e implantação da infraestrutura são definidas de forma programática, descritiva e declarativa e armazenadas em um sistema de controle de código-fonte. O uso da infraestrutura como código simplifica a automatização da implantação da infraestrutura e ajuda a obter a imutabilidade da infraestrutura.

Padrões de implantação

Quando uma mudança na workload é necessária, a estratégia de implantação da infraestrutura imutável exige que um novo conjunto de recursos da infraestrutura seja implantado, incluindo todas as alterações necessárias. É importante que esse novo conjunto de recursos siga um padrão de implantação que minimize o impacto sobre o usuário. Há duas estratégias principais para essa implantação:

Implantação canário: a prática de direcionar um pequeno número de seus clientes para a nova versão, geralmente em execução em uma única instância de serviço (o canário). Em seguida, você examina profundamente todas as alterações de comportamento ou erros gerados. O tráfego poderá ser removido da implantação canário se problemas críticos forem encontrados, e os usuários poderão ser enviados de volta para a versão anterior. Se a implantação for bem-sucedida, você poderá continuar implantando na velocidade desejada enquanto monitora as alterações em busca de erros até a implantação ser concluída. O AWS CodeDeploy pode ser configurado com uma configuração de implantação que permita uma implantação canário.

Implantação azul/verde: semelhante à implantação canário, exceto que uma frota completa da aplicação é implantada em paralelo. Você alterna as implantações entre as duas pilhas (azul e verde). Novamente, é possível enviar o tráfego para a nova versão e voltar para a versão antiga se houver problemas na implantação. Normalmente, todo o tráfego é chaveado de uma só vez. No entanto, você também pode usar frações do tráfego para cada versão para aumentar a adoção da nova versão usando os recursos de roteamento de DNS ponderado do Amazon Route 53. O AWS CodeDeploy e o AWS Elastic Beanstalk podem ser definidos com uma configuração de implantação que permitirá uma implantação azul/verde.

Diagrama mostrando a implantação azul/verde com o AWS Elastic Beanstalk e o Amazon Route 53

Figura 8: Implantação azul/verde com o AWS Elastic Beanstalk e o Amazon Route 53

Detecção de desvios

Um desvio é definido como qualquer alteração que faz com que um recurso de infraestrutura tenha um estado ou configuração diferente do esperado. Alterações não gerenciadas da configuração, sejam de que tipo for, são contrárias ao conceito de infraestrutura imutável e devem ser detectadas e corrigidas para que a implementação da infraestrutura imutável seja bem-sucedida.

Etapas de implementação

  • Proíba a modificação no local dos recursos de infraestrutura em execução.

    • É possível usar o AWS Identity and Access Management (IAM) para especificar quem ou o que pode acessar serviços e recursos na AWS, gerenciar centralmente permissões refinadas e analisar o acesso para refinar permissões na AWS.

  • Automatize a implantação dos recursos da infraestrutura para aumentar a reprodutibilidade e minimizar a possibilidade de erro humano.

    • Conforme descrito em Introdução a DevOps no whitepaper da AWS, a automação é a base dos serviços da AWS e possui suporte interno em todos os serviços, recursos e ofertas.

    • Pré-preparar a imagem de máquina da Amazon (AMI) pode acelerar o tempo de lançamento. O EC2 Image Builder é um serviço da AWS totalmente gerenciado que ajuda a automatizar a criação, a manutenção, a validação, o compartilhamento e a implantação de AMIs personalizadas do Linux ou do Windows.

    • Alguns dos serviços compatíveis com automação são:

      • O AWS Elastic Beanstalk é um serviço para implantação e escalação rápidas de aplicações Web desenvolvidas com Java, .NET, PHP, Node.js, Python, Ruby, Go e Docker em servidores familiares, como Apache, NGINX, Passenger e IIS.

      • O AWS Proton ajuda as equipes de plataforma a conectar e coordenar todas as diferentes ferramentas que suas equipes de desenvolvimento precisam para provisionamento de infraestrutura, implantação de código, monitoramento e atualizações. O AWS Proton torna possível a infraestrutura automatizada na forma de provisionamento de código e implantação de aplicações de tecnologia sem servidor baseadas em contêiner.

    • A utilização da infraestrutura como código facilita a automatização da implantação da infraestrutura e ajuda a obter a imutabilidade da infraestrutura. A AWS fornece serviços que permitem a criação, a implantação e a manutenção da infraestrutura de forma programática, descritiva e declarativa.

      • O AWS CloudFormation ajuda os desenvolvedores a criar recursos da AWS de forma ordenada e previsível. Os recursos são escritos em arquivos de texto usando o formato JSON ou YAML. Os modelos exigem sintaxe e estrutura específicas que dependem dos tipos de recurso que estão sendo criados e gerenciados. Você cria os recursos em JSON ou YAML com qualquer editor de código, insere-os em um sistema de controle de versão, e o AWS CloudFormation cria os serviços especificados de maneira segura e repetível.

      • O AWS Serverless Application Model (AWS SAM) é uma estrutura de código aberto que você pode usar para criar aplicações sem servidor na AWS. O AWS SAM se integra a outros serviços da AWS e é uma extensão do AWS CloudFormation.

      • O AWS Cloud Development Kit (AWS CDK) é um framework de desenvolvimento de software de código aberto para modelar e provisionar recursos de aplicações em nuvem usando linguagens de programação conhecidas. É possível usar o AWS CDK para modelar a infraestrutura de aplicações usando TypeScript, Python, Java e .NET. O AWS CDK usa o AWS CloudFormation em segundo plano para provisionar recursos de forma segura e repetível.

      • O AWS Cloud Control API apresenta um conjunto comum de APIs de criação, leitura, atualização, exclusão e lista (CRUDL) para ajudar os desenvolvedores a gerenciar sua infraestrutura de nuvem de forma fácil e consistente. As APIs comuns do Cloud Control permitem que os desenvolvedores gerenciem de maneira uniforme o ciclo de vida de serviços da AWS e de terceiros.

  • Implemente padrões de implantação que minimizem o impacto no usuário.

  • Detecte variações de configuração ou estado. Para obter mais informações, consulte Como detectar alterações de configuração não gerenciadas para pilhas e recursos.

Recursos

Práticas recomendadas relacionadas:

Documentos relacionados:

Vídeos relacionados: