As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Compilar e implantar automaticamente uma aplicação em Java no Amazon EKS usando um pipeline de CI/CD
Criado por MAHESH RAGHUNANDANAN (AWS), James Radtke (AWS) e Jomcy Pappachen (AWS)
Repositório de códigos: aws-cicd-java-eks | Ambiente: produção | Tecnologias: contêineres e microsserviços; nativo da nuvem; modernização DevOps |
Workload: todas as outras workloads | Serviços da AWS: AWS CloudFormation; AWS; AWS CodeCommit CodePipeline; Amazon EC2 Container Registry; Amazon EKS |
Resumo
Esse padrão descreve como criar um pipeline de integração contínua e entrega contínua (CI/CD) que cria e implanta automaticamente um aplicativo Java com as DevSecOps práticas recomendadas em um cluster do Amazon Elastic Kubernetes Service (Amazon EKS) na nuvem da Amazon Web Services (AWS). Esse padrão usa um aplicativo de saudação desenvolvido com uma estrutura Java Spring Boot e que usa o Apache Maven.
Você pode usar a abordagem deste padrão para compilar o código para um aplicativo Java, empacotar os artefatos do aplicativo como uma imagem do Docker, verificar a segurança da imagem e fazer o upload da imagem como um contêiner de workload no Amazon EKS. A abordagem deste padrão é útil se você quiser migrar de uma arquitetura monolítica fortemente acoplada para uma arquitetura de microsserviços. A abordagem também ajuda você a monitorar e gerenciar todo o ciclo de vida de um aplicativo Java, o que garante um nível mais alto de automação e ajuda a evitar erros ou bugs.
Pré-requisitos e limitações
Pré-requisitos
Uma conta AWS ativa
AWS Command Line Interface (AWS CLI) versão 2, instalada e configurada. Para obter mais informações, consulte Instalação, atualização e desinstalação da AWS CLI versão 2na documentação da AWS CLI.
A versão 2 do AWS CLI deve ser configurada com o mesmo perfil do IAM que cria o cluster do Amazon EKS porque somente esse perfil está autorizado a adicionar outros perfis do IAM ao
aws-auth
ConfigMap
. Para obter informações e etapas para configurar a AWS CLI, consulte Fundamentos da configuração na documentação da AWS CLI.Funções e permissões do AWS Identity and Access Management (IAM) com acesso total à AWS CloudFormation. Para obter mais informações sobre isso, consulte Como controlar o acesso com o IAM na CloudFormation documentação da AWS.
Um cluster Amazon EKS existente, com detalhes do nome do perfil do IAM e o nome do recurso da Amazon (ARN) do perfil do IAM dos nós de processamento no cluster EKS.
Kubernetes Cluster Autoscaler, instalado e configurado em seu cluster Amazon EKS. Para obter mais informações, consulte o Ajustador de escala automático cluster na documentação do Amazon EKS.
Acesso ao código no GitHub repositório.
Observação importante
O AWS Security Hub é ativado como parte dos CloudFormation modelos da AWS que estão no código. Por padrão, após a ativação do Security Hub, ele vem com um teste gratuito de 30 dias, após o qual há um custo associado a esse serviço da AWS. Para obter mais informações, consulte Preço do AWS Security Hub
Versões do produto
Helm versão 3.4.2 ou superior
Apache Maven versão 3.6.3 ou mais recente
BridgeCrew Checkov versão 2.2 ou posterior
Aqua Security Trivy versão 0.37 ou mais recente
Arquitetura
Pilha de tecnologia
AWS CodeBuild
AWS CodeCommit
Amazon CodeGuru
AWS CodePipeline
Amazon Elastic Container Registry
Amazon Elastic Kubernetes Service
Amazon EventBridge
AWS Security Hub
Amazon Simple Notification Service (Amazon SNS)
Arquitetura de destino
O diagrama mostra o seguinte fluxo de trabalho:
O desenvolvedor atualiza o código do aplicativo Java na ramificação base do CodeCommit repositório, o que cria uma pull request (PR).
Assim que o PR é enviado, o Amazon CodeGuru Reviewer revisa automaticamente o código, o analisa com base nas melhores práticas de Java e fornece recomendações ao desenvolvedor.
Depois que o PR é mesclado com a filial base, um EventBridge evento da Amazon é criado.
O EventBridge evento inicia o CodePipeline pipeline, que começa.
CodePipeline executa o estágio de CodeSecurity digitalização (segurança contínua).
CodeBuild inicia o processo de verificação de segurança no qual os arquivos Helm de implantação do Dockerfile e do Kubernetes são escaneados usando o Checkov, e o código-fonte do aplicativo é escaneado com base em alterações incrementais no código. A verificação do código-fonte do aplicativo é executada pelo wrapper CodeGuru Reviewer Command Line Interface (CLI)
. Se o estágio de verificação de segurança for bem-sucedido, o estágio de compilação (integração contínua) será inicializado.
No estágio CodeBuild Build, cria o artefato, empacota o artefato em uma imagem do Docker, escaneia a imagem em busca de vulnerabilidades de segurança usando o Aqua Security Trivy e armazena a imagem no Amazon ECR.
As vulnerabilidades detectadas na etapa 8 são enviadas para o Security Hub para análise posterior por desenvolvedores ou engenheiros. O Security Hub fornece uma visão geral e recomendações para corrigir as vulnerabilidades.
As notificações por e-mail de várias fases do CodePipeline pipeline são enviadas pelo Amazon SNS.
Depois que as fases de integração contínua forem concluídas, CodePipeline entra no estágio de implantação (entrega contínua).
A imagem do Docker é implantada no Amazon EKS como uma workload de contêiner (pod) usando charts do Helm.
O pod do aplicativo é configurado com o Amazon CodeGuru Profiler Agent, que enviará os dados de perfil do aplicativo (CPU, uso da pilha e latência) para o Amazon CodeGuru Profiler, o que ajuda os desenvolvedores a entender o comportamento do aplicativo.
Ferramentas
Serviços da AWS
CloudFormationA AWS ajuda você a configurar recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas as contas e regiões da AWS.
CodeBuildA AWS é um serviço de criação totalmente gerenciado que ajuda você a compilar o código-fonte, executar testes unitários e produzir artefatos prontos para implantação.
CodeCommitA AWS é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
O Amazon CodeGuru Profiler coleta dados de desempenho de tempo de execução de seus aplicativos ativos e fornece recomendações que podem ajudá-lo a ajustar o desempenho do seu aplicativo.
O Amazon CodeGuru Reviewer usa análise de programas e aprendizado de máquina para detectar possíveis defeitos difíceis de serem encontrados pelos desenvolvedores e oferece sugestões para melhorar seu código Java e Python.
CodePipelineA AWS ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar alterações de software continuamente.
O Amazon Elastic Container Registry (Amazon ECR) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
O Amazon Elastic Kubernetes Service (Amazon EKS) ajuda você a executar o Kubernetes na AWS sem precisar instalar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.
EventBridgeA Amazon é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, funções do AWS Lambda, endpoints de invocação de HTTP usando destinos de API ou barramentos de eventos em outras contas da AWS.
O AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.
O AWS Security Hub fornece uma visualização abrangente de seu estado de segurança na AWS. Ele também ajuda você a verificar seu ambiente AWS em relação aos padrões e práticas recomendadas do setor de segurança.
O Amazon Simple Notification Service (Amazon SNS) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail.
O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
Outros serviços
O Helm
é um gerenciador de pacotes de código aberto para o Kubernetes. O Apache Maven
é uma ferramenta de gerenciamento e compreensão de projetos de software. BridgeCrew O Checkov
é uma ferramenta estática de análise de código para escanear a infraestrutura como arquivos de código (IaC) em busca de configurações incorretas que possam levar a problemas de segurança ou conformidade. O Aqua Security Trivy
é um scanner abrangente para vulnerabilidades em imagens de contêineres, sistemas de arquivos e repositórios Git, além de problemas de configuração.
Código
O código desse padrão está disponível no GitHub aws-codepipeline-devsecops-amazoneks
Práticas recomendadas
O princípio do privilégio mínimo foi seguido para entidades do IAM em todas as fases dessa solução. Se você quiser estender a solução com serviços adicionais da AWS ou ferramentas de terceiros, recomendamos seguir o princípio do privilégio mínimo.
Se você tiver vários aplicativos Java, recomendamos criar pipelines de CI/CD separados para cada aplicativo.
Se você tiver um aplicativo monolítico, recomendamos dividir o aplicativo em microsserviços o máximo possível. Os microsserviços são mais flexíveis, facilitam a implantação de aplicativos como contêineres e fornecem melhor visibilidade da compilação e implantação gerais do aplicativo.
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Clone o GitHub repositório. | Para clonar o repositório, execute o comando a seguir.
| Desenvolvedor de aplicativos, DevOps engenheiro |
Crie um bucket do S3 faça o upload do código. |
| AWS DevOps, DevOps engenheiro, administrador de nuvem, DevOps |
Crie uma CloudFormation pilha da AWS. |
| AWS DevOps, DevOps |
Valide a implantação da CloudFormation pilha. |
| DevOps engenheiro |
Exclua o bucket do S3. | Esvazie e exclua o bucket do S3 criado anteriormente. Para obter mais informações, consulte Excluir um bucket na documentação do Amazon S3 | AWS DevOps, DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Configure os charts do Helm do seu aplicativo Java. |
Você pode habilitar recursos diferentes para as cargas de trabalho do Kubernetes alterando os valores no | DevOps |
Valide os charts do Helm em busca de erros de sintaxe. |
| DevOps engenheiro |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie o pipeline de CI/CD. |
| AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Ative a integração com o Aqua Security. | Essa etapa é necessária para fazer o upload das descobertas da vulnerabilidade de imagem do Docker relatadas pela Trivy para o Security Hub. Como a AWS CloudFormation não oferece suporte às integrações do Security Hub, esse processo deve ser feito manualmente.
| Administrador e DevOps engenheiro da AWS |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Permita CodeBuild a execução de comandos Helm ou kubectl no cluster Amazon EKS. | CodeBuild Para ser autenticado para usar o Helm ou Importante: O procedimento a seguir deve ser concluído antes do estágio de aprovação da implantação CodePipeline.
O | DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Verifique se o pipeline de CI/CD é inicializado automaticamente. |
Para obter mais informações sobre como iniciar o pipeline usando CodePipeline, consulte Iniciar um pipeline em CodePipeline, Iniciar um pipeline manualmente e Iniciar um pipeline de acordo com um cronograma na CodePipeline documentação da AWS. | DevOps |
Aprove a implantação. |
| DevOps |
Valide o perfil do aplicativo. | Depois que a implantação for concluída e o pod do aplicativo for implantado no Amazon EKS, o agente Amazon CodeGuru Profiler configurado no aplicativo tentará enviar dados de perfil do aplicativo (CPU, resumo da pilha, latência e gargalos) para o Amazon Profiler. CodeGuru Para a implantação inicial de um aplicativo, o Amazon CodeGuru Profiler leva cerca de 15 minutos para visualizar os dados de criação de perfil. | AWS DevOps |
Recursos relacionados
Mais informações
CodeGuru O Profiler não deve ser confundido com o serviço AWS X-Ray em termos de funcionalidade. CodeGuru O Profiler é o preferido para identificar as linhas de código mais caras, que podem causar gargalos ou problemas de segurança, e corrigi-las antes que se tornem um risco potencial. O AWS X-Ray Service é para monitoramento de desempenho de aplicações.
Neste padrão, as regras de eventos são associadas ao barramento de eventos padrão. Se necessário, você pode estender o padrão para usar um barramento de eventos personalizado.
Esse padrão usa o CodeGuru Reviewer como uma ferramenta estática de teste de segurança de aplicativos (SAST) para o código do aplicativo. Você também pode usar esse pipeline para outras ferramentas, como SonarQube o Checkmarx. As instruções de configuração de escaneamento correspondentes de qualquer uma dessas ferramentas podem ser adicionadasbuildspec/buildspec_secscan.yaml
, substituindo as instruções de escaneamento do CodeGuru.