

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# AppSpec Abschnitt „Hooks“
<a name="reference-appspec-file-structure-hooks"></a>

Der Inhalt des `'hooks'` Abschnitts der AppSpec Datei variiert je nach Rechenplattform für Ihre Bereitstellung. Der `'hooks'` Abschnitt für eine EC2/On-Premises-Bereitstellung enthält Zuordnungen, die Event-Hooks für den Deployment-Lebenszyklus mit einem oder mehreren Skripts verknüpfen. Der `'hooks'` Abschnitt für eine Lambda- oder Amazon ECS-Bereitstellung spezifiziert Lambda-Validierungsfunktionen, die während eines Deployment-Lifecycle-Ereignisses ausgeführt werden sollen. Wenn ein Ereignis-Hook nicht vorhanden ist, wird kein Vorgang für dieses Ereignis ausgeführt. Dieser Abschnitt ist nur erforderlich, wenn Sie im Rahmen der Bereitstellung Skripts oder Lambda-Validierungsfunktionen ausführen.

**Topics**
+ [AppSpec Abschnitt „Hooks“ für eine Amazon ECS-Bereitstellung](#appspec-hooks-ecs)
+ [AppSpec Abschnitt „Hooks“ für eine AWS Lambda-Bereitstellung](#appspec-hooks-lambda)
+ [AppSpec Abschnitt „Hooks“ für eine EC2/On-Premises-Bereitstellung](#appspec-hooks-server)

## AppSpec Abschnitt „Hooks“ für eine Amazon ECS-Bereitstellung
<a name="appspec-hooks-ecs"></a>

**Topics**
+ [Liste der Lifecycle-Event-Hooks für eine Amazon ECS-Bereitstellung](#reference-appspec-file-structure-hooks-list-ecs)
+ [Führen Sie die Reihenfolge der Hooks in einer Amazon ECS-Bereitstellung aus.](#reference-appspec-file-structure-hooks-run-order-ecs)
+ [Struktur des Abschnitts „Hooks“](#reference-appspec-file-structure-hooks-section-structure-ecs)
+ [Beispiel für die Lambda-Funktion „Hooks“](#reference-appspec-file-structure-hooks-section-structure-ecs-sample-function)

### Liste der Lifecycle-Event-Hooks für eine Amazon ECS-Bereitstellung
<a name="reference-appspec-file-structure-hooks-list-ecs"></a>

Ein AWS Lambda-Hook ist eine Lambda-Funktion, die mit einer Zeichenfolge in einer neuen Zeile nach dem Namen des Lebenszyklusereignisses angegeben wird. Jeder Hook wird einmal pro Bereitstellung ausgeführt. Im Folgenden finden Sie Beschreibungen der Lebenszyklusereignisse, bei denen Sie während einer Amazon ECS-Bereitstellung einen Hook ausführen können. 
+  `BeforeInstall`— Wird verwendet, um Aufgaben auszuführen, bevor der Ersatzaufgabensatz erstellt wird. Eine Zielgruppe wird dem ursprünglichen Aufgabesatz zugeordnet. Wenn ein optionaler Test-Listener angegeben wird, wird er dem ursprünglichen Aufgabensatz zugeordnet. Ein Rollback ist zu diesem Zeitpunkt nicht möglich. 
+  `AfterInstall`— Wird verwendet, um Aufgaben auszuführen, nachdem der Ersatz-Tasksatz erstellt wurde und ihm eine der Zielgruppen zugeordnet wurde. Wenn ein optionaler Test-Listener angegeben wird, wird er dem ursprünglichen Aufgabensatz zugeordnet. Die Ergebnisse einer hook-Funktion bei diesem Lebenszyklus-Ereignis können einen Rollback auslösen.
+  `AfterAllowTestTraffic`— Wird verwendet, um Aufgaben auszuführen, nachdem der Test-Listener Traffic an den Ersatz-Tasksatz weitergeleitet hat. Die Ergebnisse einer hook-Funktion können zu diesem Zeitpunkt einen Rollback auslösen.
+  `BeforeAllowTraffic`— Wird verwendet, um Aufgaben auszuführen, nachdem die zweite Zielgruppe dem Ersatz-Task-Set zugeordnet wurde, aber bevor der Verkehr auf den Ersatz-Tasksatz umgeleitet wird. Die Ergebnisse einer hook-Funktion bei diesem Lebenszyklus-Ereignis können einen Rollback auslösen. 
+  `AfterAllowTraffic`— Wird verwendet, um Aufgaben auszuführen, nachdem die zweite Zielgruppe Traffic an den Ersatz-Tasksatz weitergeleitet hat. Die Ergebnisse einer hook-Funktion bei diesem Lebenszyklus-Ereignis können einen Rollback auslösen. 

Weitere Informationen erhalten Sie unter [Was passiert während einer Amazon ECS-Bereitstellung](deployment-steps-ecs.md#deployment-steps-what-happens) und [Tutorial: Bereitstellen eines Amazon ECS-Service mit einem Validierungstest](tutorial-ecs-deployment-with-hooks.md).

### Führen Sie die Reihenfolge der Hooks in einer Amazon ECS-Bereitstellung aus.
<a name="reference-appspec-file-structure-hooks-run-order-ecs"></a>

In einer Amazon ECS-Bereitstellung werden Event-Hooks in der folgenden Reihenfolge ausgeführt:

![\[Die Reihenfolge der Event-Hooks in einer Amazon ECS-Bereitstellung.\]](http://docs.aws.amazon.com/de_de/codedeploy/latest/userguide/images/lifecycle-event-order-ecs.png)


**Anmerkung**  
Für die Ereignisse **Start **TestTraffic****, **Install **AllowTraffic****, und **End** in der Bereitstellung können keine Skripts erstellt werden, weshalb sie in diesem Diagramm grau dargestellt werden.

### Struktur des Abschnitts „Hooks“
<a name="reference-appspec-file-structure-hooks-section-structure-ecs"></a>

Die folgenden Beispiele veranschaulichen die Struktur des Abschnitts `'hooks'`.

Mit YAML:

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

Mit JSON:

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

### Beispiel für die Lambda-Funktion „Hooks“
<a name="reference-appspec-file-structure-hooks-section-structure-ecs-sample-function"></a>

Verwenden Sie den `'hooks'` Abschnitt, um eine Lambda-Funktion anzugeben, die aufgerufen CodeDeploy werden kann, um eine Amazon ECS-Bereitstellung zu validieren. Sie können dieselbe oder eine andere Funktion für die Ereignisse im Lebenszyklus der `AfterAllowTraffic` Bereitstellung `BeforeInstall` `AfterInstall``AfterAllowTestTraffic`,`BeforeAllowTraffic`,, und verwenden. Nach Abschluss der Validierungstests ruft die `AfterAllowTraffic` Lambda-Funktion zurück CodeDeploy und liefert das Ergebnis `Succeeded` oder`Failed`. 

**Wichtig**  
Die Bereitstellung gilt als fehlgeschlagen, wenn sie nicht innerhalb einer Stunde von der Lambda-Validierungsfunktion benachrichtigt CodeDeploy wird.

 Vor dem Aufrufen einer Lambda-Hook-Funktion muss der Server mithilfe des Befehls über die Bereitstellungs-ID und die Ausführungs-ID des Lifecycle-Event-Hooks informiert werden. `putLifecycleEventHookExecutionStatus`

 Im Folgenden finden Sie ein Beispiel für eine Lambda-Hook-Funktion, die in Node.js geschrieben wurde. 

```
'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 Abschnitt „Hooks“ für eine AWS Lambda-Bereitstellung
<a name="appspec-hooks-lambda"></a>

**Topics**
+ [Liste der Lifecycle-Event-Hooks für eine AWS Lambda-Bereitstellung](#reference-appspec-file-structure-hooks-list-lambda)
+ [Reihenfolge der Hooks in einer Bereitstellung einer Lambda-Funktionsversion ausführen](#reference-appspec-file-structure-hooks-run-order-lambda)
+ [Struktur des Abschnitts „Hooks“](#reference-appspec-file-structure-hooks-section-structure-lambda)
+ [Beispiel für die Lambda-Funktion „Hooks“](#reference-appspec-file-structure-hooks-section-structure-lambda-sample-function)

### Liste der Lifecycle-Event-Hooks für eine AWS Lambda-Bereitstellung
<a name="reference-appspec-file-structure-hooks-list-lambda"></a>

Ein AWS Lambda-Hook ist eine Lambda-Funktion, die mit einer Zeichenfolge in einer neuen Zeile nach dem Namen des Lebenszyklusereignisses angegeben wird. Jeder Hook wird einmal pro Bereitstellung ausgeführt. Im Folgenden finden Sie Beschreibungen der Hooks, die für die Verwendung in Ihrer AppSpec Datei verfügbar sind. 
+ **BeforeAllowTraffic**— Wird verwendet, um Aufgaben auszuführen, bevor der Datenverkehr auf die bereitgestellte Lambda-Funktionsversion umgestellt wird.
+ **AfterAllowTraffic**— Wird verwendet, um Aufgaben auszuführen, nachdem der gesamte Datenverkehr auf die bereitgestellte Lambda-Funktionsversion umgestellt wurde.

### Reihenfolge der Hooks in einer Bereitstellung einer Lambda-Funktionsversion ausführen
<a name="reference-appspec-file-structure-hooks-run-order-lambda"></a>

In einer serverlosen Bereitstellung einer Lambda-Funktionsversion werden Event-Hooks in der folgenden Reihenfolge ausgeführt:

![\[Die Reihenfolge der Event-Hooks in einer Lambda-Bereitstellung.\]](http://docs.aws.amazon.com/de_de/codedeploy/latest/userguide/images/lifecycle-event-order-lambda.png)


**Anmerkung**  
Für die **Start **AllowTraffic****- und **Endereignisse** in der Bereitstellung kann kein Skript erstellt werden, weshalb sie in diesem Diagramm grau dargestellt werden.

### Struktur des Abschnitts „Hooks“
<a name="reference-appspec-file-structure-hooks-section-structure-lambda"></a>

Die folgenden Beispiele veranschaulichen die Struktur des 'hooks'-Abschnitts .

Mit YAML:

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

Mit JSON:

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

### Beispiel für die Lambda-Funktion „Hooks“
<a name="reference-appspec-file-structure-hooks-section-structure-lambda-sample-function"></a>

Verwenden Sie den Abschnitt „Hooks“, um eine Lambda-Funktion anzugeben, die aufgerufen CodeDeploy werden kann, um eine Lambda-Bereitstellung zu validieren. Sie können dieselbe oder eine andere Funktion für die Ereignisse im Lebenszyklus der `BeforeAllowTraffic` `AfterAllowTraffic` Bereitstellung verwenden. Nach Abschluss der Validierungstests ruft die Lambda-Validierungsfunktion zurück CodeDeploy und liefert ein Ergebnis von `Succeeded` oder`Failed`. 

**Wichtig**  
Die Bereitstellung gilt als fehlgeschlagen, wenn sie nicht innerhalb einer Stunde von der Lambda-Validierungsfunktion benachrichtigt CodeDeploy wird.

 Vor dem Aufrufen einer Lambda-Hook-Funktion muss der Server mithilfe des Befehls über die Bereitstellungs-ID und die Ausführungs-ID des Lifecycle-Event-Hooks informiert werden. `putLifecycleEventHookExecutionStatus`

 Im Folgenden finden Sie ein Beispiel für eine Lambda-Hook-Funktion, die in Node.js geschrieben wurde. 

```
'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 Abschnitt „Hooks“ für eine EC2/On-Premises-Bereitstellung
<a name="appspec-hooks-server"></a>

**Topics**
+ [Liste der Lifecycle-Event-Hooks](#reference-appspec-file-structure-hooks-list)
+ [Verfügbarkeit von Hooks für Lebenszyklus-Ereignisse](#reference-appspec-file-structure-hooks-availability)
+ [Führt die Reihenfolge der Hooks in einem Deployment aus](#reference-appspec-file-structure-hooks-run-order)
+ [Struktur des Abschnitts „Hooks“](#reference-appspec-file-structure-hooks-section-structure)
+ [Referenzieren von Dateien in Ihren Hook-Skripten](#codedeploy-agent-working-directory)
+ [Verfügbarkeit von Umgebungsvariablen für Hooks](#reference-appspec-file-structure-environment-variable-availability)
+ [Beispiel für Hooks](#reference-appspec-file-structure-hooks-example)

### Liste der Lifecycle-Event-Hooks
<a name="reference-appspec-file-structure-hooks-list"></a>

Ein EC2/On-Premises-Bereitstellungs-Hook wird einmal pro Bereitstellung für eine Instance ausgeführt. Sie können ein oder mehrere Skripts zur Ausführung in einem Hook angeben. Jeder Hook für ein Lebenszyklusereignis wird mit einer Zeichenfolge in einer separaten Zeile angegeben. Im Folgenden finden Sie Beschreibungen der Hooks, die für die Verwendung in Ihrer Datei verfügbar sind. AppSpec 

Weitere Informationen darüber, welche Lebenszyklusereignis-Hooks für welche Bereitstellungs- und Rollback-Typen gültig sind, finden Sie unter [Verfügbarkeit von Hooks für Lebenszyklus-Ereignisse](#reference-appspec-file-structure-hooks-availability).
+ `ApplicationStop`— Dieses Ereignis im Bereitstellungszyklus tritt auf, noch bevor die Anwendungsversion heruntergeladen wird. Sie können Skripts für dieses Ereignis angeben, um die Anwendung ordnungsgemäß anzuhalten, oder zur Vorbereitung einer Bereitstellung derzeit installierte Pakete entfernen. Die für dieses Ereignis im Bereitstellungslebenszyklus verwendeten AppSpec Dateien und Skripts stammen aus der vorherigen, erfolgreich bereitgestellten Anwendungsrevision.
**Anmerkung**  
Eine AppSpec Datei ist auf einer Instanz nicht vorhanden, bevor Sie sie auf ihr bereitstellen. Aus diesem Grund wird der `ApplicationStop`-Hook beim ersten Bereitstellen auf der Instance nicht ausgeführt. Sie können den `ApplicationStop`-Hook bei der zweiten Bereitstellung für eine Instance verwenden.

   Um den Speicherort der letzten erfolgreich bereitgestellten Anwendungsrevision zu ermitteln, sucht der CodeDeploy Agent nach dem in der `deployment-group-id_last_successful_install` Datei aufgeführten Speicherort. Diese Datei befindet sich unter:

   `/opt/codedeploy-agent/deployment-root/deployment-instructions`Ordner auf Amazon Linux-, Ubuntu Server- und RHEL Amazon EC2 EC2-Instances. 

  `C:\ProgramData\Amazon\CodeDeploy\deployment-instructions`Ordner auf Windows Server Amazon EC2 EC2-Instances.

  Informationen zur Problembehebung für eine Bereitstellung, die während des Bereitstellungslebenszyklusereignisses `ApplicationStop` fehlschlägt, finden Sie unter [Behebung eines Fehlers oder eines ApplicationStop BeforeBlockTraffic Ereignisses im Lebenszyklus einer AfterBlockTraffic Bereitstellung](troubleshooting-deployments.md#troubleshooting-deployments-lifecycle-event-failures).
+ `DownloadBundle`— Während dieses Bereitstellungslebenszyklus kopiert der CodeDeploy Agent die Revisionsdateien der Anwendung an einen temporären Speicherort: 

  `/opt/codedeploy-agent/deployment-root/deployment-group-id/deployment-id/deployment-archive`Ordner auf Amazon Linux-, Ubuntu Server- und RHEL Amazon EC2 EC2-Instances. 

  `C:\ProgramData\Amazon\CodeDeploy\deployment-group-id\deployment-id\deployment-archive`Ordner auf Windows Server Amazon EC2 EC2-Instances. 

  Dieses Ereignis ist für den CodeDeploy Agenten reserviert und kann nicht zum Ausführen von Skripten verwendet werden.

  Informationen zur Problembehebung für eine Bereitstellung, die während des Bereitstellungslebenszyklusereignisses `DownloadBundle` fehlschlägt, finden Sie unter [Behebung eines fehlgeschlagenen DownloadBundle Deployment-Lifecycle-Ereignisses mit UnknownError: nicht zum Lesen geöffnet](troubleshooting-deployments.md#troubleshooting-deployments-downloadbundle).
+ `BeforeInstall`— Sie können dieses Ereignis im Bereitstellungslebenszyklus für Aufgaben vor der Installation verwenden, z. B. für das Entschlüsseln von Dateien und das Erstellen einer Sicherungskopie der aktuellen Version.
+ `Install`— Während dieses Bereitstellungslebenszyklus kopiert der CodeDeploy Agent die Revisionsdateien vom temporären Speicherort in den endgültigen Zielordner. Dieses Ereignis ist für den CodeDeploy Agenten reserviert und kann nicht zum Ausführen von Skripten verwendet werden.
+ `AfterInstall`— Sie können dieses Ereignis im Bereitstellungslebenszyklus für Aufgaben wie die Konfiguration Ihrer Anwendung oder das Ändern von Dateiberechtigungen verwenden.
+ `ApplicationStart`— In der Regel verwenden Sie dieses Ereignis im Bereitstellungslebenszyklus, um Dienste neu zu starten, die währenddessen gestoppt wurden`ApplicationStop`.
+ `ValidateService`— Dies ist das letzte Ereignis im Bereitstellungslebenszyklus. Es wird verwendet, um zu überprüfen, ob die Bereitstellung erfolgreich abgeschlossen wurde.
+ `BeforeBlockTraffic`— Sie können dieses Ereignis im Bereitstellungslebenszyklus verwenden, um Aufgaben auf Instances auszuführen, bevor diese bei einem Load Balancer deregistriert werden.

  Informationen zur Problembehebung für eine Bereitstellung, die während des Bereitstellungslebenszyklusereignisses `BeforeBlockTraffic` fehlschlägt, finden Sie unter [Behebung eines Fehlers oder eines ApplicationStop BeforeBlockTraffic Ereignisses im Lebenszyklus einer AfterBlockTraffic Bereitstellung](troubleshooting-deployments.md#troubleshooting-deployments-lifecycle-event-failures).
+ `BlockTraffic`— Während dieses Deployment-Lifecycle-Ereignisses wird der Internetverkehr daran gehindert, auf Instances zuzugreifen, die derzeit Traffic bereitstellen. Dieses Ereignis ist für den CodeDeploy Agenten reserviert und kann nicht zur Ausführung von Skripten verwendet werden. 
+ `AfterBlockTraffic`— Sie können dieses Deployment-Lifecycle-Ereignis verwenden, um Aufgaben auf Instances auszuführen, nachdem diese bei ihrem jeweiligen Load Balancer abgemeldet wurden. 

  Informationen zur Problembehebung für eine Bereitstellung, die während des Bereitstellungslebenszyklusereignisses `AfterBlockTraffic` fehlschlägt, finden Sie unter [Behebung eines Fehlers oder eines ApplicationStop BeforeBlockTraffic Ereignisses im Lebenszyklus einer AfterBlockTraffic Bereitstellung](troubleshooting-deployments.md#troubleshooting-deployments-lifecycle-event-failures).
+ `BeforeAllowTraffic`— Sie können dieses Deployment-Lifecycle-Ereignis verwenden, um Aufgaben auf Instances auszuführen, bevor diese bei einem Load Balancer registriert wurden.
+ `AllowTraffic`— Während dieses Bereitstellungslebenszyklus darf Internet-Traffic nach einer Bereitstellung auf Instances zugreifen. Dieses Ereignis ist für den CodeDeploy Agenten reserviert und kann nicht zur Ausführung von Skripten verwendet werden.
+ `AfterAllowTraffic`— Sie können dieses Deployment-Lifecycle-Ereignis verwenden, um Aufgaben auf Instances auszuführen, nachdem diese bei einem Load Balancer registriert wurden.

### Verfügbarkeit von Hooks für Lebenszyklus-Ereignisse
<a name="reference-appspec-file-structure-hooks-availability"></a>

In der folgenden Tabelle finden Sie die Lebenszyklusereignis-Hooks für die einzelnen Bereitstellungs- und Rollback-Szenarien.


| Name des Lebenszyklusereignis | Bereitstellung von Auto Scaling Scaling-Start¹ | Bereitstellung von Auto Scaling-Termination¹ | Bereitstellung vor Ort² | Blau/Grün-Bereitstellung: Original-Instances | Blau/Grün-Bereitstellung: Ersatz-Instances | Blau/Grün-Bereitstellungs-Rollback: Original-Instances | Blau/Grün-Bereitstellungs-Rollback: Ersatz-Instances | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| ApplicationStop | ✓ | ✓ | ✓ |  | ✓ |  |  | 
| DownloadBundle³ | ✓ |  | ✓ |  | ✓ |  |  | 
| BeforeInstall | ✓ |  | ✓ |  | ✓ |  |  | 
| ³ installieren | ✓ |  | ✓ |  | ✓ |  |  | 
| AfterInstall | ✓ |  | ✓ |  | ✓ |  |  | 
| ApplicationStart | ✓ |  | ✓ |  | ✓ |  |  | 
| ValidateService | ✓ |  | ✓ |  | ✓ |  |  | 
| BeforeBlockTraffic |  | ✓ | ✓ | ✓ |  |  | ✓ | 
| BlockTraffic³ |  | ✓ | ✓ | ✓ |  |  | ✓ | 
| AfterBlockTraffic |  | ✓ | ✓ | ✓ |  |  | ✓ | 
| BeforeAllowTraffic | ✓ |  | ✓ |  | ✓ | ✓ |  | 
| AllowTraffic³ | ✓ |  | ✓ |  | ✓ | ✓ |  | 
| AfterAllowTraffic | ✓ |  | ✓ |  | ✓ | ✓ |  | 
|  ¹ Informationen zu Amazon EC2 Auto Scaling Scaling-Bereitstellungen finden Sie unter. [So funktioniert Amazon EC2 Auto Scaling mit CodeDeploy](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-behaviors) ² Gilt auch für das Rollback einer In-Place-Bereitstellung. ³ Für den Betrieb reserviert CodeDeploy . Kann nicht für die Ausführung von Skripts verwendet werden.  | 

### Führt die Reihenfolge der Hooks in einem Deployment aus
<a name="reference-appspec-file-structure-hooks-run-order"></a>

**Auto Scaling Scaling-Startbereitstellungen**

 CodeDeploy Führt während einer Auto Scaling Scaling-Startbereitstellung Event-Hooks in der folgenden Reihenfolge aus.

Weitere Informationen zu Auto Scaling Scaling-Startbereitstellungen finden Sie unter[So funktioniert Amazon EC2 Auto Scaling mit CodeDeploy](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-behaviors).

![\[Die Reihenfolge der Event-Hooks während einer Auto Scaling Scaling-Startbereitstellung.\]](http://docs.aws.amazon.com/de_de/codedeploy/latest/userguide/images/lifecycle-event-order-scale-out.png)


**Anmerkung**  
Für die **Start** - **DownloadBundle**AllowTraffic****, **Installations** - und **Endereignisse** in der Bereitstellung kann kein Skript erstellt werden, weshalb sie in diesem Diagramm grau dargestellt werden. Sie können den `'files'` Abschnitt der AppSpec Datei jedoch bearbeiten, um anzugeben, was während des Installationsereignisses **installiert** wird.

**Bereitstellungen zur Kündigung von Auto Scaling**

 CodeDeploy Führt während einer Auto Scaling-Terminierungsbereitstellung Event-Hooks in der folgenden Reihenfolge aus.

Weitere Informationen zu Auto Scaling-Terminierungsbereitstellungen finden Sie unter[Aktivierung von Terminierungsbereitstellungen bei Auto Scaling-Scale-In-Ereignissen](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-behaviors-hook-enable).

![\[Die Reihenfolge der Event-Hooks während einer Auto Scaling-Terminierungsbereitstellung.\]](http://docs.aws.amazon.com/de_de/codedeploy/latest/userguide/images/lifecycle-event-order-scale-in.png)


**Anmerkung**  
Für die **Start **BlockTraffic****- und **Endereignisse** in der Bereitstellung kann kein Skript erstellt werden, weshalb sie in diesem Diagramm grau dargestellt werden. 

**In-Situ-Bereitstellungen**

In einer In-Situ-Bereitstellung, einschließlich des Rollbacks einer In-Situ-Bereitstellung, werden Ereignis-Hooks in der folgenden Reihenfolge ausgeführt:

**Anmerkung**  
Bei In-Place-Bereitstellungen gelten die sechs Hooks, die sich auf das Blockieren und Zulassen von Traffic beziehen, nur, wenn Sie in der Bereitstellungsgruppe einen Classic Load Balancer, Application Load Balancer oder Network Load Balancer von Elastic Load Balancing angeben.

![\[Die Reihenfolge der Event-Hooks beim Rollback einer In-Place-Bereitstellung.\]](http://docs.aws.amazon.com/de_de/codedeploy/latest/userguide/images/lifecycle-event-order-in-place.png)


**Anmerkung**  
Für die **Start** - **DownloadBundle**, **Installations** - und **Endereignisse** in der Bereitstellung kann kein Skript erstellt werden, weshalb sie in diesem Diagramm grau dargestellt werden. Sie können den `'files'` Abschnitt der AppSpec Datei jedoch bearbeiten, um anzugeben, was während des Installationsereignisses **installiert** wird.

**Blau/Grün-Bereitstellungen**

In einer blue/green Bereitstellung werden Event-Hooks in der folgenden Reihenfolge ausgeführt:

![\[Die Reihenfolge der Event-Hooks in einer blue/green Bereitstellung.\]](http://docs.aws.amazon.com/de_de/codedeploy/latest/userguide/images/lifecycle-event-order-blue-green.png)


**Anmerkung**  
Für die **Start** - **DownloadBundle**, **Installations** - **BlockTraffic**AllowTraffic****, und **Endereignisse** in der Bereitstellung kann kein Skript erstellt werden, weshalb sie in diesem Diagramm grau dargestellt werden. Sie können jedoch den Abschnitt „Dateien“ der AppSpec Datei bearbeiten, um anzugeben, was während des Installationsereignisses **installiert** werden soll.

### Struktur des Abschnitts „Hooks“
<a name="reference-appspec-file-structure-hooks-section-structure"></a>

Der `'hooks'`-Abschnitt weist die folgende Struktur auf:

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

Sie können die folgenden Elemente nach dem Namen des Bereitstellungslebenszyklusereignisses in einen **Hook**-Eintrag einschließen:

** location **  
Erforderlich Die Position im Paket der Skriptdatei für die Revision. Der Speicherort der Skripts, die Sie in `hooks` diesem Abschnitt angeben, bezieht sich auf das Stammverzeichnis des Revisionspakets der Anwendung. Weitere Informationen finden Sie unter [Planen Sie eine Revision für CodeDeploy](application-revisions-plan.md).

** timeout **  
Optional. Die Anzahl der Sekunden, die das Skript ausgeführt wird, bevor es als fehlgeschlagen gilt. Der Standard ist 3 600 Sekunden (1 Stunde).  
Für jedes Bereitstellungslebenszyklusereignis sind maximal 3 600 Sekunden (1 Stunde) für die Ausführung von Skripts zulässig. Wenn Skripts dieses Limit überschreiten, wird die Bereitstellung angehalten und die Bereitstellung auf der Instance schlägt fehl. Stellen Sie sicher, dass die für **timeout** angegebene Gesamtanzahl der Sekunden für alle Skripts in jedem Bereitstellungslebenszyklusereignis dieses Limit nicht überschreitet.

** runas **  
Optional. Der Benutzer, der vorgetäuscht werden soll, wenn das Skript ausgeführt wird. Standardmäßig ist dies der CodeDeploy Agent, der auf der Instanz ausgeführt wird. CodeDeploy speichert keine Passwörter, sodass der Benutzer nicht imitiert werden kann, wenn der **Runas-Benutzer** ein Passwort benötigt. Dieses Element gilt nur für Amazon Linux- und Ubuntu Server-Instances.

### Referenzieren von Dateien in Ihren Hook-Skripten
<a name="codedeploy-agent-working-directory"></a>

Wenn Sie ein Skript mit einem CodeDeploy Lebenszyklusereignis verknüpfen, wie unter beschrieben[AppSpec Abschnitt „Hooks“](#reference-appspec-file-structure-hooks), und Sie in Ihrem Skript auf eine Datei verweisen möchten (z. B.`helper.sh`), müssen Sie Folgendes angeben`helper.sh`:
+ (Empfohlen) Ein absoluter Pfad. Siehe [Absolute Pfade verwenden](#codedeploy-agent-working-dir-absolute).
+ Ein relativer Pfad. Siehe [Verwenden relativer Pfade](#codedeploy-agent-working-dir-relative).

#### Absolute Pfade verwenden
<a name="codedeploy-agent-working-dir-absolute"></a>

Um mit ihrem *absoluten* Pfad auf eine Datei zu verweisen, können Sie entweder:
+ Geben Sie den absoluten Pfad im `files` Abschnitt der AppSpec Datei in der `destination` Eigenschaft an. Geben Sie dann denselben absoluten Pfad in Ihrem Hook-Skript an. Weitere Informationen finden Sie unter [AppSpec Abschnitt „Dateien“ (nur für EC2/lokale Bereitstellungen)](reference-appspec-file-structure-files.md). 
+ Geben Sie einen dynamischen absoluten Pfad in Ihrem Hook-Skript an. Weitere Informationen finden Sie unter [Speicherort des Deployment-Archivs](#codedeploy-agent-working-dir-archive).

**Speicherort des Bereitstellungsarchivs**

Während des [DownloadBundle](#reference-appspec-file-structure-hooks-list)Lebenszyklusereignisses extrahiert der CodeDeploy Agent die [Version](application-revisions.md) für die Bereitstellung in ein Verzeichnis, das das folgende Format hat:

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

Der *root-directory* Teil des Pfads ist immer entweder auf den in der folgenden Tabelle angegebenen Standard festgelegt oder wird durch die `:root_dir` Konfigurationseinstellung gesteuert. Weitere Informationen zu den Konfigurationseinstellungen finden Sie unter[CodeDeploy Referenz zur Agentenkonfiguration](reference-agent-configuration.md).


| Agentenplattform | Standard-Stammverzeichnis | 
| --- | --- | 
| Linux — alle RPM-Distributionen |  /opt/codedeploy-agent/deployment-root  | 
| Ubuntu Server — alle Deb-Distributionen |  /opt/codedeploy-agent/deployment-root  | 
| Windows Server |  %ProgramData%\$1Amazon\$1CodeDeploy  | 

Von Ihren Hook-Skripten aus könnten Sie mithilfe des Stammverzeichnispfads und der `DEPLOYMENT_GROUP_ID` Umgebungsvariablen auf das `DEPLOYMENT_ID` aktuelle Deployment-Archiv zugreifen. Weitere Hinweise zu Variablen, die Sie verwenden können, finden Sie unter[Verfügbarkeit von Umgebungsvariablen für Hooks](#reference-appspec-file-structure-environment-variable-availability).

So könnten Sie beispielsweise auf eine `data.json` Datei zugreifen, die sich im Stammverzeichnis Ihrer Revision unter Linux befindet:

```
#!/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)
```

Als weiteres Beispiel können Sie mit Powershell unter Windows auf eine `data.json` Datei zugreifen, die sich im Stammverzeichnis Ihrer Revision befindet:

```
$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)
```

#### Verwenden relativer Pfade
<a name="codedeploy-agent-working-dir-relative"></a>

Um mit ihrem *relativen* Pfad auf eine Datei zu verweisen, müssen Sie das Arbeitsverzeichnis des CodeDeploy Agenten kennen. Dateipfade sind relativ zu diesem Verzeichnis.

Die folgende Tabelle zeigt das Arbeitsverzeichnis für jede unterstützte Plattform des CodeDeploy Agenten.

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

### Verfügbarkeit von Umgebungsvariablen für Hooks
<a name="reference-appspec-file-structure-environment-variable-availability"></a>

Während jedes Bereitstellungslebenszyklusereignisses können Hook-Skripts auf die folgenden Umgebungsvariablen zugreifen:

** APPLICATION\$1NAME **  
Der Name der Anwendung CodeDeploy , die Teil der aktuellen Bereitstellung ist (z. B.`WordPress_App`).

** DEPLOYMENT\$1ID **  
Die ID, die der aktuellen Bereitstellung zugewiesen CodeDeploy wurde (z. B.`d-AB1CDEF23`).

** DEPLOYMENT\$1GROUP\$1NAME **  
Der Name der Bereitstellungsgruppe CodeDeploy , die Teil der aktuellen Bereitstellung ist (z. B.`WordPress_DepGroup`).

** DEPLOYMENT\$1GROUP\$1ID **  
Die ID der Bereitstellungsgruppe CodeDeploy , die Teil der aktuellen Bereitstellung ist (z. B.`b1a2189b-dd90-4ef5-8f40-4c1c5EXAMPLE`).

** LIFECYCLE\$1EVENT **  
Der Name des aktuellen Bereitstellungslebenszyklusereignisses (z. B. `AfterInstall`).

Es handelt sich um lokale Umgebungsvariablen für die einzelnen Bereitstellungslebenszyklusereignisse.

 Abhängig von der Quelle des Bereitstellungspakets stehen zusätzliche Umgebungsvariablen für Hook-Skripte zur Verfügung:

**Paket von Amazon S3**
+ **BUNDLE\$1BUCKET**

  Der Name des Amazon S3 S3-Buckets, aus dem das Bereitstellungspaket heruntergeladen wurde (z. B.`my-s3-bucket`).
+ **BUNDLE\$1KEY**

  Der Objektschlüssel für das heruntergeladene Paket innerhalb des Amazon S3 S3-Buckets (z. B.`WordPress_App.zip`).
+ **BUNDLE\$1VERSION**

  Die Objektversion für das Bundle (zum Beispiel). `3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo` Diese Variable wird nur gesetzt, wenn für den Amazon S3 S3-Bucket die [Objektversionierung](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) aktiviert ist.
+ **BUNDLE\$1ETAG**

  Das Objekt-Etag für das Bundle (zum Beispiel). `b10a8db164e0754105b7a99be72e3fe5-4`

**Paket von GitHub**
+ **BUNDLE\$1COMMIT**

  Der SHA256 Commit-Hash des von Git generierten Bundles (zum Beispiel`d2a84f4b8b650937ec8f73cd8be2c74add5a911ba64df27458ed8229da804a26`).

Das folgende Skript ändert den Überwachungsport auf einem Apache HTTP-Server von 80 auf 9090, wenn der Wert von **DEPLOYMENT\$1GROUP\$1NAME** gleich `Staging` ist. Dieses Skript muss während des Bereitstellungslebenszyklusereignisses `BeforeInstall` aufgerufen werden:

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

Das folgende Skriptbeispiel ändert die Ausführlichkeitsstufe der Nachrichten, die im Fehlerprotokoll aufgezeichnet werden, von Warnung zu Debug-Nachricht, wenn der Wert der Umgebungsvariablen **DEPLOYMENT\$1GROUP\$1NAME** gleich `Staging` ist. Dieses Skript muss während des Bereitstellungslebenszyklusereignisses `BeforeInstall` aufgerufen werden:

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

Das folgende Skriptbeispiel ersetzt den Text auf der angegebenen Webseite mit Text, der den Wert dieser Umgebungsvariablen anzeigt. Dieses Skript muss während des Bereitstellungslebenszyklusereignisses `AfterInstall` aufgerufen werden:

```
#!/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()
```

### Beispiel für Hooks
<a name="reference-appspec-file-structure-hooks-example"></a>

Hier finden Sie ein Beispiel für einen **hooks**-Eintrag, der zwei Hooks für das `AfterInstall`-Lebenszyklusereignis angibt:

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

Das Skript `Scripts/RunResourceTests.sh` wird während der Stufe `AfterInstall` des Bereitstellungsvorgangs ausgeführt. Die Implementierung schlägt fehl, wenn die Ausführung des Skripts mehr als 180 Sekunden (3 Minuten) dauert.

Der Speicherort von Skripts, den Sie im Abschnitt „Hooks“ angeben, ist relativ zum Stamm des Anwendungsrevisionspakets. Im obigen Beispiel befindet sich eine Datei mit dem Namen `RunResourceTests.sh` in einem Verzeichnis mit dem Namen `Scripts`. Das Verzeichnis `Scripts` befindet sich auf der Stammebene des Pakets. Weitere Informationen finden Sie unter [Planen Sie eine Revision für CodeDeploy](application-revisions-plan.md).