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à.
Automatizza la gestione dinamica delle pipeline per l'implementazione di soluzioni hotfix in ambienti Gitflow utilizzando e AWS Service CatalogAWS CodePipeline
Creato da Balaji Vedagiri (AWS), Faisal Shahdad (AWS), Shanmugam Shanker (AWS) e Vivek Thangamuthu (AWS)
Riepilogo
Nota
AWS CodeCommit non è più disponibile per i nuovi clienti. I clienti esistenti di AWS CodeCommit possono continuare a utilizzare il servizio normalmente. Ulteriori informazioni
Questo modello affronta uno scenario di gestione di una pipeline dinamica di hotfix dedicata esclusivamente alla distribuzione sicura di soluzioni hotfix in un ambiente di produzione. La soluzione viene implementata e gestita utilizzando un portafoglio e un prodotto. AWS Service Catalog Per l'automazione degli eventi viene utilizzata una EventBridge regola Amazon. Le restrizioni vengono applicate utilizzando i vincoli del portafoglio di Service Catalog e i ruoli AWS Identity and Access Management (IAM) per gli sviluppatori. È consentita solo una AWS Lambda funzione per avviare il prodotto Service Catalog, attivata dalla EventBridge regola. Questo modello è progettato per ambienti con una configurazione Gitflow specifica, descritta in Informazioni aggiuntive.
In genere, viene implementato un hotfix per risolvere problemi critici o di sicurezza segnalati in un ambiente live, come Production. Gli hotfix devono essere implementati direttamente solo negli ambienti di staging e produzione. Le pipeline di staging e production sono ampiamente utilizzate per le richieste di sviluppo regolari. Queste pipeline non possono essere utilizzate per implementare hotfix perché esistono funzionalità continue di garanzia della qualità che non possono essere promosse alla produzione. Per rilasciare gli hotfix, questo schema descrive una pipeline dinamica e di breve durata con le seguenti funzionalità di sicurezza:
Creazione automatica: una pipeline di hotfix viene creata automaticamente ogni volta che viene creato un ramo di hotfix in un repository. AWS CodeCommit
Restrizioni di accesso: gli sviluppatori non hanno accesso alla creazione di questa pipeline al di fuori del processo di hotfix.
Fase controllata: la pipeline dispone di una fase controllata con uno speciale token di accesso, che garantisce che una pull request (PR) possa essere creata una sola volta.
Fasi di approvazione: le fasi di approvazione sono incluse nella pipeline per ottenere le approvazioni necessarie dalle parti interessate.
Eliminazione automatica: la pipeline degli hotfix viene eliminata automaticamente ogni volta che un
hotfix
ramo viene eliminato dal CodeCommit repository dopo l'unione con un PR.
Prerequisiti e limitazioni
Prerequisiti
Ne sono necessari tre attivi come Account AWS segue:
Account Tools: per l'integrazione continua e la configurazione della distribuzione continua (CI/CD).
Account Stage: per i test di accettazione da parte degli utenti.
Account di produzione: per un utente finale aziendale.
(Facoltativo) Aggiungi un account Account AWS che funga da account di controllo qualità. Questo account è necessario se si desidera sia una configurazione della pipeline principale, incluso il controllo qualità, sia una soluzione di pipeline hotfix per i test.
Uno AWS CloudFormation stack con una condizione opzionale da distribuire nell'account QA utilizzando la pipeline principale, se necessario. Il pattern può ancora essere testato senza la configurazione della pipeline principale creando ed eliminando un ramo.
hotfix
Un bucket Amazon Simple Storage Service (Amazon S3) per archiviare CloudFormation i modelli utilizzati per creare prodotti Service Catalog.
Crea regole di approvazione PR per il CodeCommit repository in conformità ai requisiti di conformità (dopo aver creato il repository).
Limita le autorizzazioni IAM degli sviluppatori e dei responsabili del team per negare l'esecuzione della funzione prcreation-lambda Lambda
perché dovrebbe essere richiamata solo dalla pipeline.
Limitazioni
Il CloudFormation provider viene utilizzato nella fase di implementazione e l'applicazione viene distribuita utilizzando un set di modifiche. CloudFormation Se desideri utilizzare un'opzione di distribuzione diversa, modifica lo CodePipeline stack come richiesto.
Questo modello utilizza AWS CodeBuild e altri file di configurazione per distribuire un microservizio di esempio. Se hai un tipo di carico di lavoro diverso (ad esempio, carichi di lavoro serverless), devi aggiornare tutte le configurazioni pertinenti.
Questo modello distribuisce l'applicazione in un'unica soluzione Regione AWS (ad esempio, US East (Virginia settentrionale) us-east-1). Account AWS Per la distribuzione in più regioni, modifica il riferimento alla regione nei comandi e negli stack.
Alcune Servizi AWS non sono disponibili in tutte. Regioni AWS Per la disponibilità regionale, consulta i servizi AWS per regione
. Per endpoint specifici, consulta Endpoints and quotas del servizio e scegli il link relativo al servizio.
Architettura
I diagrammi di questa sezione forniscono i flussi di lavoro per un evento del ciclo di vita di creazione e per un evento del ciclo di vita di eliminazione.

