

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Cree e implemente automáticamente una aplicación Java en Amazon EKS mediante una CI/CD canalización
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline"></a>

*MAHESH RAGHUNANDANAN, Jomcy Pappachen y James Radtke, Amazon Web Services*

## Resumen
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-summary"></a>

Este patrón describe cómo crear una canalización de integración y entrega continuas (CI/CD) que cree e implemente automáticamente una aplicación Java con DevSecOps las prácticas recomendadas en un clúster de Amazon Elastic Kubernetes Service (Amazon EKS) del. Nube de AWS Este patrón utiliza una aplicación de saludo desarrollada con un marco Java Spring Boot y que utiliza Apache Maven.

Puede utilizar el enfoque de este patrón para crear el código de una aplicación Java, empaquetar los artefactos de la aplicación como una imagen de Docker, escanear la imagen por motivos de seguridad y cargarla como un contenedor de carga de trabajo en Amazon EKS. El enfoque de este patrón es útil si desea migrar de una arquitectura monolítica estrechamente acoplada a una arquitectura de microservicios. Este enfoque también le ayuda a supervisar y gestionar todo el ciclo de vida de una aplicación Java, lo que garantiza un mayor nivel de automatización y ayuda a evitar errores o fallos.

## Requisitos previos y limitaciones
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-prereqs"></a>

**Requisitos previos **
+ Un activo. Cuenta de AWS
+ AWS Command Line Interface (AWS CLI) versión 2, instalada y configurada. Para obtener más información al respecto, consulte [Instalación o actualización a la última versión de AWS CLI en la](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) AWS CLI documentación.

  AWS CLI la versión 2 debe configurarse con el mismo rol AWS Identity and Access Management (IAM) que crea el clúster de Amazon EKS, ya que solo ese rol está autorizado a añadir otros roles de IAM al. `aws-auth` `ConfigMap` Para obtener información y los pasos de configuración AWS CLI, consulte [Configuración de los ajustes](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) en la AWS CLI documentación.
+ Funciones y permisos de IAM con acceso total a AWS CloudFormation. Para obtener más información al respecto, consulte [Controlar el acceso con IAM](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html) en la CloudFormation documentación.
+ Un clúster de Amazon EKS existente, con detalles del nombre del rol de IAM y el nombre de recurso de Amazon (ARN) del rol de IAM de los nodos de trabajo del clúster de EKS.
+ Escalador automático de clústeres de Kubernetes instalado y configurado en su clúster de Amazon EKS. Para más información, consulte [Escalado de computación en clústeres´con Karpenter y Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/cluster-autoscaler.html) en la documentación de Amazon EKS. 
+ Acceso al código del GitHub repositorio.

