Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Automatizza la gestione dinamica delle pipeline per l'implementazione di soluzioni hotfix in ambienti Gitflow utilizzando e AWS Service CatalogAWS CodePipeline - Prontuario AWS

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à.

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.

Flusso di lavoro per creare un evento del ciclo di vita.

Il diagramma precedente per la creazione di un evento del ciclo di vita mostra quanto segue:

  1. Lo sviluppatore crea una hotfix-* filiale nel CodeCommit repository per sviluppare una soluzione relativa all'hotfix.

  2. 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.

  3. La EventBridge regola richiama la funzione. AWS Lambda hotfix-lambda-function La EventBridge regola passa le informazioni sull'evento alla funzione Lambda come input.

  4. 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.

  5. 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.

  6. 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 nella hotfix-* filiale e inserito in Amazon Elastic Container Registry (Amazon ECR) Elastic Container Registry (Amazon ECR).

  7. 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

  8. La funzione prcreation-lambda Lambda viene richiamata dopo una corretta implementazione nell'ambiente Stage. Questa funzione Lambda crea un PR dal hotfix-* ramo ai main rami develop e del repository. La funzione Lambda assicura che la correzione sviluppata nel hotfix-* ramo venga ricongiunta e inclusa nelle distribuzioni successive.

  9. Una fase di approvazione manuale aiuta a garantire che le parti interessate necessarie esaminino la correzione e approvino l'implementazione in produzione.

  10. 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

Flusso di lavoro per eliminare un evento del ciclo di vita.

Il diagramma precedente per l'eliminazione di un evento del ciclo di vita mostra quanto segue:

  1. Lo sviluppatore elimina il hotfix-* ramo dopo la corretta implementazione dell'hotfix nell'ambiente di produzione.

  2. 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.

  3. La EventBridge regola richiama la funzione Lambda. La EventBridge regola passa le informazioni sull'evento alla funzione Lambda come input.

  4. 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.

  5. 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 le main e le develop 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

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àDescrizioneCompetenze richieste

Clonare il repository.

Per clonare il repository di esempio in una nuova directory nella posizione di lavoro, esegui il comando seguente:

git clone git@github.com:aws-samples/dynamic_hotfix_codepipeline.git
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.

  • ApplicationName— Questa variabile viene utilizzata per denominare le risorse create per un'applicazione, semplificandone il tracciamento. Utilizzate il seguente comando, sostituendolo Applicationname con il nome effettivo dell'applicazione:

    export ApplicationName=<Applicationname>
  • BucketStartName— Questa variabile serve per denominare un bucket Amazon S3. I nomi dei bucket S3 devono essere univoci a livello globale per tutti. Account AWS Usa il seguente comando, sostituendolo BucketName con un nome univoco per il tuo bucket S3:

export BucketStartName=<BucketName>
  • Numeri di account e regioni: queste variabili memorizzano Account AWS i numeri per ambienti diversi e per la regione di distribuzione. Utilizza i seguenti comandi, sostituendo i segnaposto (come prodaccountnumber eregion) con i Account AWS numeri effettivi e quelli Regione AWS che stai utilizzando.

    Nota

    QAAccount è facoltativo. Se desideri utilizzarloQAAccount, configuralo utilizzando i parametri dello stack di pipeline principale.

export ProdAccount=<prodaccountnumber> export StageAccount=<stage/preprodaccountnumber> export QAAccount=<qaccountnumber> export ToolsAccount=<toolsaccountnumber> export DepRegion=<region>
AWS DevOps

Configura l'ambiente di lavoro

AttivitàDescrizioneCompetenze richieste

Clonare il repository.

Per clonare il repository di esempio in una nuova directory nella posizione di lavoro, esegui il comando seguente:

