Domande frequenti su AWS CodeDeploy

Domande generali

AWS CodeDeploy è un servizio che automatizza la distribuzione di software sia in istanze Amazon EC2 sia in istanze locali. Questo servizio semplifica le operazioni di distribuzione di nuove funzionalità, consente di evitare tempi di inattività durante l'implementazione e gestisce le complesse attività di aggiornamento delle applicazioni. Puoi usare AWS CodeDeploy per automatizzare le distribuzioni ed eliminare il bisogno di operazioni manuali soggette a errore; il servizio si ridimensiona con la tua infrastruttura in modo da permetterti di distribuire una sola istanza o migliaia.

AWS CodeDeploy è progettato per sviluppatori e amministratori che devono distribuire applicazioni sia in istanze Amazon EC2 sia in istanze locali. È un servizio flessibile e può anche essere usato per gli aggiornamenti di software o l’esecuzione di script su istanze.

AWS CodeDeploy può essere utilizzato per distribuire qualunque tipo di applicazione. Per utilizzare AWS CodeDeploy, è necessario specificare i file da copiare e gli script da eseguire su ciascuna istanza durante la distribuzione. AWS CodeDeploy non è basato su un linguaggio o un’architettura specifici, quindi si possono usare script per ogni logica di distribuzione personalizzata.

AWS CodeDeploy supporta un'ampia gamma di sistemi operativi. AWS CodeDeploy fornisce agenti testati per Amazon Linux, Red Hat Enterprise Linux, Ubuntu Server e Microsoft Windows Server. Per utilizzare altri sistemi operativi, l'agente AWS CodeDeploy è disponibile come software open source in questa pagina. Per ulteriori informazioni sui sistemi operativi supportati, consulta la documentazione di AWS CodeDeploy.

Sì. AWS CodeDeploy è compatibile con numerosi sistemi di gestione della configurazione, sistemi di integrazione e distribuzione continua e sistemi di controllo del codice sorgente. Per ulteriori informazioni, consulta la pagina relativa alle integrazione di prodotti.

AWS CodeDeploy è un servizio di base destinato ad aiutare gli sviluppatori a distribuire e aggiornare software sia in istanze Amazon EC2 sia in istanze locali. AWS Elastic Beanstalk e AWS OpsWorks sono soluzioni di gestione di applicazioni complete.

Sì. AWS CodeDeploy supporta tutte le istanze su cui è possibile installare un agente CodeDeploy e in grado di collegarsi agli endpoint pubblici di AWS.

Concetti

Un'applicazione è una raccolta di software e configurazioni da distribuire in un gruppo di istanze. In genere, le istanze in uno stesso gruppo eseguono lo stesso software. Per esempio, nel caso di un sistema distribuito su larga scala, il livello Web è probabilmente costituito da un’applicazione e il livello dati da un’altra applicazione.

Una revisione è una versione specifica di contenuto disponibile alla distribuzione, ad esempio codice sorgente, artefatti post-build, pagine Web, file eseguibili e script di implementazione, oltre a un file AppSpec. L’agente AWS CodeDeploy può accedere a una revisione da GitHub o da un bucket Amazon S3.

Un gruppo di distribuzione è l'entità AWS CodeDeploy per raggruppare istanze EC2 o funzioni AWS Lambda in una distribuzione CodeDeploy. Per distribuzioni EC2, si tratta di un gruppo di istanze associate all’applicazione di destinazione di una distribuzione. È possibile aggiungere istanze a un gruppo di distribuzione specificando tag, nome di gruppo Auto Scaling o entrambi. In una distribuzione AWS Lambda, un gruppo di distribuzione definisce un set di configurazioni di AWS CodeDeploy per distribuzioni Lambda serverless future nel gruppo stesso, ad esempio allarmi e rollback.

È possibile definire diversi gruppi di distribuzione per un'applicazione, ad esempio per gestione temporanea e produzione. Per informazioni sui tag, consulta il documento Working with Amazon EC2 Tags in the Console. Per ulteriori informazioni sulla distribuzione in gruppi Auto Scaling, consulta il documento Auto Scaling Integration.

