

# SEC11-BP06 Implantar software programaticamente
<a name="sec_appsec_deploy_software_programmatically"></a>

Faça implantações de software de forma programática quando possível. Essa abordagem diminui a probabilidade de falha em uma implantação ou da introdução de um problema inesperado devido a erro humano.

 **Resultado desejado:** a versão da workload que você testa é a versão que você implanta, e a implantação é sempre executada de forma consistente. Você externaliza a configuração da sua workload, o que ajuda você a implantar em diferentes ambientes sem alterações. Assinar de maneira criptográfica os pacotes de software é uma boa maneira de garantir que nada seja alterado entre os ambientes. 

**Práticas comuns que devem ser evitadas: **
+  Implantar software manualmente em produção. 
+  Realizar alterações manualmente no software para suprir diferentes ambientes. 

**Benefícios de implementar esta prática recomendada: **
+  Maior confiança no processo de lançamento de software. 
+  Redução do risco de uma alteração com falha afetar a funcionalidade dos negócios. 
+  Maior cadência de lançamentos devido ao menor risco de alterações. 
+  Recurso de reversão automática para eventos inesperados durante a implantação. 
+  Capacidade de comprovar de forma criptográfica que o software testado é o software implantado. 

 **Nível de risco exposto se esta prática recomendada não for estabelecida:** Alto 