git clone git@github.com:aws-samples/dynamic_hotfix_codepipeline.git
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.

  • ApplicationName— Questa variabile viene utilizzata per denominare le risorse create per un'applicazione, semplificandone il tracciamento. Utilizzate il seguente comando, sostituendolo Applicationname con il nome effettivo dell'applicazione:

    export ApplicationName=<Applicationname>
  • BucketStartName— Questa variabile serve per denominare un bucket Amazon S3. I nomi dei bucket S3 devono essere univoci a livello globale per tutti. Account AWS Usa il seguente comando, sostituendolo BucketName con un nome univoco per il tuo bucket S3:

export BucketStartName=<BucketName>
  • Numeri di account e regioni: queste variabili memorizzano Account AWS i numeri per ambienti diversi e per la regione di distribuzione. Utilizza i seguenti comandi, sostituendo i segnaposto (come prodaccountnumber eregion) con i Account AWS numeri effettivi e quelli Regione AWS che stai utilizzando.

    Nota

    QAAccount è facoltativo. Se desideri utilizzarloQAAccount, configuralo utilizzando i parametri dello stack di pipeline principale.

export ProdAccount=<prodaccountnumber> export StageAccount=<stage/preprodaccountnumber> export QAAccount=<qaccountnumber> export ToolsAccount=<toolsaccountnumber> export DepRegion=<region>
AWS DevOps
AttivitàDescrizioneCompetenze 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 QAAccount parametro se non utilizzi l'account QA per la configurazione.)

#InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/pre-reqs.yaml \ --stack-name prereqs \ --parameter-overrides BucketStartName=${BucketStartName} \ ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \ StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \ QAAccount=${QAAccount} \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}

Prendi nota delle risorse che il CodeCommit repository e Amazon ECR hanno creato dallo stack precedente. Questi parametri sono necessari per configurare il main ramo della pipeline nelle fasi successive.

AWS DevOps

Crea le risorse necessarie per CI/CD negli account del carico di lavoro.

  1. Per inserire il CloudFormation modello in ogni account di carico di lavoro (fase, produzione e controllo qualità opzionale), usa i seguenti comandi. Nel comando seguente, sostituiscilo S3bucketpackage con il nome del bucket Amazon S3 che desideri utilizzare per il packaging.

    #InStageAccount aws cloudformation package \ --template-file pre-requisites/infrastack.yaml \ --s3-bucket <S3bucketpackage> \ --s3-prefix infraStack \ --region ${DepRegion} \ --output-template-file pre-requisites/infrastructure_stage.template #InProdAccount aws cloudformation package \ --template-file pre-requisites/infrastack.yaml \ --s3-bucket <S3bucketpackage> \ --s3-prefix infraStack \ --region ${DepRegion} \ --output-template-file pre-requisites/infrastructure_prod.template
  2. Per distribuire il CloudFormation modello in ogni account di carico di lavoro, usa i seguenti comandi:

    #InStageAccount aws cloudformation deploy --stack-name inframainstack \ --parameter-overrides ApplicationName=${ApplicationName} ToolsAccount=${ToolsAccount} DepRegion=${DepRegion} \ --template-file pre-requisites/infrastructure_stage.template --region ${DepRegion} --capabilities CAPABILITY_NAMED_IAM #InProdAccount aws cloudformation deploy --stack-name inframainstack \ --parameter-overrides ApplicationName=${ApplicationName} ToolsAccount=${ToolsAccount} DepRegion=${DepRegion} \ --template-file pre-requisites/infrastructure_prod.template --region ${DepRegion} --capabilities CAPABILITY_NAMED_IAM
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 QAAccount parametro se non lo usi per la configurazione).

#InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/pre-reqs.yaml \ --stack-name prereqs \ --parameter-overrides BucketStartName=${BucketStartName} \ ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \ StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \ QAAccount=${QAAccount} PutPolicy=true \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}
AWS DevOps

Imposta i prerequisiti richiesti in Account AWS

AttivitàDescrizioneCompetenze 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 QAAccount parametro se non utilizzi l'account QA per la configurazione.)

#InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/pre-reqs.yaml \ --stack-name prereqs \ --parameter-overrides BucketStartName=${BucketStartName} \ ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \ StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \ QAAccount=${QAAccount} \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}

Prendi nota delle risorse che il CodeCommit repository e Amazon ECR hanno creato dallo stack precedente. Questi parametri sono necessari per configurare il main ramo della pipeline nelle fasi successive.

AWS DevOps

Crea le risorse necessarie per CI/CD negli account del carico di lavoro.

  1. Per inserire il CloudFormation modello in ogni account di carico di lavoro (fase, produzione e controllo qualità opzionale), usa i seguenti comandi. Nel comando seguente, sostituiscilo S3bucketpackage con il nome del bucket Amazon S3 che desideri utilizzare per il packaging.

    #InStageAccount aws cloudformation package \ --template-file pre-requisites/infrastack.yaml \ --s3-bucket <S3bucketpackage> \ --s3-prefix infraStack \ --region ${DepRegion} \ --output-template-file pre-requisites/infrastructure_stage.template #InProdAccount aws cloudformation package \ --template-file pre-requisites/infrastack.yaml \ --s3-bucket <S3bucketpackage> \ --s3-prefix infraStack \ --region ${DepRegion} \ --output-template-file pre-requisites/infrastructure_prod.template
  2. Per distribuire il CloudFormation modello in ogni account di carico di lavoro, usa i seguenti comandi:

    #InStageAccount aws cloudformation deploy --stack-name inframainstack \ --parameter-overrides ApplicationName=${ApplicationName} ToolsAccount=${ToolsAccount} DepRegion=${DepRegion} \ --template-file pre-requisites/infrastructure_stage.template --region ${DepRegion} --capabilities CAPABILITY_NAMED_IAM #InProdAccount aws cloudformation deploy --stack-name inframainstack \ --parameter-overrides ApplicationName=${ApplicationName} ToolsAccount=${ToolsAccount} DepRegion=${DepRegion} \ --template-file pre-requisites/infrastructure_prod.template --region ${DepRegion} --capabilities CAPABILITY_NAMED_IAM
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 QAAccount parametro se non lo usi per la configurazione).

#InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/pre-reqs.yaml \ --stack-name prereqs \ --parameter-overrides BucketStartName=${BucketStartName} \ ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \ StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \ QAAccount=${QAAccount} PutPolicy=true \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}
AWS DevOps
AttivitàDescrizioneCompetenze richieste

Configura il portafoglio e i prodotti Service Catalog.

Per configurare il portafoglio e i prodotti Service Catalog, procedi come segue:

  1. Carica i modelli pipeline-main.yaml e pipeline-hotfix.yaml dal repository nella CodePipeline directory in un bucket Amazon S3 esistente () nella regione in cui desideri effettuare la distribuzione (). Bucketname DepRegion

    #InToolsAccount aws s3 cp ./codepipeline/pipeline-main.yaml s3://<Bucketname>/pipeline-main.yaml aws s3 cp ./codepipeline/pipeline-hotfix.yaml s3://<Bucketname>/pipeline-hotfix.yaml
  2. Configura il portafoglio e il prodotto Service Catalog che gestiranno la pipeline per le hotfix filiali main e. Prendi nota dei dettagli contenuti nella Outputs sezione dedicata MainProductId e nello MainProductArtifactId stack seguente. Le informazioni sono necessarie nelle fasi successive durante la configurazione della pipeline per la main filiale.

    #InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/servicecatalogsetup.yaml \ --stack-name servicecatalogsetup \ --parameter-overrides TemplateBucket=<Bucketname> \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}
  3. Fornisci l'accesso a un ruolo IAM che distribuirà le risorse nell'account degli strumenti nel portafoglio di pipeline principale del portafoglio Service Catalog. Utilizza questo portafoglio per distribuire l'applicazione utilizzando la filiale. main Per ulteriori informazioni su come fornire l'accesso, vedere Concessione dell'accesso agli utenti nella documentazione del Service Catalog.

