

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

# AppSpec sezione 'hooks'
<a name="reference-appspec-file-structure-hooks"></a>

Il contenuto nella `'hooks'` sezione del AppSpec file varia a seconda della piattaforma di elaborazione utilizzata per la distribuzione. La `'hooks'` sezione relativa alla distribuzione EC2/on-premise contiene mappature che collegano gli hook degli eventi del ciclo di vita della distribuzione a uno o più script. La `'hooks'` sezione relativa a una distribuzione Lambda o Amazon ECS specifica le funzioni di convalida Lambda da eseguire durante un evento del ciclo di vita della distribuzione. Se l'hook di un evento non è presente, non viene eseguita alcuna operazione per quell'evento. Questa sezione è obbligatoria solo se esegui script o funzioni di convalida Lambda come parte della distribuzione.

**Topics**
+ [AppSpec sezione 'hook' per una distribuzione Amazon ECS](#appspec-hooks-ecs)
+ [AppSpec sezione 'hooks' per una distribuzione AWS Lambda](#appspec-hooks-lambda)
+ [AppSpec sezione 'hooks' per una distribuzione EC2/on-premise](#appspec-hooks-server)

## AppSpec sezione 'hook' per una distribuzione Amazon ECS
<a name="appspec-hooks-ecs"></a>

**Topics**
+ [Elenco di eventi del ciclo di vita per una distribuzione Amazon ECS](#reference-appspec-file-structure-hooks-list-ecs)
+ [Esegui l'ordine degli hook in una distribuzione Amazon ECS.](#reference-appspec-file-structure-hooks-run-order-ecs)
+ [Struttura della sezione «ganci»](#reference-appspec-file-structure-hooks-section-structure-ecs)
+ [Esempio di funzione «ganci» Lambda](#reference-appspec-file-structure-hooks-section-structure-ecs-sample-function)

### Elenco di eventi del ciclo di vita per una distribuzione Amazon ECS
<a name="reference-appspec-file-structure-hooks-list-ecs"></a>

Un hook AWS Lambda è una funzione Lambda specificata con una stringa su una nuova riga dopo il nome dell'evento del ciclo di vita. Ogni hook viene eseguito una volta per distribuzione. Di seguito sono riportate le descrizioni degli eventi del ciclo di vita in cui è possibile eseguire un hook durante una distribuzione Amazon ECS. 
+  `BeforeInstall`— Da utilizzare per eseguire attività prima della creazione del set di attività sostitutivo. Un gruppo target è associato al set di attività originale. Se un listener di test facoltativo è specificato, esso viene associato al set di attività originale. Un rollback non è possibile in questa fase. 
+  `AfterInstall`— Da utilizzare per eseguire attività dopo la creazione del set di attività sostitutivo e l'associazione di uno dei gruppi target. Se un listener di test facoltativo è specificato, esso viene associato al set di attività originale. I risultati di una funzione di hook per questo evento del ciclo di vita possono attivare un rollback.
+  `AfterAllowTestTraffic`— Da utilizzare per eseguire attività dopo che il listener di test ha inviato il traffico al set di attività sostitutivo. I risultati di una funzione di hook a questo punto possono attivare un rollback.
+  `BeforeAllowTraffic`— Da utilizzare per eseguire attività dopo che il secondo gruppo target è stato associato al set di attività sostitutivo, ma prima che il traffico venga spostato verso il set di attività sostitutivo. I risultati di una funzione di hook per questo evento del ciclo di vita possono attivare un rollback. 
+  `AfterAllowTraffic`— Da utilizzare per eseguire attività dopo che il secondo gruppo target ha inviato traffico al set di attività sostitutivo. I risultati di una funzione di hook per questo evento del ciclo di vita possono attivare un rollback. 

Per ulteriori informazioni, consultare [Cosa succede durante una distribuzione di Amazon ECS](deployment-steps-ecs.md#deployment-steps-what-happens) e [Tutorial: distribuisci un servizio Amazon ECS con un test di convalida](tutorial-ecs-deployment-with-hooks.md).

### Esegui l'ordine degli hook in una distribuzione Amazon ECS.
<a name="reference-appspec-file-structure-hooks-run-order-ecs"></a>

In una distribuzione Amazon ECS, gli event hook vengono eseguiti nel seguente ordine:

![\[L'ordine degli eventi in una distribuzione Amazon ECS.\]](http://docs.aws.amazon.com/it_it/codedeploy/latest/userguide/images/lifecycle-event-order-ecs.png)


**Nota**  
Gli eventi di **avvio **TestTraffic**AllowTraffic******, **installazione** e **fine** della distribuzione non possono essere gestiti tramite script, motivo per cui appaiono in grigio in questo diagramma.

### Struttura della sezione «ganci»
<a name="reference-appspec-file-structure-hooks-section-structure-ecs"></a>

Di seguito sono riportati alcuni esempi della struttura della sezione `'hooks'`.

Utilizzando YAML:

```
Hooks:
  - BeforeInstall: "BeforeInstallHookFunctionName"
  - AfterInstall: "AfterInstallHookFunctionName"
  - AfterAllowTestTraffic: "AfterAllowTestTrafficHookFunctionName"
  - BeforeAllowTraffic: "BeforeAllowTrafficHookFunctionName"
  - AfterAllowTraffic: "AfterAllowTrafficHookFunctionName"
```

Utilizzando JSON:

```
"Hooks": [
		{
			"BeforeInstall": "BeforeInstallHookFunctionName"
		},
		{
			"AfterInstall": "AfterInstallHookFunctionName"
		},
		{
			"AfterAllowTestTraffic": "AfterAllowTestTrafficHookFunctionName"
		},
		{
			"BeforeAllowTraffic": "BeforeAllowTrafficHookFunctionName"
		},
		{
			"AfterAllowTraffic": "AfterAllowTrafficHookFunctionName"
		}
	]
}
```

### Esempio di funzione «ganci» Lambda
<a name="reference-appspec-file-structure-hooks-section-structure-ecs-sample-function"></a>

Utilizza la `'hooks'` sezione per specificare una funzione Lambda che CodeDeploy può chiamare per convalidare una distribuzione Amazon ECS. Puoi utilizzare la stessa funzione o una diversa per gli eventi del ciclo di vita della `AfterAllowTraffic` distribuzione `BeforeInstall` `AfterInstall``AfterAllowTestTraffic`,`BeforeAllowTraffic`, e. Dopo il completamento dei test di convalida, la funzione `AfterAllowTraffic` Lambda CodeDeploy richiama e fornisce il risultato `Succeeded` di o. `Failed` 

**Importante**  
L'implementazione è considerata fallita se non CodeDeploy viene notificata dalla funzione di convalida Lambda entro un'ora.

 Prima di richiamare una funzione Lambda hook, il server deve ricevere una notifica dell'ID di distribuzione e dell'ID di esecuzione dell'hook dell'evento lifecycle utilizzando il comando. `putLifecycleEventHookExecutionStatus`

 Di seguito è riportato un esempio di funzione hook Lambda scritta in Node.js. 

```
'use strict';

const aws = require('aws-sdk');
const codedeploy = new aws.CodeDeploy({apiVersion: '2014-10-06'});

exports.handler = (event, context, callback) => {
    //Read the DeploymentId from the event payload.
    var deploymentId = event.DeploymentId;

    //Read the LifecycleEventHookExecutionId from the event payload
    var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;

    /*
     Enter validation tests here.
    */

    // Prepare the validation test results with the deploymentId and
    // the lifecycleEventHookExecutionId for CodeDeploy.
    var params = {
        deploymentId: deploymentId,
        lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
        status: 'Succeeded' // status can be 'Succeeded' or 'Failed'
    };
    
    // Pass CodeDeploy the prepared validation test results.
    codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
        if (err) {
            // Validation failed.
            callback('Validation test failed');
        } else {
            // Validation succeeded.
            callback(null, 'Validation test succeeded');
        }
    });
};
```

## AppSpec sezione 'hooks' per una distribuzione AWS Lambda
<a name="appspec-hooks-lambda"></a>

**Topics**
+ [Elenco degli hook relativi agli eventi del ciclo di vita per un'implementazione Lambda AWS](#reference-appspec-file-structure-hooks-list-lambda)
+ [Esegui l'ordine degli hook in una distribuzione della versione della funzione Lambda](#reference-appspec-file-structure-hooks-run-order-lambda)
+ [Struttura della sezione «ganci»](#reference-appspec-file-structure-hooks-section-structure-lambda)
+ [Esempio di funzione «ganci» Lambda](#reference-appspec-file-structure-hooks-section-structure-lambda-sample-function)

### Elenco degli hook relativi agli eventi del ciclo di vita per un'implementazione Lambda AWS
<a name="reference-appspec-file-structure-hooks-list-lambda"></a>

Un hook AWS Lambda è una funzione Lambda specificata con una stringa su una nuova riga dopo il nome dell'evento del ciclo di vita. Ogni hook viene eseguito una volta per distribuzione. Di seguito sono riportate le descrizioni degli hook disponibili per l'uso nel file. AppSpec 
+ **BeforeAllowTraffic**— Da utilizzare per eseguire attività prima che il traffico venga spostato alla versione della funzione Lambda implementata.
+ **AfterAllowTraffic**— Da utilizzare per eseguire attività dopo che tutto il traffico è stato spostato sulla versione della funzione Lambda implementata.

### Esegui l'ordine degli hook in una distribuzione della versione della funzione Lambda
<a name="reference-appspec-file-structure-hooks-run-order-lambda"></a>

In una versione di una funzione Lambda senza server, gli event hook vengono eseguiti nel seguente ordine:

![\[L'ordine degli event hook in una distribuzione Lambda.\]](http://docs.aws.amazon.com/it_it/codedeploy/latest/userguide/images/lifecycle-event-order-lambda.png)


**Nota**  
Gli eventi di **inizio** e **fine** della distribuzione non possono essere gestiti tramite script, motivo per cui appaiono in grigio in questo diagramma. **AllowTraffic**

### Struttura della sezione «ganci»
<a name="reference-appspec-file-structure-hooks-section-structure-lambda"></a>

Di seguito sono riportati alcuni esempi della struttura della sezione "hooks".

Utilizzando YAML:

```
hooks:
   - BeforeAllowTraffic: BeforeAllowTrafficHookFunctionName
   - AfterAllowTraffic: AfterAllowTrafficHookFunctionName
```

Utilizzando JSON:

```
"hooks": [{
    "BeforeAllowTraffic": "BeforeAllowTrafficHookFunctionName"
    },
    {
    "AfterAllowTraffic": "AfterAllowTrafficHookFunctionName"
}]
```

### Esempio di funzione «ganci» Lambda
<a name="reference-appspec-file-structure-hooks-section-structure-lambda-sample-function"></a>

Usa la sezione 'hooks' per specificare una funzione Lambda CodeDeploy che può chiamare per convalidare una distribuzione Lambda. È possibile utilizzare la stessa funzione o una diversa per gli eventi del ciclo di vita della distribuzione`BeforeAllowTraffic`. `AfterAllowTraffic` Dopo il completamento dei test di convalida, la funzione di convalida Lambda CodeDeploy richiama e fornisce il risultato di o. `Succeeded` `Failed` 

**Importante**  
L'implementazione è considerata fallita se non CodeDeploy viene notificata dalla funzione di convalida Lambda entro un'ora.

 Prima di richiamare una funzione Lambda hook, il server deve ricevere una notifica dell'ID di distribuzione e dell'ID di esecuzione dell'hook dell'evento lifecycle utilizzando il comando. `putLifecycleEventHookExecutionStatus`

 Di seguito è riportato un esempio di funzione hook Lambda scritta in Node.js. 

```
'use strict';

const aws = require('aws-sdk');
const codedeploy = new aws.CodeDeploy({apiVersion: '2014-10-06'});

exports.handler = (event, context, callback) => {
    //Read the DeploymentId from the event payload.
    var deploymentId = event.DeploymentId;

    //Read the LifecycleEventHookExecutionId from the event payload
    var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;

    /*
     Enter validation tests here.
    */

    // Prepare the validation test results with the deploymentId and
    // the lifecycleEventHookExecutionId for CodeDeploy.
    var params = {
        deploymentId: deploymentId,
        lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
        status: 'Succeeded' // status can be 'Succeeded' or 'Failed'
    };
    
    // Pass CodeDeploy the prepared validation test results.
    codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
        if (err) {
            // Validation failed.
            callback('Validation test failed');
        } else {
            // Validation succeeded.
            callback(null, 'Validation test succeeded');
        }
    });
};
```

## AppSpec sezione 'hooks' per una distribuzione EC2/on-premise
<a name="appspec-hooks-server"></a>

**Topics**
+ [Elenco degli hook relativi agli eventi del ciclo di vita](#reference-appspec-file-structure-hooks-list)
+ [Disponibilità di Lifecycle Event Hook](#reference-appspec-file-structure-hooks-availability)
+ [Esegui l'ordine degli hook in una distribuzione](#reference-appspec-file-structure-hooks-run-order)
+ [Struttura della sezione «ganci»](#reference-appspec-file-structure-hooks-section-structure)
+ [Riferimento ai file negli script hook](#codedeploy-agent-working-directory)
+ [Disponibilità delle variabili di ambiente per gli hook](#reference-appspec-file-structure-environment-variable-availability)
+ [Esempio di hook](#reference-appspec-file-structure-hooks-example)

### Elenco degli hook relativi agli eventi del ciclo di vita
<a name="reference-appspec-file-structure-hooks-list"></a>

Un hook di distribuzione EC2/on-premise viene eseguito una volta per implementazione su un'istanza. Puoi specificare uno o più script da eseguire in un hook. Ogni hook per un evento del ciclo di vita viene specificato con una stringa su una riga separata. Di seguito sono riportate le descrizioni degli hook disponibili per l'uso nel file. AppSpec 

Per informazioni sugli hook degli eventi del ciclo di vita validi per i vari tipi di rollback e di distribuzione, consulta [Disponibilità di Lifecycle Event Hook](#reference-appspec-file-structure-hooks-availability).
+ `ApplicationStop`— Questo evento del ciclo di vita della distribuzione si verifica anche prima del download della revisione dell'applicazione. Puoi specificare gli script per questo evento per arrestare correttamente l'applicazione o rimuovere i pacchetti attualmente installati in preparazione di una distribuzione. Il AppSpec file e gli script utilizzati per questo evento del ciclo di vita della distribuzione provengono dalla precedente revisione dell'applicazione distribuita correttamente.
**Nota**  
Un AppSpec file non esiste su un'istanza prima della distribuzione su di essa. Per questo motivo, l'hook `ApplicationStop` non viene eseguito la prima volta che lo distribuisci all'istanza. Puoi utilizzare l'hook `ApplicationStop` la seconda volta che distribuisci a un'istanza.

   Per determinare la posizione dell'ultima revisione dell'applicazione distribuita correttamente, l' CodeDeploy agente cerca la posizione elencata nel file. `deployment-group-id_last_successful_install` Questo file si trova nella:

   `/opt/codedeploy-agent/deployment-root/deployment-instructions`cartella su istanze Amazon Linux, Ubuntu Server e RHEL Amazon EC2. 

  `C:\ProgramData\Amazon\CodeDeploy\deployment-instructions`cartella su istanze Amazon EC2 di Windows Server.

  Per risolvere i problemi di una distribuzione che non riesce durante l'evento del ciclo di vita della distribuzione `ApplicationStop`, consulta [Risoluzione dei problemi relativi a un evento non riuscito o ApplicationStop AfterBlockTraffic relativo al BeforeBlockTraffic ciclo di vita dell'implementazione](troubleshooting-deployments.md#troubleshooting-deployments-lifecycle-event-failures).
+ `DownloadBundle`— Durante questo evento del ciclo di vita della distribuzione, l' CodeDeploy agente copia i file di revisione dell'applicazione in una posizione temporanea: 

  `/opt/codedeploy-agent/deployment-root/deployment-group-id/deployment-id/deployment-archive`cartella su istanze Amazon Linux, Ubuntu Server e RHEL Amazon EC2. 

  `C:\ProgramData\Amazon\CodeDeploy\deployment-group-id\deployment-id\deployment-archive`cartella su istanze Amazon EC2 di Windows Server. 

  Questo evento è riservato all' CodeDeploy agente e non può essere utilizzato per eseguire script.

  Per risolvere i problemi di una distribuzione che non riesce durante l'evento del ciclo di vita della distribuzione `DownloadBundle`, consulta [Risoluzione dei problemi relativi a un evento del ciclo di vita di DownloadBundle distribuzione non riuscito con UnknownError: not open-for reading](troubleshooting-deployments.md#troubleshooting-deployments-downloadbundle).
+ `BeforeInstall`— È possibile utilizzare questo evento del ciclo di vita della distribuzione per attività di preinstallazione, come la decrittografia dei file e la creazione di un backup della versione corrente.
+ `Install`— Durante questo evento del ciclo di vita della distribuzione, l' CodeDeployagente copia i file di revisione dalla posizione temporanea alla cartella di destinazione finale. Questo evento è riservato all' CodeDeploy agente e non può essere utilizzato per eseguire script.
+ `AfterInstall`— È possibile utilizzare questo evento del ciclo di vita della distribuzione per attività come la configurazione dell'applicazione o la modifica delle autorizzazioni dei file.
+ `ApplicationStart`— In genere si utilizza questo evento del ciclo di vita della distribuzione per riavviare i servizi che sono stati interrotti durante. `ApplicationStop`
+ `ValidateService`— Questo è l'ultimo evento del ciclo di vita della distribuzione. È utilizzato per verificare se la distribuzione è stata completata.
+ `BeforeBlockTraffic`— È possibile utilizzare questo evento del ciclo di vita della distribuzione per eseguire attività sulle istanze prima che vengano cancellate da un sistema di bilanciamento del carico.

  Per risolvere i problemi di una distribuzione che non riesce durante l'evento del ciclo di vita della distribuzione `BeforeBlockTraffic`, consulta [Risoluzione dei problemi relativi a un evento non riuscito o ApplicationStop AfterBlockTraffic relativo al BeforeBlockTraffic ciclo di vita dell'implementazione](troubleshooting-deployments.md#troubleshooting-deployments-lifecycle-event-failures).
+ `BlockTraffic`— Durante questo evento del ciclo di vita della distribuzione, al traffico Internet viene impedito l'accesso alle istanze che attualmente servono traffico. Questo evento è riservato all' CodeDeploy agente e non può essere utilizzato per eseguire script. 
+ `AfterBlockTraffic`— È possibile utilizzare questo evento del ciclo di vita della distribuzione per eseguire attività sulle istanze dopo che queste sono state cancellate dal rispettivo sistema di bilanciamento del carico. 

  Per risolvere i problemi di una distribuzione che non riesce durante l'evento del ciclo di vita della distribuzione `AfterBlockTraffic`, consulta [Risoluzione dei problemi relativi a un evento non riuscito o ApplicationStop AfterBlockTraffic relativo al BeforeBlockTraffic ciclo di vita dell'implementazione](troubleshooting-deployments.md#troubleshooting-deployments-lifecycle-event-failures).
+ `BeforeAllowTraffic`— È possibile utilizzare questo evento del ciclo di vita della distribuzione per eseguire attività sulle istanze prima che vengano registrate con un sistema di bilanciamento del carico.
+ `AllowTraffic`— Durante questo evento del ciclo di vita della distribuzione, il traffico Internet può accedere alle istanze dopo una distribuzione. Questo evento è riservato all' CodeDeploy agente e non può essere utilizzato per eseguire script.
+ `AfterAllowTraffic`— È possibile utilizzare questo evento del ciclo di vita della distribuzione per eseguire attività sulle istanze dopo che sono state registrate con un sistema di bilanciamento del carico.

### Disponibilità di Lifecycle Event Hook
<a name="reference-appspec-file-structure-hooks-availability"></a>

La tabella seguente elenca gli hook degli eventi del ciclo di vita disponibili per ogni scenario di distribuzione e rollback.


| Nome dell'evento del ciclo di vita | Implementazione del lancio di Auto Scaling¹ | Implementazione della terminazione con Auto Scaling¹ | Implementazione sul posto² | Distribuzione blue/verde: istanze originali | Distribuzione blue/verde: istanze di sostituzione | Rollback blue/verde: istanze originali | Rollback blue/verde: istanze di sostituzione | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| ApplicationStop | ✓ | ✓ | ✓ |  | ✓ |  |  | 
| DownloadBundle³ | ✓ |  | ✓ |  | ✓ |  |  | 
| BeforeInstall | ✓ |  | ✓ |  | ✓ |  |  | 
| Installa ³ | ✓ |  | ✓ |  | ✓ |  |  | 
| AfterInstall | ✓ |  | ✓ |  | ✓ |  |  | 
| ApplicationStart | ✓ |  | ✓ |  | ✓ |  |  | 
| ValidateService | ✓ |  | ✓ |  | ✓ |  |  | 
| BeforeBlockTraffic |  | ✓ | ✓ | ✓ |  |  | ✓ | 
| BlockTraffic³ |  | ✓ | ✓ | ✓ |  |  | ✓ | 
| AfterBlockTraffic |  | ✓ | ✓ | ✓ |  |  | ✓ | 
| BeforeAllowTraffic | ✓ |  | ✓ |  | ✓ | ✓ |  | 
| AllowTraffic³ | ✓ |  | ✓ |  | ✓ | ✓ |  | 
| AfterAllowTraffic | ✓ |  | ✓ |  | ✓ | ✓ |  | 
|  ¹ Per informazioni sulle implementazioni di Amazon EC2 Auto Scaling, consulta. [Come funziona Amazon EC2 Auto Scaling con CodeDeploy](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-behaviors) ² Si applica anche al rollback di una distribuzione sul posto. ³ Riservato alle operazioni CodeDeploy . Non può essere utilizzato per l'esecuzione di script.  | 

### Esegui l'ordine degli hook in una distribuzione
<a name="reference-appspec-file-structure-hooks-run-order"></a>

**Implementazioni di lancio di Auto Scaling**

Durante una distribuzione con avvio di Auto Scaling, CodeDeploy esegue gli event hook nell'ordine seguente.

Per ulteriori informazioni sulle implementazioni di avvio di Auto Scaling, vedere. [Come funziona Amazon EC2 Auto Scaling con CodeDeploy](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-behaviors)

![\[L'ordine degli eventi si agganciano durante l'implementazione del lancio di Auto Scaling.\]](http://docs.aws.amazon.com/it_it/codedeploy/latest/userguide/images/lifecycle-event-order-scale-out.png)


**Nota**  
Gli eventi di **avvio **DownloadBundle**AllowTraffic******, **installazione** e **fine** della distribuzione non possono essere gestiti tramite script, motivo per cui appaiono in grigio in questo diagramma. Tuttavia, è possibile modificare la `'files'` sezione del AppSpec file per specificare cosa viene installato durante l'evento di **installazione**.

**Implementazioni di terminazione con Auto Scaling**

Durante una distribuzione con terminazione di Auto Scaling, CodeDeploy esegue gli event hook nell'ordine seguente.

Per ulteriori informazioni sulle implementazioni di terminazione con Auto Scaling, vedere. [Abilitazione delle implementazioni di terminazione durante gli eventi scale-in di Auto Scaling](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-behaviors-hook-enable)

![\[L'ordine degli event hook durante una distribuzione con terminazione dell'Auto Scaling.\]](http://docs.aws.amazon.com/it_it/codedeploy/latest/userguide/images/lifecycle-event-order-scale-in.png)


**Nota**  
Gli eventi di **inizio** e **fine** della distribuzione non possono essere gestiti tramite script, motivo per cui appaiono in grigio in questo diagramma. **BlockTraffic** 

**Distribuzioni locali**

In una distribuzione in loco, incluso il rollback di una distribuzione in loco, gli hook degli eventi vengono eseguiti nel seguente ordine:

**Nota**  
Per le distribuzioni sul posto, i sei hook relativi al blocco e all'autorizzazione del traffico si applicano solo se si specifica un Classic Load Balancer, Application Load Balancer o Network Load Balancer di Elastic Load Balancing nel gruppo di distribuzione.

![\[L'ordine degli hook degli eventi durante il rollback di una distribuzione sul posto.\]](http://docs.aws.amazon.com/it_it/codedeploy/latest/userguide/images/lifecycle-event-order-in-place.png)


**Nota**  
Gli eventi di **avvio **DownloadBundle****, **installazione** e **fine** della distribuzione non possono essere gestiti tramite script, motivo per cui appaiono in grigio in questo diagramma. Tuttavia, è possibile modificare la `'files'` sezione del AppSpec file per specificare cosa viene installato durante l'evento di **installazione**.

**Implementazioni blu/verdi**

In una blue/green distribuzione, gli event hook vengono eseguiti nell'ordine seguente:

![\[L'ordine degli event hook in una blue/green distribuzione.\]](http://docs.aws.amazon.com/it_it/codedeploy/latest/userguide/images/lifecycle-event-order-blue-green.png)


**Nota**  
Gli eventi di **avvio **DownloadBundle**BlockTraffic**AllowTraffic********, **installazione** e **fine** della distribuzione non possono essere gestiti tramite script, motivo per cui vengono visualizzati in grigio in questo diagramma. Tuttavia, è possibile modificare la sezione 'files' del AppSpec file per specificare cosa viene installato durante l'evento di **installazione**.

### Struttura della sezione «ganci»
<a name="reference-appspec-file-structure-hooks-section-structure"></a>

La sezione `'hooks'` ha la seguente struttura:

```
hooks:
   deployment-lifecycle-event-name:
     - location: script-location
       timeout: timeout-in-seconds
       runas: user-name
```

Puoi includere i seguenti elementi in una voce **hook** dopo il nome dell'evento del ciclo di vita della distribuzione:

** location **  
Obbligatorio. La posizione nel bundle del file di script per la revisione. La posizione degli script specificati nella `hooks` sezione è relativa alla radice del pacchetto di revisione dell'applicazione. Per ulteriori informazioni, consulta [Pianifica una revisione per CodeDeploy](application-revisions-plan.md).

** timeout **  
Opzionale. Il numero di secondi dedicati all'esecuzione dello script prima che venga considerato non riuscito. Il valore predefinito è 3600 secondi (1 ora).  
3600 secondi (1 ora) è il periodo di tempo massimo consentito per l'esecuzione di uno script per ogni evento del ciclo di vita della distribuzione. Se gli script superano questo limite, la distribuzione viene interrotta e la distribuzione nell'istanza non riesce. Assicurati che il numero totale di secondi specificato per **timeout** per tutti gli script in ogni evento del ciclo di vita della distribuzione non superi questo limite.

** runas **  
Opzionale. L'utente da rappresentare quando viene eseguito lo script. Per impostazione predefinita, questo è l' CodeDeploy agente in esecuzione sull'istanza. CodeDeploy non memorizza le password, quindi l'utente non può essere impersonato se l'utente **runas** necessita di una password. Questo elemento si applica solo alle istanze di Amazon Linux e Ubuntu Server.

### Riferimento ai file negli script hook
<a name="codedeploy-agent-working-directory"></a>

Se stai collegando uno script a un evento CodeDeploy del ciclo di vita come descritto in [AppSpec sezione 'hooks'](#reference-appspec-file-structure-hooks) e desideri fare riferimento a un file (ad esempio,`helper.sh`) nello script, dovrai specificare utilizzando: `helper.sh`
+ (Consigliato) Un percorso assoluto. Per informazioni, consulta [Utilizzo di percorsi assoluti](#codedeploy-agent-working-dir-absolute).
+ Un percorso relativo. Per informazioni, consulta [Utilizzo di percorsi relativi](#codedeploy-agent-working-dir-relative).

#### Utilizzo di percorsi assoluti
<a name="codedeploy-agent-working-dir-absolute"></a>

Per fare riferimento a un file usando il suo percorso *assoluto*, puoi:
+ Specificate il percorso assoluto `files` nella sezione del AppSpec file, nella `destination` proprietà. Quindi, specifica lo stesso percorso assoluto nel tuo script hook. Per ulteriori informazioni, consulta [AppSpec sezione 'file' (solo distribuzioni EC2/on-premise)](reference-appspec-file-structure-files.md). 
+ Specificate un percorso assoluto dinamico nello script hook. Per ulteriori informazioni, consulta [Deployment archive location](#codedeploy-agent-working-dir-archive).

**Posizione dell'archivio di distribuzione**

Durante l'evento del [DownloadBundle](#reference-appspec-file-structure-hooks-list)ciclo di vita, l' CodeDeploy agente estrae la [revisione](application-revisions.md) per la distribuzione in una directory con il seguente formato:

`root-directory/deployment-group-id/deployment-id/deployment-archive`

La *root-directory* parte del percorso è sempre impostata sul valore predefinito mostrato nella tabella seguente o è controllata dall'impostazione di configurazione. `:root_dir` Per ulteriori informazioni sulle impostazioni di configurazione, vedere[CodeDeploy riferimento alla configurazione dell'agente](reference-agent-configuration.md).


| Piattaforma Agent | Directory principale predefinita | 
| --- | --- | 
| Linux: tutte le distribuzioni rpm |  /opt/codedeploy-agent/deployment-root  | 
| Ubuntu Server: tutte le distribuzioni deb |  /opt/codedeploy-agent/deployment-root  | 
| Windows Server |  %ProgramData%\$1Amazon\$1CodeDeploy  | 

Dai tuoi script hook, puoi accedere all'archivio di distribuzione corrente utilizzando il percorso della directory principale e le variabili di ambiente `DEPLOYMENT_ID` and`DEPLOYMENT_GROUP_ID`. Per ulteriori informazioni sulle variabili che è possibile utilizzare, vedere[Disponibilità delle variabili di ambiente per gli hook](#reference-appspec-file-structure-environment-variable-availability).

Ad esempio, ecco come è possibile accedere a un `data.json` file che si trova nella radice della revisione su Linux:

```
#!/bin/bash

rootDirectory="/opt/codedeploy-agent/deployment-root" # note: this will be different if you
                                                      # customize the :root_dir configuration
dataFile="$rootDirectory/$DEPLOYMENT_GROUP_ID/$DEPLOYMENT_ID/deployment-archive/data.json"
data=$(cat dataFile)
```

Come altro esempio, ecco come è possibile accedere a un `data.json` file che si trova alla radice della revisione utilizzando Powershell su Windows:

```
$rootDirectory="$env:ProgramData\Amazon\CodeDeploy" # note: this will be different if you
                                                    # customize the :root_dir configuration
$dataFile="$rootDirectory\$env:DEPLOYMENT_GROUP_ID\$env:DEPLOYMENT_ID\deployment-archive\data.json"
$data=(Get-Content $dataFile)
```

#### Utilizzo di percorsi relativi
<a name="codedeploy-agent-working-dir-relative"></a>

Per fare riferimento a un file utilizzando il *relativo* percorso, è necessario conoscere la directory di lavoro dell' CodeDeploy agente. I percorsi dei file sono relativi a questa directory.

La tabella seguente mostra la directory di lavoro per ogni piattaforma supportata dall' CodeDeploy agente.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html)

### Disponibilità delle variabili di ambiente per gli hook
<a name="reference-appspec-file-structure-environment-variable-availability"></a>

Durante ogni evento del ciclo di vita della distribuzione, gli script di hook possono accedere alle seguenti variabili di ambiente:

** APPLICATION\$1NAME **  
Il nome dell'applicazione CodeDeploy che fa parte della distribuzione corrente (ad esempio,`WordPress_App`).

** DEPLOYMENT\$1ID **  
L'ID CodeDeploy è stato assegnato alla distribuzione corrente (ad esempio,`d-AB1CDEF23`).

** DEPLOYMENT\$1GROUP\$1NAME **  
Il nome del gruppo di distribuzione CodeDeploy che fa parte della distribuzione corrente (ad esempio,`WordPress_DepGroup`).

** DEPLOYMENT\$1GROUP\$1ID **  
L'ID del gruppo di distribuzione CodeDeploy che fa parte della distribuzione corrente (ad esempio,`b1a2189b-dd90-4ef5-8f40-4c1c5EXAMPLE`).

** LIFECYCLE\$1EVENT **  
Il nome dell'evento del ciclo di vita della distribuzione corrente (ad esempio `AfterInstall`).

Queste variabili di ambiente sono locali per ciascun evento del ciclo di vita della distribuzione.

 Sono disponibili variabili di ambiente aggiuntive per agganciare gli script a seconda dell'origine del pacchetto di distribuzione:

**Pacchetto da Amazon S3**
+ **BUNDLE\$1BUCKET**

  Il nome del bucket Amazon S3 da cui è stato scaricato il pacchetto di distribuzione (ad esempio,). `my-s3-bucket`
+ **BUNDLE\$1KEY**

  La chiave oggetto per il pacchetto scaricato all'interno del bucket Amazon S3 (ad esempio,). `WordPress_App.zip`
+ **BUNDLE\$1VERSION**

  La versione dell'oggetto per il pacchetto (ad esempio,). `3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo` Questa variabile viene impostata solo se il bucket Amazon S3 ha abilitato il controllo delle versioni [degli oggetti](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html).
+ **BUNDLE\$1ETAG**

  L'oggetto etag per il pacchetto (ad esempio,). `b10a8db164e0754105b7a99be72e3fe5-4`

**Bundle da GitHub**
+ **BUNDLE\$1COMMIT**

  L'hash di SHA256 commit del pacchetto generato da Git (ad esempio,`d2a84f4b8b650937ec8f73cd8be2c74add5a911ba64df27458ed8229da804a26`).

Il seguente script modifica la porta di ascolto di un server HTTP Apache su 9090 anziché 80 se il valore di **DEPLOYMENT\$1GROUP\$1NAME** è uguale a `Staging`. Questo script devono essere richiamato durante l'evento del ciclo di vita della distribuzione `BeforeInstall`:

```
if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ]
then
    sed -i -e 's/Listen 80/Listen 9090/g' /etc/httpd/conf/httpd.conf
fi
```

Il seguente esempio di script modifica il livello di verbosità dei messaggi registrati nel log degli errori da avviso a debug se il valore della variabile di ambiente **DEPLOYMENT\$1GROUP\$1NAME** è uguale a `Staging`. Questo script devono essere richiamato durante l'evento del ciclo di vita della distribuzione `BeforeInstall`:

```
if [ "$DEPLOYMENT_GROUP_NAME" == "Staging" ]
then
    sed -i -e 's/LogLevel warn/LogLevel debug/g' /etc/httpd/conf/httpd.conf
fi
```

Il seguente esempio di script sostituisce il testo nella pagina Web specificata con il testo che visualizza il valore di queste variabili di ambiente. Questo script devono essere richiamato durante l'evento del ciclo di vita della distribuzione `AfterInstall`:

```
#!/usr/bin/python

import os
 
strToSearch="<h2>This application was deployed using CodeDeploy.</h2>"
strToReplace="<h2>This page for "+os.environ['APPLICATION_NAME']+" application and "+os.environ['DEPLOYMENT_GROUP_NAME']+" deployment group with "+os.environ['DEPLOYMENT_GROUP_ID']+" deployment group ID was generated by a "+os.environ['LIFECYCLE_EVENT']+" script during "+os.environ['DEPLOYMENT_ID']+" deployment.</h2>"
 
fp=open("/var/www/html/index.html","r")
buffer=fp.read()
fp.close()
 
fp=open("/var/www/html/index.html","w")
fp.write(buffer.replace(strToSearch,strToReplace))
fp.close()
```

### Esempio di hook
<a name="reference-appspec-file-structure-hooks-example"></a>

Ecco un esempio della voce **hooks** che specifica due hook per l'evento del ciclo di vita `AfterInstall`:

```
hooks:
   AfterInstall:
     - location: Scripts/RunResourceTests.sh
       timeout: 180
     - location: Scripts/PostDeploy.sh
       timeout: 180
```

Lo script `Scripts/RunResourceTests.sh` viene eseguito durante la fase `AfterInstall` del processo di distribuzione. La distribuzione non ha esito positivo se lo script impiega più di 180 secondi (3 minuti) per l'esecuzione.

La posizione degli script specificati nella sezione "hooks" è relativa alla radice del bundle di revisione dell'applicazione. Nel precedente esempio, un file denominato `RunResourceTests.sh` si trova in una directory denominata `Scripts`. La directory `Scripts` si trova al livello di radice del bundle. Per ulteriori informazioni, consulta [Pianifica una revisione per CodeDeploy](application-revisions-plan.md).