**importante**  
AWS Security Hub CSPM está habilitado como parte de las CloudFormation plantillas que se incluyen en el código de este patrón. De forma predeterminada, una vez que Security Hub CSPM está activado, viene con una prueba gratuita de 30 días. Una vez finalizada la prueba, se aplicará un costo a Servicio de AWS. Para obtener más información acerca de los precios, consulte [Precios de AWS Security Hub CSPM](https://aws.amazon.com/security-hub/pricing/).

**Versiones de producto**
+ Helm versión 3.4.2 o posterior
+ Apache Maven versión 3.6.3 o posterior
+ BridgeCrew Compruebe la versión 2.2 o posterior
+ Aqua Security Trivy versión 0.37 o posterior

## Arquitectura
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-architecture"></a>

**Pila de tecnología**
+ AWS CodeBuild
+ AWS CodeCommit
+ Amazon CodeGuru
+ AWS CodePipeline
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon EKS
+ Amazon EventBridge
+ AWS Security Hub CSPM
+ Amazon Simple Notification Service (Amazon SNS)

**Arquitectura de destino**

![\[Flujo de trabajo para implementar una aplicación Java en Amazon EKS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/95a5b5c2-d7fb-41eb-9089-455318c0d585/images/4f5fd8c2-2b6d-4945-aa64-fcf317521711.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. El desarrollador actualiza el código de la aplicación Java en la rama base del CodeCommit repositorio, lo que crea una solicitud de extracción (PR).

1. En cuanto se envía el PR, Amazon CodeGuru Reviewer revisa automáticamente el código, lo analiza en función de las prácticas recomendadas para Java y ofrece recomendaciones al desarrollador.

1. Una vez que el PR se fusiona con la rama base, se crea un EventBridge evento de Amazon.

1. El EventBridge evento inicia la CodePipeline canalización, que comienza.

1. CodePipeline ejecuta la etapa de CodeSecurity escaneo (seguridad continua).

1. AWS CodeBuild inicia el proceso de análisis de seguridad, en el que los archivos Helm de implementación de Dockerfile y Kubernetes se escanean mediante Checkov, y el código fuente de la aplicación se escanea en función de los cambios incrementales en el código. El escaneo del código fuente de la aplicación lo realiza el [contenedor de interfaz de línea de comandos (CLI) de CodeGuru Reviewer](https://github.com/aws/aws-codeguru-cli).
**nota**  
A partir del 7 de noviembre de 2025, no podrá crear nuevas asociaciones de repositorios en Amazon CodeGuru Reviewer. Para obtener información sobre los servicios con capacidades similares a las de CodeGuru Reviewer, consulte el [cambio de disponibilidad de Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) en la documentación de CodeGuru Reviewer. 

1. Si la etapa de escaneo de seguridad es exitosa, se inicia la etapa de compilación (integración continua).

1. En la etapa de compilación, CodeBuild crea el artefacto, empaqueta el artefacto en una imagen de Docker, escanea la imagen en busca de vulnerabilidades de seguridad mediante Aqua Security Trivy y almacena la imagen en Amazon ECR.

1. Las vulnerabilidades detectadas en el paso 8 se cargan en Security Hub CSPM para que los desarrolladores o ingenieros las analicen más a fondo. Security Hub CSPM proporciona una descripción general y recomendaciones para corregir las vulnerabilidades.

1. Las notificaciones por correo electrónico de las fases secuenciales de la CodePipeline canalización se envían a través de Amazon SNS.

1. Una vez completadas las fases de integración continua, CodePipeline pasa a la etapa de implementación (entrega continua).

1. La imagen de Docker se implementa en Amazon EKS como una carga de trabajo de contenedor (pod) mediante gráficos de Helm.

1. El pod de la aplicación se configura con el agente Amazon CodeGuru Profiler, que envía los datos de creación de perfiles de la aplicación (CPU, uso del montón y latencia) a CodeGuru Profiler, lo que ayuda a los desarrolladores a comprender el comportamiento de la aplicación.

## Tools (Herramientas)
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-tools"></a>

**Servicios de AWS**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y administrarlos a lo largo de su ciclo de vida en todas las regiones. Cuentas de AWS 
+  [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que permite almacenar y administrar repositorios de Git de forma privada, sin necesidad de administrar su propio sistema de control de origen.
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) recopila datos de rendimiento en tiempo de ejecución de sus aplicaciones activas y proporciona recomendaciones que pueden ayudarle a ajustar el rendimiento de las aplicaciones.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes, incluidas AWS Lambda funciones, puntos de enlace de invocación HTTP que utilizan destinos de API o buses de eventos, entre otros. Cuentas de AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)proporciona una visión completa del estado de su seguridad. AWS También le ayuda a comparar su AWS entorno con los estándares y las mejores prácticas del sector de la seguridad.
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.

**Otros servicios**
+ [Helm](https://helm.sh/docs/) es un administrador de paquetes de código abierto para Kubernetes.
+ [Apache Maven](https://maven.apache.org/) es una herramienta de software para la comprensión y administración de proyectos.
+ [BridgeCrew Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) es una herramienta de análisis de código estático que permite escanear la infraestructura en forma de archivos de código (IaC) para detectar errores de configuración que puedan provocar problemas de seguridad o de conformidad.
+ [Aqua Security Trivy](https://github.com/aquasecurity/trivy) es un escáner completo para detectar vulnerabilidades en imágenes de contenedores, sistemas de archivos y repositorios de Git, además de problemas de configuración.

**Código**

El código de este patrón está disponible en el repositorio. GitHub [aws-codepipeline-devsecops-amazoneks](https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks)

## Prácticas recomendadas
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-best-practices"></a>
+ Este patrón sigue las [prácticas recomendadas de seguridad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) para aplicar el principio de privilegios mínimos en las entidades de IAM en todas las fases de la solución. Si desea ampliar la solución con herramientas adicionales Servicios de AWS o de terceros, le recomendamos que consulte la sección sobre la [aplicación de permisos con privilegios mínimos de](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) la documentación de IAM.
+ Si tiene varias aplicaciones Java, le recomendamos que cree CI/CD canalizaciones independientes para cada aplicación.
+ Si tiene una aplicación monolítica, le recomendamos dividirla en microservicios en la medida de lo posible. Los microservicios son más flexibles, facilitan la implementación de aplicaciones como contenedores y proporcionan una mejor visibilidad de la creación y la implementación generales de la aplicación.

## Epics
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-epics"></a>

### Configuración del entorno
<a name="set-up-the-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clona el GitHub repositorio. | Para clonar el repositorio, ejecute el siguiente comando.<pre>git clone https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks</pre> | Desarrollador de aplicaciones, DevOps ingeniero | 
| Cree un bucket de S3 y suba el código. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, administrador de la nube, DevOps ingeniero | 
| Cree una CloudFormation pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps ingeniero | 
| Valide el despliegue de la CloudFormation pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps ingeniero | 
| Elimine el bucket de S3. | Vacíe y borre el bucket de S3 que creó con anterioridad. Para obtener más información, consulte [Eliminación de un bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) en la documentación de Amazon S3. | AWS DevOps, DevOps ingeniero | 

### Configure los gráficos de Helm
<a name="configure-the-helm-charts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure los gráficos de Helm de su aplicación Java. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps ingeniero | 
| Valide los gráficos de Helm para detectar errores de sintaxis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps ingeniero | 

### Configure la CI/CD canalización de Java
<a name="set-up-the-java-ci-cd-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crea la CI/CD canalización. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps | 

### Active la integración entre Security Hub CSPM y Aqua Security
<a name="activate-integration-between-ash-and-aqua-security"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Active la integración de Aqua Security. | Este paso es necesario para cargar los hallazgos de vulnerabilidad de imágenes de Docker reportados por Trivy a Security Hub CSPM. Como CloudFormation no es compatible con las integraciones CSPM de Security Hub, este proceso debe realizarse manualmente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | Administrador DevOps e ingeniero de AWS | 

### Configure CodeBuild para ejecutar los comandos Helm o kubectl
<a name="configure-acb-to-run-helm-or-kubectl-commands"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Permite CodeBuild ejecutar comandos Helm o kubectl en el clúster de Amazon EKS. |  CodeBuild Para autenticarse para usar Helm o `kubectl` comandos con el clúster de Amazon EKS, debe añadir las funciones de IAM al. `aws-auth` `ConfigMap` En este caso, añada el ARN de la función de IAM`EksCodeBuildkubeRoleARN`, que es la función de IAM creada para que el CodeBuild servicio acceda al clúster de Amazon EKS e implemente cargas de trabajo en él. Esta es una actividad que se realiza una vez.El siguiente procedimiento debe completarse antes de la fase de aprobación de la implementación. CodePipeline[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)`aws_auth` `ConfigMap` se configura y se concede el acceso.  | DevOps | 

### Valide la CI/CD canalización
<a name="validate-the-ci-cd-pipeline"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Compruebe que la CI/CD canalización se inicie automáticamente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)Para obtener más información sobre cómo iniciar la canalización mediante el uso CodePipeline, consulte [Iniciar una canalización en](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)CodePipeline, [Iniciar una canalización manualmente](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-rerun-manually.html) e [Iniciar una canalización según un cronograma](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-trigger-source-schedule.html) en la CodePipeline documentación. | DevOps | 
| Apruebe la implementación. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps | 
| Valide la creación de perfiles de la aplicación. | Una vez finalizada la implementación y desplegado el pod de la aplicación en Amazon EKS, el agente Amazon CodeGuru Profiler que está configurado en la aplicación intentará enviar los datos de creación de perfiles de la aplicación (CPU, resumen del montón, latencia y cuellos de botella) a Profiler. CodeGuru Para la implementación inicial de una aplicación, CodeGuru Profiler tarda unos 15 minutos en visualizar los datos de creación de perfiles. | AWS DevOps | 

## Recursos relacionados
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-resources"></a>
+ [AWS CodePipeline documentación](https://docs.aws.amazon.com/codepipeline/index.html)
+ [Escanear imágenes con Trivy en una AWS CodePipeline](https://aws.amazon.com/blogs/containers/scanning-images-with-trivy-in-an-aws-codepipeline/) (AWS entrada de blog)
+ [Mejora de sus aplicaciones Java con Amazon CodeGuru Profiler](https://aws.amazon.com/blogs/devops/improving-your-java-applications-using-amazon-codeguru-profiler) (AWS entrada del blog)
+ [AWS Sintaxis del formato de búsqueda de seguridad (ASFF)](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format-syntax.html)
+ [Patrones de EventBridge eventos de Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Actualización de Helm](https://helm.sh/docs/helm/helm_upgrade/)

## Información adicional
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-additional"></a>
+ CodeGuru El generador de perfiles no debe confundirse con el AWS X-Ray servicio en términos de funcionalidad. Le recomendamos que utilice CodeGuru Profiler para identificar las líneas de códigos más caras que puedan provocar cuellos de botella o problemas de seguridad, y que las corrija antes de que se conviertan en un riesgo potencial. El servicio X-Ray sirve para supervisar el rendimiento de las aplicaciones.
+ En este patrón, las reglas de eventos se asocian al bus de eventos predeterminado. Si es necesario, puede ampliar el patrón para utilizar un bus de eventos personalizado.
+ Este patrón utiliza CodeGuru Reviewer como una herramienta estática de pruebas de seguridad de aplicaciones (SAST) para el código de la aplicación. También puedes usar esta canalización para otras herramientas, como SonarQube Checkmarx. Puede añadir las instrucciones de configuración del escaneo a cualquiera de estas herramientas `buildspec/buildspec_secscan.yaml` para reemplazar las instrucciones de CodeGuru escaneo.
**nota**  
A partir del 7 de noviembre de 2025, no podrá crear nuevas asociaciones de repositorios en Amazon CodeGuru Reviewer. Para obtener información sobre los servicios con capacidades similares a las de CodeGuru Reviewer, consulte el [cambio de disponibilidad de Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) en la documentación de CodeGuru Reviewer.