AWS DevOps

Configura le funzioni Lambda.

Questa soluzione utilizza le seguenti funzioni Lambda per gestire i flussi di lavoro degli hotfix:

  • hotfix-lambda-functiongestisce il provisioning dei prodotti Service Catalog quando viene creata una hotfix filiale.

  • hotfix-cleanup-lambda-functiongestisce la cessazione del prodotto quando viene eliminata una hotfix filiale.

  • prcreation-lambdacrea richieste pull dal hotfix ramo ai main rami develop and.

Per consentire alle funzioni Lambda di fornire e terminare i prodotti Service Catalog quando le hotfix filiali vengono create o eliminate tramite la EventBridge regola associata, utilizza i seguenti passaggi:

  1. Per creare i ruoli e le autorizzazioni IAM per le funzioni Lambda, usa il seguente comando per distribuire CloudFormation uno stack:

    #InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/lambdasetup.yaml \ --stack-name prsclambdasetup \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}
  2. Dopo la distribuzione dello stack, concedi l'hotfix-lambda-execution-roleaccesso al portfolio di hotfix pipeline del portfolio Service Catalog utilizzando il. AWS Management Console Questo accesso consente alla funzione Lambda di avviare o terminare il prodotto Service Catalog per le filiali hotfix.

AWS DevOps

Configura la funzione Lambda e le risorse del Service Catalog nell'account degli strumenti

AttivitàDescrizioneCompetenze richieste

Configura il portafoglio e i prodotti Service Catalog.

Per configurare il portafoglio e i prodotti Service Catalog, procedi come segue:

  1. Carica i modelli pipeline-main.yaml e pipeline-hotfix.yaml dal repository nella CodePipeline directory in un bucket Amazon S3 esistente () nella regione in cui desideri effettuare la distribuzione (). Bucketname DepRegion

    #InToolsAccount aws s3 cp ./codepipeline/pipeline-main.yaml s3://<Bucketname>/pipeline-main.yaml aws s3 cp ./codepipeline/pipeline-hotfix.yaml s3://<Bucketname>/pipeline-hotfix.yaml
  2. Configura il portafoglio e il prodotto Service Catalog che gestiranno la pipeline per le hotfix filiali main e. Prendi nota dei dettagli contenuti nella Outputs sezione dedicata MainProductId e nello MainProductArtifactId stack seguente. Le informazioni sono necessarie nelle fasi successive durante la configurazione della pipeline per la main filiale.

    #InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/servicecatalogsetup.yaml \ --stack-name servicecatalogsetup \ --parameter-overrides TemplateBucket=<Bucketname> \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}
  3. Fornisci l'accesso a un ruolo IAM che distribuirà le risorse nell'account degli strumenti nel portafoglio di pipeline principale del portafoglio Service Catalog. Utilizza questo portafoglio per distribuire l'applicazione utilizzando la filiale. main Per ulteriori informazioni su come fornire l'accesso, vedere Concessione dell'accesso agli utenti nella documentazione del Service Catalog.

AWS DevOps

Configura le funzioni Lambda.

Questa soluzione utilizza le seguenti funzioni Lambda per gestire i flussi di lavoro degli hotfix:

  • hotfix-lambda-functiongestisce il provisioning dei prodotti Service Catalog quando viene creata una hotfix filiale.

  • hotfix-cleanup-lambda-functiongestisce la cessazione del prodotto quando viene eliminata una hotfix filiale.

  • prcreation-lambdacrea richieste pull dal hotfix ramo ai main rami develop and.

Per consentire alle funzioni Lambda di fornire e terminare i prodotti Service Catalog quando le hotfix filiali vengono create o eliminate tramite la EventBridge regola associata, utilizza i seguenti passaggi:

  1. Per creare i ruoli e le autorizzazioni IAM per le funzioni Lambda, usa il seguente comando per distribuire CloudFormation uno stack:

    #InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/lambdasetup.yaml \ --stack-name prsclambdasetup \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}
  2. Dopo la distribuzione dello stack, concedi l'hotfix-lambda-execution-roleaccesso al portfolio di hotfix pipeline del portfolio Service Catalog utilizzando il. AWS Management Console Questo accesso consente alla funzione Lambda di avviare o terminare il prodotto Service Catalog per le filiali hotfix.

