Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Creazione e distribuzione automatica di un'applicazione Java su Amazon EKS utilizzando una pipeline CI/CD
Creato da MAHESH RAGHUNANDANAN (AWS), James Radtke (AWS) e Jomcy Pappachen (AWS)
Riepilogo
Questo modello descrive come creare una pipeline di integrazione e distribuzione continua (CI/CD) che crea e distribuisce automaticamente un'applicazione Java con le DevSecOps pratiche consigliate in un cluster Amazon Elastic Kubernetes Service (Amazon EKS) sul cloud Amazon Web Services (AWS). Questo modello utilizza un'applicazione di saluto sviluppata con un framework Java Spring Boot e che utilizza Apache Maven.
Puoi utilizzare l'approccio di questo pattern per creare il codice per un'applicazione Java, impacchettare gli artefatti dell'applicazione come immagine Docker, eseguire la scansione di sicurezza dell'immagine e caricare l'immagine come contenitore di carichi di lavoro su Amazon EKS. L'approccio di questo pattern è utile se desideri migrare da un'architettura monolitica strettamente accoppiata a un'architettura di microservizi. L'approccio consente inoltre di monitorare e gestire l'intero ciclo di vita di un'applicazione Java, garantendo un livello di automazione più elevato e contribuendo a evitare errori o bug.
Prerequisiti e limitazioni
Prerequisiti
Un account AWS attivo.
AWS Command Line Interface (AWS CLI) versione 2, installata e configurata. Per ulteriori informazioni su questo argomento, consulta Installazione, aggiornamento e disinstallazione della versione 2 dell'interfaccia a riga di comando di AWS nella documentazione dell'interfaccia a riga di comando di AWS.
La versione 2 dell'interfaccia a riga di comando di AWS deve essere configurata con lo stesso ruolo IAM che crea il cluster Amazon EKS perché solo quel ruolo è autorizzato ad aggiungere altri ruoli IAM a.
aws-auth
ConfigMap
Per informazioni e passaggi per configurare AWS CLI, consulta Configuration Basics nella documentazione di AWS CLI.Ruoli e autorizzazioni di AWS Identity and Access Management (IAM) con accesso completo ad AWS CloudFormation. Per ulteriori informazioni su questo argomento, consulta Controlling access with IAM nella CloudFormation documentazione AWS.
Un cluster Amazon EKS esistente, con dettagli sul nome del ruolo IAM e sul ruolo IAM Amazon Resource Name (ARN) dei nodi di lavoro nel cluster EKS.
Kubernetes Cluster Autoscaler, installato e configurato nel tuo cluster Amazon EKS. Per ulteriori informazioni, consulta Cluster Autoscaler nella documentazione di Amazon EKS.
Accesso al codice nel repository. GitHub
Nota importante
AWS Security Hub è abilitato come parte dei CloudFormation modelli AWS inclusi nel codice. Per impostazione predefinita, dopo l'attivazione di Security Hub, viene fornita una prova gratuita di 30 giorni, dopodiché il servizio AWS prevede un costo. Per ulteriori informazioni sui prezzi, consulta i prezzi di AWS Security Hub
Versioni del prodotto
Helm versione 3.4.2 o successiva
Apache Maven versione 3.6.3 o successiva
BridgeCrew Checkov versione 2.2 o successiva
Aqua Security Trivy versione 0.37 o successiva
Architettura
Stack tecnologico
AWS CodeBuild
AWS CodeCommit
Amazon CodeGuru
AWS CodePipeline
Amazon Elastic Container Registry
Amazon Elastic Kubernetes Service
Amazon EventBridge
Centrale di sicurezza AWS
Servizio di notifica semplice Amazon (Amazon Simple Notification Service (Amazon SNS))
Architettura Target

