Spiegazione passo per passo: creazione di una pipeline per stack di test e produzione
Immaginiamo un processo di rilascio in cui si invia un modello CloudFormation che viene utilizzato in CloudFormation per creare automaticamente uno stack di test. Dopo avere esaminato lo stack di test, puoi visualizzare in anteprima gli effetti delle modifiche apportate allo stack e decidere se implementarle. Per ottenere questo flusso di elaborazione, puoi utilizzare CloudFormation per creare il tuo stack di test, eliminarlo, creare un set di modifiche e quindi eseguirlo. Tuttavia ciascuna operazione prevede l’interazione manuale con CloudFormation. In questa procedura guidata, creeremo una pipeline CodePipeline che automatizza molte di queste operazioni, consentendoti di ottenere un flusso di elaborazione di distribuzione continua con i tuoi stack CloudFormation.
Prerequisiti
La procedura presuppone che siano stati utilizzati CodePipeline e CloudFormation e che si conosca il funzionamento delle pipeline e dei modelli AWS CloudFormation e degli stack. Per ulteriori informazioni su CodePipeline, consulta la Guida per l’utente di AWS CodePipeline. È inoltre necessario che sia presente un bucket Amazon S3 nella stessa Regione AWS dove crei la pipeline.
Importante
Il modello WordPress di esempio crea un’istanza EC2 che richiede una connessione a Internet. Verifica che la sottorete e il VPC predefiniti consentano il traffico in Internet.
Panoramica della spiegazione passo per passo
In questa procedura guidata viene creata una pipeline per un sito WordPress di esempio in uno stack. La pipeline è suddivisa in tre fasi. Ogni fase deve contenere almeno un’operazione, ovvero un’attività eseguita dalla pipeline sul tuo artefatto (il tuo input). Una fase organizza le operazioni in una pipeline. CodePipeline deve completare tutte le operazioni in una fase prima che la fase elabori nuovi artefatti, ad esempio, se è stato inviato un nuovo input per eseguire nuovamente la pipeline.
Al termine di questa procedura guidata, avrai una pipeline che esegue il flusso di elaborazione seguente:
-
La prima fase della pipeline recupera un artefatto di origine (un modello CloudFormation e i relativi file di configurazione) da un repository.
Si prepara un artefatto che include un esempio di modello WordPress e si carica in un bucket S3.
-
Nella seconda fase la pipeline crea uno stack di test e attende la tua approvazione.
Dopo avere esaminato lo stack di test, puoi scegliere di continuare con la pipeline originale o di creare e inviare un altro artefatto per apportare modifiche. Se approvi, questa fase elimina lo stack di test e la pipeline procede con la fase successiva.
-
Nella terza fase la pipeline crea un set di modifiche su uno stack di produzione e attende la tua approvazione.
Nell’esecuzione iniziale non avrai uno stack di produzione. Il set di modifiche mostra tutte le risorse che verranno create da CloudFormation. Se approvi, questa fase esegue il set di modifiche e crea il tuo stack di produzione.
Nota
CloudFormation è un servizio gratuito. Tuttavia, ti verrà addebitato un costo per le risorse AWS incluse nei tuoi stack, ad esempio l’istanza EC2, secondo la tariffa corrente. Per ulteriori informazioni sui prezzi di AWS, visita la pagina dei dettagli per ogni prodotto all’indirizzo http://aws.amazon.com
Fase 1: modifica dell’artefatto e caricamento in un bucket S3
Prima di creare la pipeline, è necessario configurare repository e file di origine. CodePipeline copia questi file di origine nell’archivio degli artefatti della pipeline, quindi li utilizza per eseguire azioni nella pipeline, ad esempio per creare uno stack CloudFormation.
Quando si utilizza Amazon Simple Storage Service (Amazon S3) come repository di origine, CodePipeline richiede di comprimere i file di origine prima di caricarli in un bucket S3. Il file compresso è un artefatto CodePipeline che può contenere un modello CloudFormation, un file di configurazione del modello o entrambi. Vengono forniti un artefatto che contiene un modello di WordPress di esempio e due file di configurazione del modello. I due file di configurazione specificano i valori dei parametri per il modello WordPress. CodePipeline li usa quando crea gli stack WordPress. Un file contiene i valori dei parametri per uno stack di test, l’altro per uno stack di produzione. È necessario modificare i file di configurazione, ad esempio specificare un nome di coppia di chiavi EC2 esistente di tua proprietà. Per ulteriori informazioni sugli artefatti, vedi CloudFormationArtefatti di .
Dopo aver creato il tuo artefatto, potrai caricarlo in un bucket S3.
Per modificare e caricare l’artefatto
-
Scaricare e aprire l’artefatto di esempio: https://s3.amazonaws.com/cloudformation-examples/user-guide/continuous-deployment/wordpress-single-instance.zip
. L’artefatto contiene tre file:
-
Il modello WordPress di esempio:
wordpress-single-instance.yaml -
Il file di configurazione del modello per lo stack di test: .:
test-stack-configuration.json -
Il file di configurazione del modello per lo stack di produzione:
prod-stack-configuration.json
-
-
Estrarre tutti i file e utilizzare un editor di testo per modificare i file di configurazione del modello.
Aprire i file di configurazione che contengono le coppie chiave-valore da mappare ai parametri del modello WordPress. I file di configurazione specificano i valori dei parametri utilizzati dalla tua pipeline quando crea gli stack di test e di produzione.
Modificare il ile
test-stack-configuration.jsonper specificare i valori dei parametri per lo stack di test e il fileprod-stack-configuration.jsonper lo stack di produzione.-
Modificare i valori delle chiavi
DBPasswordeDBRootPasswordin password da utilizzare per accedere al database WordPress. Come definito nel modello WordPress, i valori dei parametri devono contenere solo caratteri alfanumerici. -
Cambiare il valore della chiave
KeyNamein un nome di coppia di chiavi EC2 esistente in cui si crea la pipeline.
-
-
Aggiungere i file di configurazione modificati al file di artefatto originale (
.zip), sostituendo i file duplicati.A questo punto hai un artefatto personalizzato che puoi caricare in un bucket S3.
-
Caricare l’artefatto in un bucket S3 di cui si è proprietari.
Prendere nota della posizione del file. Si dovrà specificare il percorso di questo file quando si creerà la pipeline.
Note sugli artefatti e sul bucket S3:
-
Utilizza un bucket che si trovi nella stessa Regione AWS in cui verrà creata la pipeline.
-
CodePipeline richiede che il bucket sia abilitato per il controllo delle versioni.
-
È possibile anche utilizzare i servizi che non richiedono che i file vengano compressi prima di essere caricati, ad esempio GitHub oppure CodeCommit, per il repository di origine.
-
Gli artefatti possono contenere informazioni sensibili, ad esempio password. Limitare l’accesso in modo che solo gli utenti autorizzati possano visualizzare il file. Nel farlo assicurarsi che CodePipeline possa sempre accedere al file. Ad esempio, se carichi l’artefatto su un bucket S3, utilizza le policy del bucket S3 o le policy utente per limitare l’accesso.
-
A questo punto hai un artefatto che CodePipeline può inserire nella tua pipeline. Nella fase successiva è possibile specificare la posizione dell’artefatto e creare la pipeline WordPress.
Fase 2: creazione dello stack della pipeline
Per creare la pipeline WordPress, è possibile utilizzare un modello CloudFormation di esempio. Oltre a creare la pipeline, il modello consente di configurare i ruoli di servizio AWS Identity and Access Management (IAM) per CodePipeline e CloudFormation, un bucket S3 per l’archivio degli artefatti CodePipeline e un argomento Amazon Simple Notification Service (Amazon SNS) a cui la pipeline invia notifiche, ad esempio quelle sulle revisioni. Il modello di esempio semplifica il provisioning e la configurazione di tali risorse in un solo stack CloudFormation.
Per ulteriori dettagli sulla configurazione della pipeline, vedi Operazioni della pipeline.
Importante
Il modello WordPress di esempio crea un’istanza EC2 che richiede una connessione a Internet. Verifica che la sottorete e il VPC predefiniti consentano il traffico in Internet.
Per creare lo stack della pipeline
-
Scaricare il modello di esempio all’indirizzo https://s3.amazonaws.com/cloudformation-examples/user-guide/continuous-deployment/basic-pipeline.yml
. Salvarlo sul computer. -
Aprire la console CloudFormation all’indirizzo https://console.aws.amazon.com/cloudformation/
. -
Scegliere una regione AWS che supporta CodePipeline e CloudFormation.
Per ulteriori informazioni, consulta CodePipeline endpoints and quotas e CloudFormation endpoints and quotas in Riferimenti generali di AWS.
-
Seleziona Crea stack.
-
In Specify template (Specifica modello), scegli Upload a template file (Carica un file modello), quindi scegli il modello appena scaricato,
basic-pipeline.yml. -
Scegli Next (Successivo).
-
Per Stack name (Nome stack), digitare
sample-WordPress-pipeline. -
Nella sezione Parameters (Parametri) specificare i seguenti valori di parametro, quindi selezionare Next (Avanti). Quando si impostano i parametri dello stack, se sono stati mantenuti gli stessi nomi per il modello WordPress e i relativi file di configurazione, è possibile utilizzare i valori predefiniti. In caso contrario, specificare i nomi file utilizzati.
- PipelineName
-
Il nome della pipeline, ad esempio
WordPress-test-pipeline. - S3Bucket
-
Nome del bucket S3 in cui hai salvato il tuo artefatto (file
.zip). - SourceS3Key
-
Nome file dell’artefatto. Se hai salvato l’artefatto in una cartella, includila come parte del nome file, ad esempio
folder/subfolder/wordpress-single-instance.zip. -
L’indirizzo e-mail a cui CodePipeline invia notifiche sulla pipeline, ad esempio
myemail@example.com.
-
Per questa procedura guidata, non è necessario aggiungere tag o specificare impostazioni avanzate, quindi selezionare Next (Avanti).
-
Assicurarsi che il nome dello stack e l’URL del modello siano corretti e scegliere Create stack (Crea stack).
-
Per confermare di essere consapevoli che CloudFormation potrebbe creare risorse IAM, scegliere la casella di controllo.
AWS CloudFormation potrebbe impiegare diversi minuti per creare lo stack. È possibile controllare l’avanzamento negli eventi per lo stack. Per ulteriori informazioni, consulta Monitoraggio dell’avanzamento dello stack.
Dopo che lo stack è stato creato, CodePipeline avvia la nuova pipeline. Per visualizzarne lo stato, vedi la console CodePipeline
Operazioni della pipeline
In questa sezione vengono illustrate le tre fasi della pipeline mediante i frammenti del modello di pipeline WordPress di esempio.
Fase 1: origine
La prima fase della pipeline è una fase di origine in cui si specifica la posizione del codice sorgente. Ogni volta che inserisci una revisione in questa posizione, CodePipeline esegue di nuovo la pipeline.
Il codice sorgente si trova in un bucket S3 e viene identificato dal relativo nome file. Questi valori sono stati specificati come valori dei parametri di input al momento della creazione dello stack della pipeline. Per consentire l’utilizzo dell’artefatto di origine nelle fasi successive, il frammento specifica la proprietà OutputArtifacts con il nome TemplateSource. Per utilizzare questo artefatto nelle fasi successive, è necessario specificare TemplateSource come artefatto di input.
- Name: S3Source Actions: - Name: TemplateSource ActionTypeId: Category: Source Owner: AWS Provider: S3 Version: '1' Configuration: S3Bucket: !Ref 'S3Bucket' S3ObjectKey: !Ref 'SourceS3Key' OutputArtifacts: - Name: TemplateSource
Fase 2: TestStage
Nella fase TestStage la pipeline crea lo stack di test, attende l’approvazione, quindi elimina lo stack di test.
Per l’operazione CreateStack, la pipeline utilizza il file di configurazione di test e il modello WordPress per creare lo stack di test. Entrambi i file sono contenuti nell’artefatto di input TemplateSource, che viene introdotto dalla fase di origine. Il frammento utilizza la modalità di operazione REPLACE_ON_FAILURE. Se si la creazione dello stack non riesce la pipeline lo sostituisce, in questo modo non è più necessario eseguire la pulizia o risolvere i problemi dello stack prima di poter eseguire nuovamente la pipeline. La modalità di operazione è utile per effettuare in modo rapido iterazioni sugli stack di test. Per la proprietà RoleArn, il valore è un ruolo di servizio AWS CloudFormation dichiarato altrove nel modello.
L’operazione ApproveTestStack sospende la pipeline e invia una notifica all’indirizzo e-mail da te indicato al momento della creazione dello stack della pipeline. Mentre la pipeline è sospesa, è possibile controllare lo stack di test WordPress e le relative risorse. Utilizza CodePipeline per approvare o rifiutare questa operazione. La proprietà CustomData include una descrizione dell’operazione che stai approvando, che la pipeline aggiunge all’e-mail di notifica.
Dopo che questa operazione è stata approvata, CodePipeline passa all’operazione DeleteTestStack ed elimina lo stack WordPress di test e le relative risorse.
- Name: TestStage Actions: - Name: CreateStack ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' InputArtifacts: - Name: TemplateSource Configuration: ActionMode: REPLACE_ON_FAILURE RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref TestStackName TemplateConfiguration: !Sub "TemplateSource::${TestStackConfig}" TemplatePath: !Sub "TemplateSource::${TemplateFileName}" RunOrder: '1' - Name: ApproveTestStack ActionTypeId: Category: Approval Owner: AWS Provider: Manual Version: '1' Configuration: NotificationArn: !Ref CodePipelineSNSTopic CustomData: !Sub 'Do you want to create a change set against the production stack and delete the ${TestStackName} stack?' RunOrder: '2' - Name: DeleteTestStack ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' Configuration: ActionMode: DELETE_ONLY RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref TestStackName RunOrder: '3'
Fase 3: ProdStage
La fase ProdStage della pipeline crea un set di modifiche sullo stack di produzione esistente, attende l’approvazione, quindi esegue il set di modifiche.
Un set di modifiche fornisce un’anteprima di tutte le modifiche che AWS CloudFormation effettua sullo stack di produzione prima di implementarle. Sulla prima pipeline eseguita non avrai uno stack di produzione in esecuzione. Il set di modifiche mostra le operazioni che AWS CloudFormation ha eseguito durante la creazione dello stack di prova. Per creare il set di modifiche, l’operazione CreateChangeSet utilizza il modello di esempio WordPress e la configurazione del modello di produzione dall’artefatto di input TemplateSource.
Analogamente alla fase precedente, l’operazione ApproveChangeSet sospende la pipeline e invia una notifica e-mail. Mentre la pipeline è sospesa, è possibile visualizzare il set di modifiche per controllare tutte e modifiche allo stack WordPress di produzione proposte. Utilizza CodePipeline per approvare o rifiutare questa operazione rispettivamente per continuare o interrompere la pipeline.
Dopo avere approvato questa operazione, l’operazione ExecuteChangeSet esegue il set di modifiche in modo che AWS CloudFormation esegua tutte le operazioni descritte nel set di modifiche. Per l’esecuzione iniziale, AWS CloudFormation crea lo stack di produzione WordPress. Con le esecuzioni successive AWS CloudFormation aggiorna lo stack.
- Name: ProdStage Actions: - Name: CreateChangeSet ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' InputArtifacts: - Name: TemplateSource Configuration: ActionMode: CHANGE_SET_REPLACE RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref ProdStackName ChangeSetName: !Ref ChangeSetName TemplateConfiguration: !Sub "TemplateSource::${ProdStackConfig}" TemplatePath: !Sub "TemplateSource::${TemplateFileName}" RunOrder: '1' - Name: ApproveChangeSet ActionTypeId: Category: Approval Owner: AWS Provider: Manual Version: '1' Configuration: NotificationArn: !Ref CodePipelineSNSTopic CustomData: !Sub 'A new change set was created for the ${ProdStackName} stack. Do you want to implement the changes?' RunOrder: '2' - Name: ExecuteChangeSet ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' Configuration: ActionMode: CHANGE_SET_EXECUTE ChangeSetName: !Ref ChangeSetName RoleArn: !GetAtt [CFNRole, Arn] StackName: !Ref ProdStackName RunOrder: '3'
Fase 3: visualizzazione dello stack WordPress
Quando CodePipeline viene eseguito tramite la pipeline, utilizza CloudFormation per creare stack di test e di produzione. Per vedere lo stato di questi stack e il relativo output, è possibile utilizzare la console CloudFormation.
Per visualizzare uno stack
-
Aprire la console CloudFormation all’indirizzo https://console.aws.amazon.com/cloudformation/
. -
A seconda che la pipeline sia in fase di test o di produzione, scegliere lo stack
Test-MyWordPressSiteoProd-MyWordPressSite. -
Per controllare lo stato dello stack, visualizzare gli eventi dello stack.
Se lo stack si trova nello stato non riuscito, visualizzare il motivo per individuare l’errore. Correggere l’errore ed eseguire nuovamente la pipeline. Se lo stack si trova nello stato CREATE_COMPLETE, visualizzare gli output per ottenere l’URL del sito WordPress.
Hai utilizzato CodePipeline per creare un flusso di elaborazione di distribuzione continua per un sito WordPress di esempio. Se invii modifiche al bucket S3, CodePipeline rileva automaticamente una nuova versione, quindi esegue nuovamente la pipeline. Questo flusso di elaborazione semplifica l’invio e il test delle modifiche prima di apportare modifiche al sito di produzione.
Fase 4: Eliminazione delle risorse
Per essere sicuro che non ti vengano addebitati servizi indesiderati, elimina le risorse.
Importante
Elimina gli stack WordPress di test e di produzione prima di eliminare lo stack della pipeline. Lo stack della pipeline contiene un ruolo di servizio necessario per eliminare gli stack WordPress. Se hai eliminato prima lo stack della pipeline, puoi associare un altro ARN (Amazon Resource Name) del ruolo di servizio agli stack WordPress e quindi eliminarli.
Per eliminare oggetti nello store degli artefatti
Apri la console Amazon S3 all’indirizzo https://console.aws.amazon.com/s3/
. -
Scegliere il bucket S3 utilizzato da CodePipeline come store degli artefatti della pipeline.
Il nome del bucket segue il formato:
. Se è stata seguita questa procedura guidata, il nome del bucket potrebbe essere simile all’esempio seguente:stackname-artifactstorebucket-idsample-WordPress-pipeline-artifactstorebucket-12345abcd12345. -
Eliminare tutti gli oggetti nel bucket S3 dello store di artefatti.
Quando si elimina lo stack della pipeline nella fase successiva, questo bucket deve essere vuoto. In caso contrario, CloudFormation non sarà in grado di eliminare il bucket.
Per eliminare gli stack
-
Dalla console CloudFormation scegliere lo stack che si desidera eliminare.
Se gli stack WordPress che sono stati creati dalla pipeline sono ancora in esecuzione, sceglierli per primi. Per impostazione predefinita, i nomi degli stack sono
Test-MyWordPressSiteeProd-MyWordPressSite.Se sono stati già eliminati gli stack WordPress, scegliere lo stack
sample-WordPress-pipeline. -
Scegliere Actions (Operazioni), quindi Delete Stack (Elimina stack).
-
Nel messaggio di conferma, scegliere Yes, Delete (Sì, elimina).
CloudFormation elimina lo stack e tutte le relative risorse, ad esempio l’istanza EC2, l’argomento di notifica, il ruolo di servizio e la pipeline.
Ora che hai capito come creare un flusso di elaborazione CloudFormation di base con CodePipeline, puoi utilizzare il modello di esempio e gli artefatti come punto di partenza per crearne uno personalizzato.
Consulta anche
Le risorse correlate seguenti possono rivelarsi utili durante l’utilizzo di questi parametri.
-
Per ulteriori informazioni sui parametri delle operazioni CloudFormation in CodePipeline, consulta CloudFormation deploy action configuration reference nella Guida per l’utente di AWS CodePipeline.
-
Per i valori del modello di esempio per provider di operazioni, ad esempio per il campo
Ownero i campiconfiguration, consulta il Riferimento per la struttura delle operazioni nella Guida per l’utente di AWS CodePipeline. -
Per scaricare modelli di stack di pipeline di esempio in formato YAML o JSON, consulta Tutorial: Create a pipeline with CloudFormation nella Guida per l’utente di AWS CodePipeline.