Una configurazione di distribuzione specifica le modalità della distribuzione, ad esempio in che modo gestire gli errori, attraverso un gruppo di distribuzione. È possibile utilizzare una configurazione di distribuzione per eseguire distribuzioni senza tempi di inattività in gruppi di distribuzione composti da più istanze. Ad esempio, se un'applicazione necessita di almeno il 50% delle istanze in un gruppo di distribuzione per operare ed elaborare traffico, è possibile specificare questa impostazione nella configurazione; in tal modo la distribuzione non provocherà tempi di inattività. Se non è associata alcuna configurazione alla distribuzione o al gruppo di distribuzione, per impostazione predefinita AWS CodeDeploy procederà un'istanza alla volta.  Per ulteriori informazioni su configurazioni di distribuzione, consulta la pagina Instance Health.

Ci sono tre parametri da specificare per una distribuzione:

  1. Revisione: specifica quello che va distribuito
  2. Gruppo di distribuzione: specifica dove effettuare la distribuzione.
  3. Configurazione di distribuzione: un parametro opzionale che specifica come effettuare la distribuzione.

Un file AppSpec è un file di configurazione che specifica i file da copiare e gli script da eseguire. Il file AppSpec adotta il formato YAML e va incluso nella directory root della revisione. Questo tipo di file è utilizzato dall'agente AWS CodeDeploy ed è composto da due sezioni. La sezione relativa ai file specifica i file di origine nella revisione che vanno copiati e la cartella di destinazione su ogni istanza. La sezione relativa agli hook specifica il percorso degli script (ad esempio i percorsi relativi che iniziano dalla directory root del bundle di revisione) da eseguire durante ciascuna fase della distribuzione. Ogni fase della distribuzione è un evento del ciclo di vita della distribuzione. Di seguito è disponibile un esempio di file AppSpec. Per ulteriori informazioni sui file AppSpec, incluse tutte le opzioni selezionabili, consulta la pagina AppSpec File Reference.

os: linux

file: 

# Puoi specificare una o più mappature nella sezione dei file.

  - origine: /

    destinazione: /var/www/html/WordPress

hook:

 # La sezione degli hook del ciclo di vita permette di specificare gli script di distribuzione.

ApplicationStop: 

# Fase 1: arresto di Apache e MySQL se in esecuzione.

    - ubicazione: helper_scripts/stop_server.sh

BeforeInstall: 

# Fase 2: installazione di Apache e MySQL.

# Si possono specificare uno o più script per evento di ciclo di vita di distribuzione.

    - percorso: deploy_hooks/puppet-apply-apache.sh

    - percorso: deploy_hooks/puppet-apply-mysql.sh 

 AfterInstall: 

# Fase 3: Impostazione dei permessi.

    - percorso: deploy_hooks /change_permissions.sh

      timeout: 30

      runas: root

# Fase 4: avvio del server.

    - percorso: helper_scripts/stop_server.sh

      timeout: 30

      runas: root

Una distribuzione passa attraverso una serie di fasi predefinite chiamate eventi del ciclo di vita di distribuzione. Un evento del ciclo di vita di distribuzione offre la possibilità di eseguire del codice nell'ambito della distribuzione. La tabella seguente elenca i diversi eventi del ciclo di vita di distribuzione attualmente supportati, nell’ordine di esecuzione, insieme a esempi di quando possono essere usati.

Eventi del ciclo di vita di distribuzione:

  • ApplicationStop
    • È il primo evento del ciclo di vita di distribuzione; ha luogo prima ancora che la revisione venga scaricata. Il file AppSpec e gli script utilizzati per questo evento del ciclo di vita di distribuzione provengono dall'ultima revisione distribuita correttamente.  

      L’evento del ciclo di vita di distribuzione ApplicationStop può essere usato per arrestare l’applicazione senza errori gravi o rimuovere pacchetti già installati in preparazione di una distribuzione.

  • DownloadBundle

    • Durante questo evento del ciclo di vita di distribuzione, l'agente copia i file di revisione in un percorso temporaneo sull'istanza. Questo evento del ciclo di vita di distribuzione viene prenotato dall’agente e non può essere utilizzato per eseguire script di utente.

  • BeforeInstall

    • L’evento del ciclo di vita di distribuzione BeforeInstall può essere utilizzato per attività di preinstallazione come la decrittografia di file e la creazione di backup della versione attuale.

  • Installa

    • Durante questo evento del ciclo di vita di distribuzione, l'agente copia i file di revisione dal percorso temporaneo alla cartella di destinazione finale. Questo evento del ciclo di vita di distribuzione viene prenotato dall’agente e non può essere utilizzato per eseguire script di utente.

  •  AfterInstall

    • L’evento del ciclo di vita di distribuzione AfterInstall può essere utilizzato per attività quali la configurazione dell’applicazione o la modifica dei permessi del file.

  • ApplicationStart

    • Di solito si utilizza l’evento del ciclo di vita di distribuzione ApplicationStart per riavviare i servizi interrotti durante ApplicationStop.

  • ValidateService

    • ValidateService è l’ultimo evento del ciclo di vita di distribuzione ed è l’opportunità di verificare che la distribuzione è stata completata correttamente.

 

 