Il diagramma precedente per la creazione di un evento del ciclo di vita mostra quanto segue:
Lo sviluppatore crea una
hotfix-*
filiale nel CodeCommit repository per sviluppare una soluzione relativa all'hotfix.L'evento di creazione del
hotfix-*
ramo viene acquisito tramite la regola. EventBridge I dettagli dell'evento includono il nome del repository e il nome del ramo.La EventBridge regola richiama la funzione. AWS Lambda
hotfix-lambda-function
La EventBridge regola passa le informazioni sull'evento alla funzione Lambda come input.La funzione Lambda elabora l'input per recuperare il nome del repository e il nome del ramo. Avvia il prodotto Service Catalog con i valori recuperati dall'input elaborato.
Il prodotto Service Catalog include una configurazione della pipeline che implementerà la soluzione negli ambienti Stage e Production. Il blocco pipeline include le fasi di origine, compilazione e distribuzione. Inoltre, è prevista una fase di approvazione manuale per promuovere l'implementazione per l'ambiente di produzione.
La fase di origine recupera il codice dal repository e dal
hotfix-*
ramo creati nella prima fase. Il codice viene passato alla fase di compilazione tramite un bucket Amazon S3 per gli artefatti. Nella fase di creazione, viene creata un'immagine del contenitore che include l'hotfix sviluppato nellahotfix-*
filiale e inserito in Amazon Elastic Container Registry (Amazon ECR) Elastic Container Registry (Amazon ECR).La fase di distribuzione sull'ambiente di fase aggiorna Amazon Elastic Container Service (Amazon ECS) con l'immagine del contenitore più recente che include l'hotfix. L'hotfix viene distribuito creando ed eseguendo un set di modifiche. CloudFormation
La funzione
prcreation-lambda
Lambda viene richiamata dopo una corretta implementazione nell'ambiente Stage. Questa funzione Lambda crea un PR dalhotfix-*
ramo aimain
ramidevelop
e del repository. La funzione Lambda assicura che la correzione sviluppata nelhotfix-*
ramo venga ricongiunta e inclusa nelle distribuzioni successive.Una fase di approvazione manuale aiuta a garantire che le parti interessate necessarie esaminino la correzione e approvino l'implementazione in produzione.
La fase di distribuzione nell'ambiente di produzione aggiorna Amazon ECS con l'immagine del contenitore più recente che include l'hotfix. L'hotfix viene distribuito creando ed eseguendo un set di modifiche. CloudFormation