AWS DevOps
AttivitàDescrizioneCompetenze richieste

Configura la pipeline per la main filiale.

Per configurare la pipeline per il ramo principale, esegui il seguente comando nell'account degli strumenti. Sostituisci i parametri per MainProductId e MainProductArtifactId con i valori degli servicecatalogsetup stack output.

#InToolsAccount aws servicecatalog provision-product \ --product-id <MainProductId> \ --provisioning-artifact-id <MainProductArtifactId> \ --provisioned-product-name "${ApplicationName}-main-pipeline" \ --provisioning-parameters Key=CodeCommitRepoName,Value="${ApplicationName}-repository" Key=ECRRepository,Value="${ApplicationName}-app" \ --region=${DepRegion}
AWS DevOps

Distribuisci l'applicazione utilizzando la main filiale.

  1. Per clonare il CodeCommit repository creato nelle prereq, usa il comando. git clone Per ulteriori informazioni, consulta Connect to the CodeCommit repository clonando il repository come descritto nella documentazione. CodeCommit

  2. Copia tutti i file dell'applicazione dalla repotemplates directory disponibile nel repository nel clone del repository locale (). ${ApplicationName}-repository Modificate i seguenti file per aggiornare l'ID. ToolsAccount In ogni file, individuate il RegistryAccountid parametro e impostatene il valore sul vostro ToolsAccount ID. Esegui il commit delle modifiche nel CodeCommit repository e invia i file ai develop rami main e.

  3. Per verificare la distribuzione dell'applicazione, monitorate l' CodePipeline esecuzione utilizzando. AWS Management Console Una volta completata la distribuzione, accedi all'applicazione utilizzando l'FQDN di Application Load Balancer nell'ambiente stage. Verificate che l'applicazione funzioni come previsto.

  4. Per approvare la distribuzione in produzione, utilizza la CodePipeline console per individuare la pipeline per l'applicazione. Trova il palco. ApprovalToStart Esamina le modifiche e, se soddisfacenti, fornisci l'approvazione manuale per procedere con l'implementazione in produzione.

AWS DevOps

Crea una pipeline per la filiale principale e distribuisci l'applicazione negli account dei carichi di lavoro

AttivitàDescrizioneCompetenze richieste

Configura la pipeline per la main filiale.

Per configurare la pipeline per il ramo principale, esegui il seguente comando nell'account degli strumenti. Sostituisci i parametri per MainProductId e MainProductArtifactId con i valori degli servicecatalogsetup stack output.

#InToolsAccount aws servicecatalog provision-product \ --product-id <MainProductId> \ --provisioning-artifact-id <MainProductArtifactId> \ --provisioned-product-name "${ApplicationName}-main-pipeline" \ --provisioning-parameters Key=CodeCommitRepoName,Value="${ApplicationName}-repository" Key=ECRRepository,Value="${ApplicationName}-app" \ --region=${DepRegion}
AWS DevOps

Distribuisci l'applicazione utilizzando la main filiale.

  1. Per clonare il CodeCommit repository creato nelle prereq, usa il comando. git clone Per ulteriori informazioni, consulta Connect to the CodeCommit repository clonando il repository come descritto nella documentazione. CodeCommit

  2. Copia tutti i file dell'applicazione dalla repotemplates directory disponibile nel repository nel clone del repository locale (). ${ApplicationName}-repository Modificate i seguenti file per aggiornare l'ID. ToolsAccount In ogni file, individuate il RegistryAccountid parametro e impostatene il valore sul vostro ToolsAccount ID. Esegui il commit delle modifiche nel CodeCommit repository e invia i file ai develop rami main e.

  3. Per verificare la distribuzione dell'applicazione, monitorate l' CodePipeline esecuzione utilizzando. AWS Management Console Una volta completata la distribuzione, accedi all'applicazione utilizzando l'FQDN di Application Load Balancer nell'ambiente stage. Verificate che l'applicazione funzioni come previsto.

  4. Per approvare la distribuzione in produzione, utilizza la CodePipeline console per individuare la pipeline per l'applicazione. Trova il palco. ApprovalToStart Esamina le modifiche e, se soddisfacenti, fornisci l'approvazione manuale per procedere con l'implementazione in produzione.