Nozioni di base

Per iniziare a utilizzare AWS CodeDeploy, è sufficiene accedere alla Console di gestione AWS. Per una panoramica rapida del servizio, consulta il documento Getting Started, che include un tutorial dettagliato.

Utilizzo di AWS CodeDeploy

Un'istanza Amazon EC2 deve essere associata a un profilo istanza IAM e deve essere eseguita su un sistema operativo supportato. Per ulteriori informazioni, consulta il documento Use an Existing Amazon EC2 Instance.

Il diagramma seguente mostra le fasi tipiche durante una distribuzione. La creazione di un'applicazione e di un gruppo di distribuzione (consulta la sezione Nozioni di base per una definizione di questi termini) sono in genere attività di configurazione una tantum. Le operazioni ricorrenti sono il caricamento di una revisione e la sua distribuzione. Per una spiegazione che includa istruzioni dettagliate per ognuna di queste attività, consulta la pagina Deployments.

Non è necessaria alcuna modifica al codice. È sufficiente aggiungere un file di configurazione (chiamato file AppSpec) nella directory root del bundle di revisione, che specifichi i file da copiare e gli script da eseguire.

Con GitHub, è possibile distribuire una revisione in formato .zip, .tar o .tar.gz dal repository direttamente nelle istanze. Con altri sistemi di controllo del codice sorgente, è possibile creare un pacchetto e caricare la revisione su un bucket Amazon S3 in formato .zip, .tar o .tar.gz e specificare il percorso in Amazon S3 al momento della distribuzione. Se l'applicazione richiede una fase di creazione di build, è necessario accertarsi che il repository GitHub o il bucket Amazon S3 contengano gli artefatti post-build. Per ulteriori informazioni sull'utilizzo di GitHub con AWS CodeDeploy, consulta la pagina relativa alle integrazioni di prodotti. Per ulteriori informazioni sull'utilizzo di Amazon S3 per la memorizzazione di revisioni, consulta la pagina Push a Revision.

Lo strumento di gestione della configurazione può essere richiamato da qualunque hook di evento di ciclo di vita di distribuzione nel file AppSpec. Ad esempio, per eseguire una recipe di Chef nell'ambito di una distribuzione, è possibile indicarla nel relativo hook di evento di ciclo di vita di distribuzione nel file AppSpec. Inoltre, è possibile sfruttare il sistema di gestione della configurazione per installare l'agente AWS CodeDeploy sulle istanze. Per esempi di utilizzo di AWS CodeDeploy con sistemi di gestione della configurazione quali Chef, Puppet, Ansible e Saltstack, consulta la pagina relativa alle integrazioni di prodotti.

Sì. È possibile integrare AWS CodeDeploy con sistemi di integrazione e distribuzione continua personalizzati richiamando le API pubbliche o utilizzando interfaccia a riga di comando o kit SDK AWS. Integrazioni ed esempi predefiniti sono disponibili nella nostra pagina relativa alle integrazioni di prodotti.

Per estendere un'applicazione, è necessario distribuire la revisione più recente al gruppo di distribuzione per le istanze appena aggiunte. A parte le istanze di Amazon EC2 che vengono avviate come parte di un gruppo Auto Scaling, AWS CodeDeploy non distribuisce automaticamente la revisione più recente alle nuove istanze.

È possibile associare un gruppo Auto Scaling con un gruppo di distribuzione per accertare che le istanze appena avviate ottengano sempre la versione più recente dell'applicazione. Ogni volta che un'istanza di Amazon EC2 per quel gruppo Auto Scaling viene avviata, le sarà assegnato lo stato "Pending" e quindi sarà attivata la distribuzione dell'ultima revisione completata correttamente in tale istanza Amazon EC2. Se la distribuzione viene completata correttamente, lo stato dell'istanza di Amazon EC2 viene modificato in "InService". Se la distribuzione non viene completata correttamente, l'istanza di Amazon EC2 viene terminata, viene avviata una nuova istanza Amazon EC2 con stato "Pending" e viene attivata una distribuzione per l'istanza EC2 appena avviata. Per ulteriori informazioni sugli eventi di ciclo di vita di istanze dei gruppi Auto Scaling, consulta il documento Auto Scaling Group Lifecycle.

