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.
Crear e implementar de forma automática una aplicación Java en Amazon EKS mediante una canalización de CI/CD
Creado por MAHESH RAGHUNANDANAN (AWS), James Radtke (AWS) y Jomcy Pappachen (AWS)
Repositorio de código: aws-cicd-java-eks | Entorno: producción | Tecnologías: contenedores y microservicios; CloudNative DevOps; Modernización |
Carga de trabajo: todas las demás cargas de trabajo | Servicios de AWS: AWS CloudFormation; AWS CodeCommit CodePipeline; Amazon EC2 Container Registry; Amazon EKS |
Resumen
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) en la nube de Amazon Web Services (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
Requisitos previos
Una cuenta de AWS activa.
Interfaz de la línea de comandos de AWS (AWS CLI) versión 2 instalada y configurada. Para obtener más información, consulte Instalación, actualización y desinstalación de la versión 2 de la CLI de AWS en la documentación de la CLI de AWS.
La versión 2 de la CLI de AWS debe configurarse con el mismo rol de IAM que crea el clúster de Amazon EKS, ya que solo esa función está autorizada a añadir otras funciones de IAM al
aws-auth
ConfigMap
. Para obtener información y los pasos para configurar la CLI de AWS, consulte Conceptos básicos de configuración en la documentación de la CLI de AWS.Funciones y permisos de AWS Identity and Access Management (IAM) con acceso total a AWS CloudFormation. Para obtener más información al respecto, consulte Controlar el acceso con IAM en la CloudFormation documentación de AWS.
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 obtener más información, consulte Escalado automático de clústeres en la documentación de Amazon EKS.
Acceso al código del GitHub repositorio.
Notas importantes
AWS Security Hub se habilita como parte de las CloudFormation plantillas de AWS que se incluyen en el código. De forma predeterminada, una vez activado Security Hub, se ofrece una prueba gratuita de 30 días, tras la cual hay un costo asociado a este servicio de AWS. Para obtener más información, consulte Precios de AWS Security Hub
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
Pila de tecnología
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)
Arquitectura de destino
En el diagrama, se muestra el siguiente flujo de trabajo:
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).
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.
Una vez que el PR se fusiona con la rama base, se crea un EventBridge evento de Amazon.
El EventBridge evento inicia la CodePipeline canalización, que comienza.
CodePipeline ejecuta la etapa de CodeSecurity escaneo (seguridad continua).
CodeBuild inicia el proceso de análisis de seguridad, en el que los archivos Helm de implementación de Dockerfile y Kubernetes se escanean con 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
. Si la etapa de escaneo de seguridad es exitosa, se inicia la etapa de compilación (integración continua).
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.
Las vulnerabilidades detectadas en el paso 8 se cargan en Security Hub para que los desarrolladores o ingenieros las analicen más a fondo. Security Hub proporciona una descripción general y recomendaciones para corregir las vulnerabilidades.
Las notificaciones por correo electrónico de las distintas fases de la CodePipeline canalización se envían a través de Amazon SNS.
Una vez completadas las fases de integración continua, CodePipeline pasa a la etapa de implementación (entrega continua).
La imagen de Docker se implementa en Amazon EKS como una carga de trabajo de contenedor (pod) mediante gráficos de Helm.
El pod de la aplicación está configurado con Amazon CodeGuru Profiler Agent, que enviará los datos de creación de perfiles de la aplicación (CPU, uso del montón y latencia) a Amazon CodeGuru Profiler, lo que ayuda a los desarrolladores a comprender el comportamiento de la aplicación.
Herramientas
Servicios de AWS
AWS le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
AWS CodeBuild es un servicio de compilación totalmente gestionado que le ayuda a compilar código fuente, ejecutar pruebas unitarias y producir artefactos listos para su implementación.
AWS CodeCommit es un servicio de control de versiones que le ayuda a almacenar y gestionar repositorios de Git de forma privada, sin necesidad de gestionar su propio sistema de control de código fuente.
Amazon CodeGuru Profiler 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.
Amazon CodeGuru Reviewer utiliza el análisis de programas y el aprendizaje automático para detectar posibles defectos que son difíciles de encontrar para los desarrolladores y ofrece sugerencias para mejorar el código de Java y Python.
AWS le CodePipeline ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar cambios de software de forma continua.
Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
Amazon Elastic Kubernetes Service (Amazon EKS) le ayuda a ejecutar Kubernetes en AWS sin necesidad de instalar ni mantener su propio plano de control o nodos de Kubernetes.
Amazon EventBridge es un servicio de bus de eventos sin servidor que le ayuda a conectar sus aplicaciones con datos en tiempo real de diversas fuentes. Por ejemplo, las funciones de Lambda de AWS, los puntos de conexión de invocación HTTP que utilizan destinos de API o los buses de eventos de otras cuentas de AWS.
AWS Identity and Access Management (IAM) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
AWS Security Hub proporciona una visión completa de su estado de seguridad en AWS. También le permite comprobar si su entorno de AWS cumple con los estándares y las prácticas recomendadas del sector de seguridad.
Amazon Simple Notification Service (Amazon SNS) 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) 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
es un administrador de paquetes de código abierto para Kubernetes. Apache Maven
es una herramienta de software para la comprensión y administración de proyectos. BridgeCrew Checkov
es una herramienta de análisis de código estático para escanear la infraestructura como archivos de código (IaC) en busca de errores de configuración que puedan provocar problemas de seguridad o de conformidad. Aqua Security 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
Prácticas recomendadas
Se ha seguido el principio del privilegio mínimo para las entidades de IAM en todas las fases de esta solución. Si desea ampliar la solución con servicios de AWS adicionales o herramientas de terceros, le recomendamos que siga el principio de privilegios mínimos.
Si tiene varias aplicaciones Java, le recomendamos que cree canalizaciones de CI/CD 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
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Clona el GitHub repositorio. | Para clonar el repositorio, ejecute el siguiente comando.
| Desarrollador de aplicaciones, DevOps ingeniero |
Cree un bucket de S3 y suba el código. |
| AWS DevOps, DevOps ingeniero, administrador de la nube, DevOps |
Cree una CloudFormation pila de AWS. |
| AWS DevOps, DevOps |
Valide la implementación de la CloudFormation pila. |
| 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 en la documentación de Amazon S3. | AWS DevOps, DevOps |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Configure los gráficos de Helm de su aplicación Java. |
Puede habilitar diferentes funciones para las cargas de trabajo de Kubernetes cambiando los valores del | DevOps |
Valide los gráficos de Helm para detectar errores de sintaxis. |
| DevOps ingeniero |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Crear la canalización de CI/CD. |
| AWS DevOps |
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. Como AWS CloudFormation no admite las integraciones de Security Hub, este proceso debe realizarse manualmente.
| Administrador DevOps e ingeniero de AWS |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Permite CodeBuild ejecutar comandos Helm o kubectl en el clúster de Amazon EKS. | CodeBuild Para autenticarse y utilizar Helm o Importante: El siguiente procedimiento debe completarse antes de la fase de aprobación de la implementación. CodePipeline
| DevOps |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Compruebe que la canalización de CI/CD se inicie automáticamente. |
Para obtener más información sobre cómo iniciar la canalización mediante el uso CodePipeline, consulte Iniciar una canalización en CodePipeline, Iniciar una canalización manualmente e Iniciar una canalización según un cronograma en la CodePipeline documentación de AWS. | DevOps |
Apruebe la implementación. |
| 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 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 Amazon Profiler. CodeGuru Para la implementación inicial de una aplicación, Amazon CodeGuru Profiler tarda unos 15 minutos en visualizar los datos de creación de perfiles. | AWS DevOps |
Recursos relacionados
Información adicional
CodeGuru No se debe confundir Profiler con el servicio AWS X-Ray en términos de funcionalidad. CodeGuru Se prefiere Profiler para identificar las líneas de códigos más caras, que pueden provocar cuellos de botella o problemas de seguridad, y corregirlas antes de que se conviertan en un riesgo potencial. El servicio AWS X-Ray sirve para monitorear 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. Se pueden añadir las instrucciones de configuración de digitalización correspondientes a cualquiera de estas herramientasbuildspec/buildspec_secscan.yaml
, sustituyendo las instrucciones de digitalización de CodeGuru.