AWS DevOps
AttivitàDescrizioneCompetenze richieste

Crea una hotfix-* filiale e applica le modifiche.

Per creare una pipeline per la hotfix-* filiale e distribuire l'hotfix negli account del carico di lavoro, procedi come segue:

  1. Crea un ramo utilizzando un nome che inizia con la parola chiave. hotfix Ad esempio, questo modello utilizza il hotfix-check1 ramo nel repository dell' CodeCommit applicazione (${ApplicationName}-repository). Per passaggi più dettagliati, consulta Connect to an AWS CodeCommit repository e i comandi Git di base nella CodeCommit documentazione.

  2. Verificare che il prodotto Service Catalog Hotfix CICD Pipeline sia stato fornito correttamente in modo dinamico per la hotfix-check1 filiale. Il nome del prodotto fornito prende il nome dal nome del ramo dell'hotfix e dal nome del repository dell'applicazione. CodeCommit

  3. Effettua alcune modifiche minori nel file index.html e inseriscile nel repository. CodeCommit

  4. Verificate che l' CodePipeline esecuzione abbia esito positivo nell'ambiente di stage. Per la distribuzione nell'ambiente di produzione, fornisci l'approvazione manuale in CodePipeline.

  5. Verifica che le modifiche siano visibili nella home page dell'applicazione utilizzando il nome di dominio completo (FQDN) di Application Load Balancer. L'FQDN è disponibile nella sezione di. Outputs inframainstack-ALBStack-*

AWS DevOps

Elimina il hotfix-check1 ramo.

Per eliminare il hotfix-check1 ramo creato in precedenza, procedi come segue:

  1. Eliminate il hotfix-check1 ramo che si trova nel repository CodeCommit dell'applicazione.

  2. Verificare che il prodotto Service Catalog fornito per la hotfix-check1 filiale sia stato terminato correttamente.

AWS DevOps

Crea la pipeline per un ramo hotfix-* e distribuisci l'hotfix

AttivitàDescrizioneCompetenze richieste

Crea una hotfix-* filiale e applica le modifiche.

Per creare una pipeline per la hotfix-* filiale e distribuire l'hotfix negli account del carico di lavoro, procedi come segue:

  1. Crea un ramo utilizzando un nome che inizia con la parola chiave. hotfix Ad esempio, questo modello utilizza il hotfix-check1 ramo nel repository dell' CodeCommit applicazione (${ApplicationName}-repository). Per passaggi più dettagliati, consulta Connect to an AWS CodeCommit repository e i comandi Git di base nella CodeCommit documentazione.

  2. Verificare che il prodotto Service Catalog Hotfix CICD Pipeline sia stato fornito correttamente in modo dinamico per la hotfix-check1 filiale. Il nome del prodotto fornito prende il nome dal nome del ramo dell'hotfix e dal nome del repository dell'applicazione. CodeCommit

  3. Effettua alcune modifiche minori nel file index.html e inseriscile nel repository. CodeCommit

  4. Verificate che l' CodePipeline esecuzione abbia esito positivo nell'ambiente di stage. Per la distribuzione nell'ambiente di produzione, fornisci l'approvazione manuale in CodePipeline.

  5. Verifica che le modifiche siano visibili nella home page dell'applicazione utilizzando il nome di dominio completo (FQDN) di Application Load Balancer. L'FQDN è disponibile nella sezione di. Outputs inframainstack-ALBStack-*