Il diagramma precedente per l'eliminazione di un evento del ciclo di vita mostra quanto segue:
Lo sviluppatore elimina il
hotfix-*
ramo dopo la corretta implementazione dell'hotfix nell'ambiente di produzione.L'evento di eliminazione del
hotfix-*
ramo viene acquisito tramite una EventBridge regola. I dettagli dell'evento includono il nome del repository e il nome del ramo.La EventBridge regola richiama la funzione Lambda. La EventBridge regola passa le informazioni sull'evento alla funzione Lambda come input.
La funzione Lambda elabora l'input per recuperare il nome del repository e il nome del ramo. La funzione Lambda determina il rispettivo prodotto Service Catalog dall'input passato e quindi termina il prodotto.
La cessazione del prodotto fornito da Service Catalog elimina la pipeline e le risorse pertinenti create in precedenza in quel prodotto.
Automazione e scalabilità
Il modello include una EventBridge regola e una funzione Lambda, in grado di gestire più richieste di creazione di branch hotfix in parallelo. La funzione Lambda fornisce al prodotto Service Catalog la regola dell'evento corrispondente.
La configurazione della pipeline viene gestita utilizzando il prodotto Service Catalog, che fornisce funzionalità di controllo della versione. La soluzione è inoltre scalabile automaticamente per gestire più sviluppi di hotfix per la stessa applicazione in parallelo.
La funzione prcreation-lambda
assicura che queste modifiche all'hotfix vengano reintegrate anche nei branch main
e nei branch tramite la creazione automatica di una richiesta pull.develop
Questo approccio è essenziale per mantenere aggiornate lemain
e ledevelop
branch con tutte le correzioni ed evitare potenziali regressioni del codice. Questo processo aiuta a mantenere la coerenza tra i rami e a prevenire le regressioni del codice assicurando che tutti i rami di lunga durata dispongano delle correzioni più recenti.
Strumenti
Servizi AWS
AWS CloudFormationti aiuta a configurare AWS le risorse, fornirle in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita tra e. Account AWS Regioni AWS
AWS CodeBuildè un servizio di compilazione completamente gestito che consente di compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per l'implementazione.
AWS CodeCommitè un servizio di controllo delle versioni che consente di archiviare e gestire in modo privato gli archivi Git, senza dover gestire il proprio sistema di controllo del codice sorgente. AWS CodeCommit non è più disponibile per i nuovi clienti. I clienti esistenti di AWS CodeCommit possono continuare a utilizzare il servizio normalmente. Per ulteriori informazioni, vedi Come migrare il tuo AWS CodeCommit repository verso un altro provider Git
. AWS CodePipelineti aiuta a modellare e configurare rapidamente le diverse fasi di una versione del 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 Container Service (Amazon ECS) è un servizio rapido e scalabile di gestione dei container che ti aiuta a eseguire, arrestare e gestire container in un cluster.
AWS Key Management Service (AWS KMS) ti aiuta a creare e controllare chiavi crittografiche per proteggere i tuoi dati.
AWS Service Catalogconsente di gestire centralmente i cataloghi di servizi IT approvati. AWS Gli utenti finali possono distribuire rapidamente soltanto i servizi IT approvati di cui hanno bisogno, in accordo con i vincoli stabiliti dall'organizzazione.
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 strumenti
AWS CloudFormation Linter (cfn-lint)
è un linter che verifica i modelli CloudFormation YAML o JSON rispetto alle specifiche delle risorse. CloudFormation Esegue anche altri controlli, come la verifica di valori validi per le proprietà delle risorse e il rispetto delle migliori pratiche. cfn-nag
è uno strumento open source che identifica potenziali problemi di sicurezza nei CloudFormation modelli mediante la ricerca di modelli. Docker
è un insieme di prodotti Platform as a Service (PaaS) che utilizzano la virtualizzazione a livello di sistema operativo per fornire software in container. Questo modello utilizza Docker per creare e testare le immagini dei container localmente. Git
è un sistema di controllo delle versioni distribuito e open source.
Archivio di codice
Il codice per questo pattern è disponibile nel repository GitHub dynamic_hotfix_codepipeline
Best practice
Rivedi e modifica i ruoli IAM e le policy di controllo dei servizi (SCP) nel tuo ambiente per assicurarti che limitino l'accesso in modo appropriato. Questo è fondamentale per prevenire qualsiasi azione che possa prevalere sulle misure di sicurezza incluse in questo modello. Segui il principio del privilegio minimo e concedi le autorizzazioni minime necessarie per eseguire un'attività. Per ulteriori informazioni, consulta le best practice relative alla concessione dei privilegi minimi e alla sicurezza nella documentazione IAM.
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Clonare il repository. | Per clonare il repository
| AWS DevOps |
Esporta le variabili di ambiente per la distribuzione CloudFormation in stack. | Definisci le seguenti variabili di ambiente che verranno utilizzate come input per gli CloudFormation stack più avanti in questo schema.
| AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea le risorse necessarie per CI/CD nell'account degli strumenti. | Per distribuire lo CloudFormation stack nell'account degli strumenti, usa i seguenti comandi. (Rimuovi il
Prendi nota delle risorse che il CodeCommit repository e Amazon ECR hanno creato dallo stack precedente. Questi parametri sono necessari per configurare il | AWS DevOps |
Crea le risorse necessarie per CI/CD negli account del carico di lavoro. |
| AWS DevOps |
Aggiorna la policy S3 Artifact Bucket per consentire l'accesso agli account dei carichi di lavoro. | Per aggiornare i prerequisiti dello CloudFormation stack nell'account tools, utilizza i seguenti comandi per aggiungere tutte le autorizzazioni necessarie per gli account di carico di lavoro Stage e Production. (Rimuovi il
| AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Configura il portafoglio e i prodotti Service Catalog. | Per configurare il portafoglio e i prodotti Service Catalog, procedi come segue:
| AWS DevOps |
Configura le funzioni Lambda. | Questa soluzione utilizza le seguenti funzioni Lambda per gestire i flussi di lavoro degli hotfix:
Per consentire alle funzioni Lambda di fornire e terminare i prodotti Service Catalog quando le
| AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Configura la pipeline per la | Per configurare la pipeline per il ramo principale, esegui il seguente comando nell'account degli strumenti. Sostituisci i parametri per
| AWS DevOps |
Distribuisci l'applicazione utilizzando la |
| AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea una | Per creare una pipeline per la
| AWS DevOps |
Elimina il | Per eliminare il
| AWS DevOps |
Attività | Descrizione | Competenze richieste |
---|---|---|
Pulisci le risorse distribuite. | Per pulire le risorse distribuite in precedenza, procedi come segue:
Per ulteriori informazioni, vedere Eliminazione dei prodotti forniti nella documentazione del Service Catalog. | AWS DevOps |
Risoluzione dei problemi
Problema | Soluzione |
---|---|
Le modifiche che hai apportato al CodeCommit repository non vengono distribuite. | Controlla la presenza di errori nei CodeBuild log nell'azione di compilazione di Docker. Per ulteriori informazioni, consulta la documentazione relativa ad CodeBuild . |
Il prodotto Service Catalog non viene fornito. | Esamina gli CloudFormation stack correlati per verificare la presenza di eventi non riusciti. Per ulteriori informazioni, consulta la documentazione relativa ad CloudFormation . |
Risorse correlate
Informazioni aggiuntive
Questo modello è progettato per ambienti con una configurazione Gitflow adottata per il flusso di lavoro di sviluppo. La CI/CD process. The pipelines follow the deployment cycle that starts from development and moves through quality assurance (QA), stage, and production environments. The CI/CD configurazione include due rami git con distribuzioni promozionali negli ambienti come segue:
La
develop
filiale viene implementata nell'ambiente di sviluppo.La
main
filiale si occupa degli ambienti di controllo qualità, stage e produzione.
In questa configurazione, è difficile applicare un hotfix o una patch di sicurezza più velocemente del normale ciclo di distribuzione mentre è in corso lo sviluppo attivo di nuove funzionalità. È necessario un processo dedicato per rispondere agli hotfix o alle richieste di sicurezza, garantendo che gli ambienti live rimangano correttamente funzionanti e sicuri.
Tuttavia, è possibile utilizzare altre opzioni disponibili senza richiedere un processo di distribuzione dedicato se:
Il CI/CD process is well-equipped with automated testing, such as functional and end-to-end tests, which eliminate the need for manual testing and prevent delays in deployments to production. However, if automated testing isn’t well integrated into the CI/CD processo, che consiste nell'apportare una piccola correzione all'ambiente di produzione, può diventare complesso e complicato per gli sviluppatori. Questo perché potrebbero esserci nuove funzionalità in attesa di approvazione e approvazione nell'ambiente di controllo qualità. Un hotfix o una correzione di sicurezza non possono essere messi in produzione in modo semplice e simultaneo.
I team di sviluppo implementano continuamente nuove funzionalità nell'ambiente di produzione, integrando hotfix o patch di sicurezza nella distribuzione pianificata di ogni nuova funzionalità. In altre parole, il prossimo aggiornamento delle funzionalità dell'ambiente di produzione comprende due componenti: l'aggiunta di una nuova funzionalità e l'inclusione dell'hotfix o della patch di sicurezza. Tuttavia, se il ciclo di implementazione non è continuo, possono esserci più nuove funzionalità in attesa di approvazione nell'ambiente di controllo qualità. La gestione di versioni diverse e la garanzia che vengano riapplicate le modifiche corrette possono quindi diventare complesse e soggette a errori.
Nota
Se utilizzi la versione 2 di AWS CodePipeline con i trigger appropriati configurati nella hotfix
filiale, avrai comunque bisogno di un processo dedicato per rispondere alle richieste non pianificate. Nella versione 2, puoi impostare i trigger per le richieste push o pull. L'esecuzione verrà messa in coda o eseguita immediatamente, a seconda dello stato precedente della pipeline. Tuttavia, con una pipeline dedicata, le correzioni vengono applicate immediatamente all'ambiente di produzione, garantendo che i problemi urgenti vengano risolti senza indugio.