Il diagramma mostra il flusso di lavoro seguente:
Lo sviluppatore aggiorna il codice dell'applicazione Java nel ramo base del CodeCommit repository, che crea una pull request (PR).
Non appena il PR viene inviato, Amazon CodeGuru Reviewer esamina automaticamente il codice, lo analizza in base alle migliori pratiche per Java e fornisce consigli allo sviluppatore.
Dopo che il PR è stato unito al ramo base, viene creato un EventBridge evento Amazon.
L' EventBridge evento avvia la CodePipeline pipeline, che si avvia.
CodePipeline esegue la fase di CodeSecurity scansione (sicurezza continua).
CodeBuild avvia il processo di scansione di sicurezza in cui i file Helm della distribuzione Dockerfile e Kubernetes vengono scansionati utilizzando Checkov e il codice sorgente dell'applicazione viene scansionato in base alle modifiche incrementali del codice. La scansione del codice sorgente dell'applicazione viene eseguita dal wrapper CLI (Command Line Interface) di CodeGuru Reviewer
. Se la fase di scansione di sicurezza ha esito positivo, viene avviata la fase di compilazione (integrazione continua).
Nella fase di compilazione, CodeBuild crea l'artefatto, lo impacchetta in un'immagine Docker, analizza l'immagine alla ricerca di vulnerabilità di sicurezza utilizzando Aqua Security Trivy e archivia l'immagine in Amazon ECR.
Le vulnerabilità rilevate dalla fase 8 vengono caricate su Security Hub per ulteriori analisi da parte di sviluppatori o ingegneri. Security Hub fornisce una panoramica e consigli per correggere le vulnerabilità.
Le notifiche e-mail relative alle varie fasi della CodePipeline pipeline vengono inviate tramite Amazon SNS.
Una volta completate le fasi di integrazione continua, CodePipeline entra nella fase Deploy (distribuzione continua).
L'immagine Docker viene distribuita su Amazon EKS come carico di lavoro container (pod) utilizzando i grafici Helm.
Il pod dell'applicazione è configurato con Amazon CodeGuru Profiler Agent che invierà i dati di profilazione dell'applicazione (CPU, utilizzo dell'heap e latenza) ad Amazon CodeGuru Profiler, che aiuta gli sviluppatori a comprendere il comportamento dell'applicazione.
Strumenti
Servizi AWS
AWS ti CloudFormation aiuta a configurare le risorse AWS, effettuarne il provisioning in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita su account e regioni AWS.
AWS CodeBuild è un servizio di build completamente gestito che ti aiuta a compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.
AWS CodeCommit è un servizio di controllo delle versioni che consente di archiviare e gestire archivi Git in modo privato, senza dover gestire il proprio sistema di controllo del codice sorgente.
Amazon CodeGuru Profiler raccoglie dati sulle prestazioni di runtime dalle tue applicazioni live e fornisce consigli che possono aiutarti a ottimizzare le prestazioni delle tue applicazioni.
Amazon CodeGuru Reviewer utilizza l'analisi dei programmi e l'apprendimento automatico per rilevare potenziali difetti difficili da trovare per gli sviluppatori e offre suggerimenti per migliorare il codice Java e Python.
AWS ti CodePipeline aiuta a modellare e configurare rapidamente le diverse fasi di un rilascio di software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.
Amazon Elastic Container Registry (Amazon ECR) è un servizio di registro di immagini di container gestito sicuro, scalabile e affidabile.
Amazon Elastic Kubernetes Service (Amazon EKS) ti aiuta a eseguire Kubernetes su AWS senza dover installare o gestire il tuo piano di controllo o i tuoi nodi Kubernetes.
Amazon EventBridge è un servizio di bus eventi senza server che ti aiuta a connettere le tue applicazioni con dati in tempo reale provenienti da una varietà di fonti. Ad esempio, funzioni AWS Lambda, endpoint di invocazione HTTP che utilizzano destinazioni API o bus di eventi in altri account AWS.
AWS Identity and Access Management (IAM) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.
AWS Security Hub offre una visione completa dello stato di sicurezza in AWS. Inoltre, ti aiuta a verificare il tuo ambiente AWS rispetto agli standard e alle best practice del settore della sicurezza.
Amazon Simple Notification Service (Amazon SNS) ti aiuta a coordinare e gestire lo scambio di messaggi tra editori e clienti, inclusi server Web e indirizzi e-mail.
Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
Altri servizi
Helm
è un gestore di pacchetti open source per Kubernetes. Apache Maven
è uno strumento di comprensione e gestione di progetti software. BridgeCrew Checkov
è uno strumento statico di analisi del codice per la scansione dei file Infrastructure as Code (IaC) alla ricerca di configurazioni errate che potrebbero portare a problemi di sicurezza o conformità. Aqua Security Trivy
è uno scanner completo per le vulnerabilità nelle immagini dei container, nei file system e negli archivi Git, oltre ai problemi di configurazione.
Codice
Il codice per questo pattern è disponibile nel repository. GitHub aws-codepipeline-devsecops-amazoneks
Best practice
Il principio del privilegio minimo è stato seguito per le entità IAM in tutte le fasi di questa soluzione. Se desideri estendere la soluzione con servizi AWS aggiuntivi o strumenti di terze parti, ti consigliamo di seguire il principio del privilegio minimo.
Se disponi di più applicazioni Java, ti consigliamo di creare pipeline CI/CD separate per ogni applicazione.
Se disponi di un'applicazione monolitica, ti consigliamo di suddividerla il più possibile in microservizi. I microservizi sono più flessibili, semplificano la distribuzione delle applicazioni come contenitori e offrono una migliore visibilità sulla creazione e sulla distribuzione complessive dell'applicazione.
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Clona il GitHub repository. | Per clonare il repository, esegui il comando seguente.
| Sviluppatore di app, ingegnere DevOps |
Crea un bucket S3 e carica il codice. |
| AWS DevOps, DevOps ingegnere, amministratore del cloud, DevOps |
Crea uno CloudFormation stack AWS. |
| AWS DevOps, DevOps |
Convalida l'implementazione dello CloudFormation stack. |
| DevOps ingegnere |
Eliminare il bucket S3. | Svuota ed elimina il bucket S3 che hai creato in precedenza. Per ulteriori informazioni, consulta Eliminazione di un bucket nella documentazione di Amazon S3. | AWS DevOps, DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Configura i grafici Helm della tua applicazione Java. |
Puoi abilitare diverse funzionalità per i carichi di lavoro Kubernetes modificando i valori nel | DevOps |
Convalida i grafici Helm per gli errori di sintassi. |
| DevOps ingegnere |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea la pipeline CI/CD. |
| AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Attiva l'integrazione con Aqua Security. | Questo passaggio è necessario per caricare i risultati di vulnerabilità delle immagini Docker segnalati da Trivy su Security Hub. Poiché AWS CloudFormation non supporta le integrazioni di Security Hub, questo processo deve essere eseguito manualmente.
| Amministratore, DevOps ingegnere di AWS |
Attività | Descrizione | Competenze richieste |
---|---|---|
Consenti CodeBuild di eseguire comandi Helm o kubectl nel cluster Amazon EKS. | CodeBuild Per autenticarti per utilizzare Helm o ImportanteLa seguente procedura deve essere completata prima della fase di approvazione della distribuzione. CodePipeline
| DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Verificate che la pipeline CI/CD si avvii automaticamente. |
Per ulteriori informazioni sull'avvio della pipeline utilizzando CodePipeline, consulta Start a pipeline in CodePipeline, Avvia una pipeline manualmente e Avvia una pipeline on a schedule nella documentazione AWS. CodePipeline | DevOps |
Approva la distribuzione. |
| DevOps |
Convalida la profilazione dell'applicazione. | Una volta completata la distribuzione e distribuito il pod dell'applicazione in Amazon EKS, l'agente Amazon CodeGuru Profiler configurato nell'applicazione proverà a inviare i dati di profilazione dell'applicazione (CPU, riepilogo dell'heap, latenza e colli di bottiglia) ad Amazon Profiler. CodeGuru Per la distribuzione iniziale di un'applicazione, Amazon CodeGuru Profiler impiega circa 15 minuti per visualizzare i dati di profilazione. | AWS DevOps |
Risorse correlate
Informazioni aggiuntive
CodeGuru Profiler non deve essere confuso con il servizio AWS X-Ray in termini di funzionalità. CodeGuru Profiler è ideale per identificare le righe di codice più costose, che potrebbero causare strozzature o problemi di sicurezza, e correggerle prima che diventino un potenziale rischio. Il servizio AWS X-Ray serve per il monitoraggio delle prestazioni delle applicazioni.
In questo modello, le regole degli eventi sono associate al bus di eventi predefinito. Se necessario, è possibile estendere il pattern per utilizzare un bus di eventi personalizzato.
Questo modello utilizza CodeGuru Reviewer come strumento statico di test della sicurezza delle applicazioni (SAST) per il codice dell'applicazione. Puoi utilizzare questa pipeline anche per altri strumenti, come SonarQube Checkmarx. È possibile aggiungere le istruzioni di configurazione della scansione corrispondenti di uno qualsiasi di questi strumentibuildspec/buildspec_secscan.yaml
, sostituendo le istruzioni di scansione di. CodeGuru