AWS DevOps

Elimina il hotfix-check1 ramo.

Per eliminare il hotfix-check1 ramo creato in precedenza, procedi come segue:

  1. Eliminate il hotfix-check1 ramo che si trova nel repository CodeCommit dell'applicazione.

  2. Verificare che il prodotto Service Catalog fornito per la hotfix-check1 filiale sia stato terminato correttamente.

AWS DevOps
AttivitàDescrizioneCompetenze richieste

Pulisci le risorse distribuite.

Per pulire le risorse distribuite in precedenza, procedi come segue:

  1. Per ridimensionare il servizio Amazon ECS fino a zero repliche negli account di carico di lavoro, usa il seguente comando:

    aws ecs update-service --cluster ${ApplicationName}-Cluster --service ${ApplicationName}-Service-stage --desired-count 0 --region ${DepRegion} aws ecs update-service --cluster ${ApplicationName}-Cluster --service ${ApplicationName}-Service-prod --desired-count 0 --region ${DepRegion}
  2. Terminare il prodotto Service Catalog fornito per la main filiale.

  3. Pulisci gli oggetti creati nei bucket Amazon S3 nell'account degli strumenti. Elimina tutte le immagini Docker in Amazon ECR prima di eliminare il registro stesso.

  4. Rimuovi i ruoli IAM nella sezione di accesso concesso dei portafogli Service Catalog prima di eliminare il portafoglio Service Catalog.

  5. Elimina gli CloudFormation stack distribuiti nell'account degli strumenti e negli account del carico di lavoro.

##In Tools Account## aws cloudformation delete-stack --stack-name servicecatalogsetup --region ${DepRegion} aws cloudformation delete-stack --stack-name prlambdasetup --region ${DepRegion} aws cloudformation delete-stack --stack-name prereqs --region ${DepRegion}
##In Workload Accounts## aws cloudformation delete-stack --stack-name inframainstack --region ${DepRegion}

Per ulteriori informazioni, vedere Eliminazione dei prodotti forniti nella documentazione del Service Catalog.

AWS DevOps

Pulizia delle risorse

AttivitàDescrizioneCompetenze richieste

Pulisci le risorse distribuite.

Per pulire le risorse distribuite in precedenza, procedi come segue:

  1. Per ridimensionare il servizio Amazon ECS fino a zero repliche negli account di carico di lavoro, usa il seguente comando:

    aws ecs update-service --cluster ${ApplicationName}-Cluster --service ${ApplicationName}-Service-stage --desired-count 0 --region ${DepRegion} aws ecs update-service --cluster ${ApplicationName}-Cluster --service ${ApplicationName}-Service-prod --desired-count 0 --region ${DepRegion}
  2. Terminare il prodotto Service Catalog fornito per la main filiale.

  3. Pulisci gli oggetti creati nei bucket Amazon S3 nell'account degli strumenti. Elimina tutte le immagini Docker in Amazon ECR prima di eliminare il registro stesso.

  4. Rimuovi i ruoli IAM nella sezione di accesso concesso dei portafogli Service Catalog prima di eliminare il portafoglio Service Catalog.

  5. Elimina gli CloudFormation stack distribuiti nell'account degli strumenti e negli account del carico di lavoro.

##In Tools Account## aws cloudformation delete-stack --stack-name servicecatalogsetup --region ${DepRegion} aws cloudformation delete-stack --stack-name prlambdasetup --region ${DepRegion} aws cloudformation delete-stack --stack-name prereqs --region ${DepRegion}
##In Workload Accounts## aws cloudformation delete-stack --stack-name inframainstack --region ${DepRegion}

Per ulteriori informazioni, vedere Eliminazione dei prodotti forniti nella documentazione del Service Catalog.

AWS DevOps

Risoluzione dei problemi

ProblemaSoluzione

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.

PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.