È possibile monitorare lo status di una distribuzione utilizzando Console di gestione AWS, interfaccia della linea di comando AWS (AWS CLI), kit SDK AWS o API AWS CodeDeploy. È possibile visualizzare lo stato generale di una distribuzione e approfondire ulteriormente per visualizzare lo stato di ciascuna istanza e lo stato di ogni evento del ciclo di vita della distribuzione per l'istanza. Si possono anche consultare le voci di log che corrispondono a un errore, facilitando il debug dei problemi di distribuzione senza dover accedere all’istanza.

Sì. Quando una distribuzione viene interrotta, il servizio AWS CodeDeploy ordina all'agente di ogni istanza di arrestare l'esecuzione di script. Per rimettere l’applicazione a uno stato di consistenza, si può distribuire di nuovo la revisione o distribuirne un’altra.

Per riportare un'applicazione a una fase precedente, è sufficiente distribuire la revisione corrispondente. AWS CodeDeploy tiene traccia dei file che sono stati copiati per la revisione corrente e li rimuove prima di iniziare una nuova distribuzione, quindi non c'è differenza fra una nuova distribuzione e un rollback. Tuttavia bisogna assicurarsi che le revisioni precedenti siano disponibili per il rollback.

Sì. Si può usare un bucket Amazon S3 con versioni multiple e specificare l’ID della versione per identificare la versione in modo univoco.

Per informazioni sulle restrizioni al servizio, consulta la relativa pagina. Per sforare le restrizioni, invia una richiesta tramite il Centro di supporto AWS.

Sì. Per ricevere uno storico delle chiamate API AWS CodeDeploy effettuate sul tuo account, è sufficiente attivare AWS CloudTrail nella Console di gestione AWS.

È possibile creare notifiche per eventi che incidono sulle distribuzioni. Le notifiche avranno il formato delle notifiche di Amazon SNS. Ogni notifica includerà un messaggio sullo stato e un link alle risorse il cui evento ha generato la notifica in questione. Le notifiche non hanno costi aggiuntivi, ma potrebbero essere addebitati costi per altri servizi AWS utilizzati dalle notifiche, tra cui Amazon SNS. Per ulteriori informazioni sull'attivazione delle notifiche, consulta la guida per l'utente sulle notifiche. Inoltre, i clienti che utilizzano AWS Chatbot possono configurare l'invio di notifiche ai canali Slack o alle chat room di Amazon Chime. Per ulteriori dettagli, fai clic qui.

Sicurezza

Sì, ma l'agente AWS CodeDeploy installato sulle istanze di Amazon EC2 deve poter accedere agli endpoint pubblici di AWS CodeDeploy e di Amazon S3. Per ulteriori informazioni, consulta i documenti AWS CodeDeploy Endpoints e Amazon S3 Endpoints.

Sì. AWS CodeDeploy supporta le autorizzazioni a livello di risorsa. Per ogni risorsa AWS CodeDeploy, è possibile specificare gli utenti che hanno accesso a specifiche operazioni. Ad esempio, è possibile stabilire una policy IAM per consentire a un utente specifico di distribuire una determinata applicazione, elencando però solo le revisioni per altre applicazioni. È perciò possibile impedire agli utenti di effettuare involontariamente modifiche all'applicazione sbagliata. Per ulteriori informazioni sull'utilizzo di IAM con AWS CodeDeploy, consulta il documento Access Permissions Reference.

Regioni

Per informazioni sulla disponibilità di CodeDeploy, consulta la sezione relativa a prodotti e servizi per regione.

AWS CodeDeploy permette di eseguire distribuzioni con risorse AWS situate nella stessa regione. Per distribuire un’applicazione a più regioni, si deve definire l’applicazione nelle regioni di destinazione, copiare il pacchetto di applicazione in un bucket Amazon S3 in ogni regione e iniziare le distribuzioni utilizzando un’implementazione seriale o parallela sulle regioni.

Fatturazione

Non sono previsti costi aggiuntivi per le distribuzioni di codice nelle istanze Amazon EC2 tramite AWS CodeDeploy. Sarà però addebitata una tariffa di 0,02 USD per ogni aggiornamento di istanza locale eseguito tramite AWS CodeDeploy. Per ulteriori informazioni, consulta la pagina dei prezzi.