## Orientação para implementação
<a name="implementation-guidance"></a>

 Para manter uma infraestrutura de aplicações robusta e confiável, implemente práticas de implantação seguras e automatizadas. Essa prática envolve remover o acesso humano persistente dos ambientes de produção, usar ferramentas de CI/CD para implantações e externalizar dados de configuração específicos do ambiente. Ao seguir essa abordagem, você pode aprimorar a segurança, reduzir o risco de erros humanos e simplificar o processo de implantação. 

 Você pode criar uma estrutura de Conta da AWS para remover o acesso humano persistente dos ambientes de produção. Essa prática minimiza o risco de alterações não autorizadas ou modificações acidentais, o que melhora a integridade de seus sistemas de produção. Em vez do acesso humano direto, você pode usar ferramentas de CI/CD como [AWS CodeBuild](https://aws.amazon.com/codebuild/)e [AWS CodePipeline](https://aws.amazon.com/codepipeline/)para realizar implantações. Você pode usar esses serviços para automatizar os processos de criação, teste e implantação, o que reduz a intervenção manual e aumenta a consistência. 

 Para aprimorar ainda mais a segurança e a rastreabilidade, é possível assinar pacotes de aplicações depois de testados e validar essas assinaturas durante a implantação. Para fazer isso, use ferramentas criptográficas como [AWS Signer](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html)ou [AWS Key Management Service(AWS KMS)](https://aws.amazon.com/kms/). Ao assinar e verificar pacotes, você pode garantir a implantação somente de código autorizado e validado em seus ambientes. 

 Além disso, sua equipe pode arquitetar a workload para obter dados de configuração específicos do ambiente de uma fonte externa, como o [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html). Essa prática separa o código da aplicação dos dados de configuração, o que ajuda você a gerenciar e atualizar as configurações de maneira independente, sem modificar o código da aplicação em si. 

 Para simplificar o provisionamento e o gerenciamento da infraestrutura, considere usar ferramentas de infraestrutura como código (IaC), como [AWS CloudFormation](https://aws.amazon.com/cloudformation/) ou [AWS CDK](https://aws.amazon.com/cdk/). Você pode usar essas ferramentas para definir sua infraestrutura como código, o que melhora a consistência e a repetibilidade das implantações em diferentes ambientes. 

 Considere as implantações canário para validar a implantação bem-sucedida do software. As implantações canário envolvem a implementação de alterações em um subconjunto de instâncias ou usuários antes da implantação em todo o ambiente de produção. Em seguida, você pode monitorar o impacto das mudanças e revertê-las, se necessário, o que minimiza o risco de problemas generalizados. 

 Siga as recomendações descritas no whitepaper [Organizando seu AWS ambiente usando várias contas](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html). Este whitepaper fornece orientação sobre como separar ambientes (como desenvolvimento, preparação e produção) em Contas da AWS distintas, o que aumenta ainda mais a segurança e o isolamento. 

### Etapas de implementação
<a name="implementation-steps"></a>

1.  **Configure a estrutura de Conta da AWS**: 
   +  Siga as orientações no whitepaper [Organizing Your AWS Environment Using Multiple Accounts](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html) para criar Contas da AWS separadas para diferentes ambientes (por exemplo, desenvolvimento, preparação e produção). 
   +  Configure os controles e permissões de acesso apropriados para cada conta para restringir o acesso humano direto aos ambientes de produção. 

1.  **Implemente um pipeline de CI/CD**: 
   +  Configure um pipeline de CI/CD usando serviços, como [AWS CodeBuild](https://aws.amazon.com/codebuild/) e [AWS CodePipeline](https://aws.amazon.com/codepipeline/). 
   +  Configure o pipeline para criar, testar e implantar automaticamente o código da aplicação nos respectivos ambientes. 
   +  Integre repositórios de código com o pipeline de CI/CD para controle de versão e gerenciamento de código. 

1.  **Assine e verifique pacotes de aplicações**: 
   +  Use o [AWS Signer](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html) ou o [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/) para assinar os pacotes de aplicações depois de testados e validados. 
   +  Configure o processo de implantação para verificar as assinaturas dos pacotes de aplicações antes de implantá-los nos ambientes de destino. 

1.  **Externalize os dados de configuração**: 
   +  Armazene dados de configuração específicos do ambiente no [AWSSystems Manager Parameter](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) Store. 
   +  Modifique o código da aplicação para recuperar dados de configuração do Parameter Store durante a implantação ou o runtime. 

1.  **Implemente a infraestrutura como código (IaC)**: 
   +  Use ferramentas de IaC como [AWS CloudFormation](https://aws.amazon.com/cloudformation/)ou [AWS CDK](https://aws.amazon.com/cdk/)para definir e gerenciar sua infraestrutura como código. 
   +  Crie modelos do CloudFormation ou scripts de CDK para provisionar e configurar os recursos da AWS necessários para a aplicação. 
   +  Integre a IaC ao seu pipeline de CI/CD para implantar automaticamente as alterações na infraestrutura com as alterações no código da aplicação. 

1.  **Implemente implantações canário**: 
   +  Configure o processo de implantação para oferecer suporte a implantações canário, em que as alterações são implementadas em um subconjunto de instâncias ou usuários antes de serem implantadas em todo o ambiente de produção. 
   +  Use serviços, como o [AWS CodeDeploy](https://aws.amazon.com/codedeploy/) ou o [AWS ECS](https://aws.amazon.com/ecs/), para gerenciar implantações canário e monitorar o impacto das mudanças. 
   +  Implemente mecanismos de reversão para reverter para a versão estável anterior se forem detectados problemas durante a implantação canário. 

1.  **Monitore e audite**: 
   +  Configure mecanismos de monitoramento e registro em log para rastrear implantações, desempenho de aplicações e mudanças na infraestrutura. 
   +  Use serviços, como o [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) e o [AWS CloudTrail](https://aws.amazon.com/cloudtrail/), para coletar e analisar logs e métricas. 
   +  Implemente verificações de auditoria e conformidade para verificar a adesão às práticas recomendadas de segurança e aos requisitos regulatórios. 

1.  **Melhore continuamente:** 
   +  Analise e atualize regularmente suas práticas de implantação e incorpore feedback e lições aprendidas em implantações anteriores. 
   +  Automatize o máximo possível do processo de implantação para reduzir a intervenção manual e possíveis erros humanos. 
   +  Colabore com equipes multifuncionais (por exemplo, operações ou segurança) para alinhar e melhorar continuamente as práticas de implantação. 

 Seguindo essas etapas, você pode implementar práticas de implantação seguras e automatizadas em seu AWS ambiente, o que aumenta a segurança, reduz o risco de erros humanos e simplifica o processo de implantação. 

## Recursos
<a name="resources"></a>

 **Práticas recomendadas relacionadas:** 
+  [SEC11-BP02 Automatizar o teste durante o ciclo de vida de desenvolvimento e lançamento](sec_appsec_automate_testing_throughout_lifecycle.md) 
+  [O DL.CI.2 Trigger é criado automaticamente com base nas modificações do código-fonte](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/dl.ci.2-trigger-builds-automatically-upon-source-code-modifications.html) 

 **Documentos relacionados:** 
+  [Acelerar as implantações na AWS com uma governança efetiva](https://aws.amazon.com/blogs/architecture/accelerate-deployments-on-aws-with-effective-governance/) 
+  [Automatizar implantações seguras e sem intervenção manual](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/) 
+  [Assinatura de código usando CA privada do AWS Certificate Manager e chaves assimétricas do AWS Key Management Service](https://aws.amazon.com/blogs/security/code-signing-aws-certificate-manager-private-ca-aws-key-management-service-asymmetric-keys/) 
+  [Assinatura de código, um controle de confiança e integridade para AWS Lambda](https://aws.amazon.com/blogs/aws/new-code-signing-a-trust-and-integrity-control-for-aws-lambda/) 

 **Vídeos relacionados:** 
+  [Sem intervenção manual: como automatizar os pipelines de entrega contínua na Amazon](https://www.youtube.com/watch?v=ngnMj1zbMPY) 

 **Exemplos relacionados:** 
+  [Implantações azuis/verdes com o AWS Fargate](https://catalog.us-east-1.prod.workshops.aws/workshops/954a35ee-c878-4c22-93ce-b30b25918d89/en-US) 