

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.

# Installation benutzerdefinierter Plugins
<a name="configuring-dag-import-plugins"></a>

Amazon Managed Workflows for Apache Airflow unterstützt den integrierten Plugin-Manager von Apache Airflow, sodass Sie benutzerdefinierte Apache Airflow-Operatoren, Hooks, Sensoren oder Schnittstellen verwenden können. Auf dieser Seite werden die Schritte zur Installation [benutzerdefinierter Apache Airflow-Plugins](https://airflow.incubator.apache.org/plugins.html) in Ihrer Amazon MWAA-Umgebung mithilfe einer Datei beschrieben. `plugins.zip`

**Contents**
+ [Voraussetzungen](#configuring-dag-plugins-prereqs)
+ [Funktionsweise](#configuring-dag-plugins-how)
+ [Wann sollten die Plugins verwendet werden](#configuring-dag-plugins-changed)
+ [Übersicht über benutzerdefinierte Plugins](#configuring-dag-plugins-overview)
  + [Verzeichnis- und Größenbeschränkungen für benutzerdefinierte Plugins](#configuring-dag-plugins-quota)
+ [Beispiele für benutzerdefinierte Plugins](#configuring-dag-plugins-airflow-ex)
  + [Beispiel für die Verwendung einer flachen Verzeichnisstruktur in plugins.zip](#configuring-dag-plugins-overview-simple)
  + [Beispiel für die Verwendung einer verschachtelten Verzeichnisstruktur in plugins.zip](#configuring-dag-plugins-overview-complex)
+ [Eine Datei vom Typ plugins.zip erstellen](#configuring-dag-plugins-test-create)
  + [Schritt eins: Testen Sie benutzerdefinierte Plugins mit dem Amazon MWAA CLI Utility](#configuring-dag-plugins-cli-utility)
  + [Schritt zwei: Erstellen Sie die Datei plugins.zip](#configuring-dag-plugins-zip)
+ [Auf Amazon `plugins.zip` S3 hochladen](#configuring-dag-plugins-upload)
  + [Mit dem AWS CLI](#configuring-dag-plugins-upload-cli)
  + [Verwenden der Amazon S3-Konsole](#configuring-dag-plugins-upload-console)
+ [Installation benutzerdefinierter Plugins in Ihrer Umgebung](#configuring-dag-plugins-mwaa-installing)
  + [Angeben des Pfads zu `plugins.zip` auf der Amazon MWAA-Konsole (beim ersten Mal)](#configuring-dag-plugins-mwaa-first)
  + [Angabe der `plugins.zip` Version auf der Amazon MWAA-Konsole](#configuring-dag-plugins-s3-mwaaconsole)
+ [Beispielhafte Anwendungsfälle für plugins.zip](#configuring-dag-plugins-examples)
+ [Als nächstes](#configuring-dag-plugins-next-up)

## Voraussetzungen
<a name="configuring-dag-plugins-prereqs"></a>

Sie benötigen Folgendes, bevor Sie die Schritte auf dieser Seite abschließen können.
+ **Berechtigungen** — Ihr Administrator AWS-Konto muss Ihnen Zugriff auf die [MWAAFullConsoleAccessAmazon-Zugriffskontrollrichtlinie](access-policies.md#console-full-access) für Ihre Umgebung gewährt haben. Darüber hinaus muss Ihrer Amazon MWAA-Umgebung von Ihrer [Ausführungsrolle](mwaa-create-role.md) der Zugriff auf die von Ihrer Umgebung verwendeten AWS Ressourcen gestattet werden.
+ **Zugriff** — Wenn Sie Zugriff auf öffentliche Repositorys benötigen, um Abhängigkeiten direkt auf dem Webserver zu installieren, muss Ihre Umgebung für den Zugriff auf **öffentliche** Netzwerk-Webserver konfiguriert sein. Weitere Informationen finden Sie unter [Apache-Airflow-Zugriffsmodi](configuring-networking.md).
+ **Amazon S3 S3-Konfiguration** — Der [Amazon S3 S3-Bucket](mwaa-s3-bucket.md) DAGs, in dem Ihre benutzerdefinierten Plugins und Python-Abhängigkeiten gespeichert werden`plugins.zip`, `requirements.txt` muss mit *geblocktem öffentlichem Zugriff* und *aktivierter Versionierung* konfiguriert sein.

## Funktionsweise
<a name="configuring-dag-plugins-how"></a>

Um benutzerdefinierte Plugins in Ihrer Umgebung auszuführen, müssen Sie drei Dinge tun:

1. Erstellen Sie lokal eine `plugins.zip` Datei.

1. Laden Sie die lokale `plugins.zip` Datei in Ihren Amazon S3 S3-Bucket hoch.

1. Geben Sie die Version dieser Datei im Feld **Plugins-Datei** auf der Amazon MWAA-Konsole an.

**Anmerkung**  
Wenn Sie zum ersten Mal einen `plugins.zip` in Ihren Amazon S3 S3-Bucket hochladen, müssen Sie auch den Pfad zu der Datei auf der Amazon MWAA-Konsole angeben. Sie müssen diesen Schritt nur einmal ausführen.

## Wann sollten die Plugins verwendet werden
<a name="configuring-dag-plugins-changed"></a>

Plugins sind nur für die Erweiterung der Apache Airflow Airflow-Benutzeroberfläche erforderlich, wie in der [Apache Airflow Airflow-Dokumentation](https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/plugins.html#plugins) beschrieben. Benutzerdefinierte Operatoren können direkt im `/dags` Ordner neben Ihrem `DAG` Code platziert werden.

Wenn Sie Ihre eigenen Integrationen mit externen Systemen erstellen müssen, platzieren Sie sie im `dags` Ordner/oder einem Unterordner darin, aber nicht im `plugins.zip` Ordner. In Apache Airflow 2.x werden Plugins hauptsächlich zur Erweiterung der Benutzeroberfläche verwendet.

Ebenso können andere Abhängigkeiten nicht hinzugefügt werden. `plugins.zip` Stattdessen können sie an einem Ort im Amazon S3 `/dags` S3-Ordner gespeichert werden, wo sie vor dem Start von Apache Airflow mit jedem Amazon MWAA-Container synchronisiert werden.

**Anmerkung**  
Jede Datei in dem `/dags` Ordner oder in der Datei`plugins.zip`, die nicht explizit ein Apache Airflow DAG-Objekt definiert, muss in einer `.airflowignore` Datei aufgeführt werden.

## Übersicht über benutzerdefinierte Plugins
<a name="configuring-dag-plugins-overview"></a>

Der integrierte Plugin-Manager von Apache Airflow kann externe Funktionen in seinen Kern integrieren, indem er Dateien einfach in einem `$AIRFLOW_HOME/plugins` Ordner ablegt. Sie können es verwenden, um benutzerdefinierte Apache Airflow Airflow-Operatoren, Hooks, Sensoren oder Schnittstellen zu verwenden. Der folgende Abschnitt enthält ein Beispiel für flache und verschachtelte Verzeichnisstrukturen in einer lokalen Entwicklungsumgebung und die daraus resultierenden Importanweisungen, die die Verzeichnisstruktur innerhalb einer plugins.zip bestimmen.

### Verzeichnis- und Größenbeschränkungen für benutzerdefinierte Plugins
<a name="configuring-dag-plugins-quota"></a>

Der Apache Airflow Airflow-Scheduler und die Worker suchen beim Start auf dem AWS-verwalteten Fargate-Container für Ihre Umgebung unter nach benutzerdefinierten Plugins. `/usr/local/airflow/plugins/*`
+ **Verzeichnisstruktur.** Die Verzeichnisstruktur (at`/*`) basiert auf dem Inhalt Ihrer `plugins.zip` Datei. Wenn Ihr Verzeichnis beispielsweise als `operators` Hauptverzeichnis `plugins.zip` enthält, wird das Verzeichnis in Ihre Umgebung extrahiert. `/usr/local/airflow/plugins/operators`
+ **Größenbeschränkung.** Wir empfehlen eine `plugins.zip` Datei mit weniger als 1 GB. Je größer eine `plugins.zip` Datei, desto länger ist die Startzeit in einer Umgebung. Amazon MWAA begrenzt die Größe einer `plugins.zip` Datei zwar nicht explizit, aber wenn Abhängigkeiten nicht innerhalb von zehn Minuten installiert werden können, führt der Fargate-Service zu einem Timeout und versucht, die Umgebung auf einen stabilen Zustand zurückzusetzen.

**Anmerkung**  
Für Umgebungen, in denen Apache Airflow v2.0.2 verwendet wird, begrenzt Amazon MWAA den ausgehenden Datenverkehr auf dem Apache Airflow Airflow-Webserver und erlaubt nicht, Plugins oder Python-Abhängigkeiten direkt auf dem Webserver zu installieren. Ab Apache Airflow v2.2.2 kann Amazon MWAA Plugins und Abhängigkeiten direkt auf dem Webserver installieren.

## Beispiele für benutzerdefinierte Plugins
<a name="configuring-dag-plugins-airflow-ex"></a>

Im folgenden Abschnitt wird anhand von Beispielcode aus dem *Apache Airflow Airflow-Referenzhandbuch* erklärt, wie Sie Ihre lokale Entwicklungsumgebung strukturieren können.

### Beispiel für die Verwendung einer flachen Verzeichnisstruktur in plugins.zip
<a name="configuring-dag-plugins-overview-simple"></a>

------
#### [ Apache Airflow v3 ]

Das folgende Beispiel zeigt eine `plugins.zip` Datei mit einer flachen Verzeichnisstruktur für Apache Airflow v3.

**Example flaches Verzeichnis mit plugins.zip `PythonVirtualenvOperator`**  
Das folgende Beispiel zeigt den Hauptbaum einer Datei plugins.zip für das `PythonVirtualenvOperator` benutzerdefinierte Plugin in. [Ein benutzerdefiniertes Plugin für Apache Airflow erstellen PythonVirtualenvOperator](samples-virtualenv.md)   

```
├── virtual_python_plugin.py
```

**Example plugins/virtual\$1python\$1plugin.py**  
Das folgende Beispiel zeigt das `PythonVirtualenvOperator` benutzerdefinierte Plugin.  

```
"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
from airflow.plugins_manager import AirflowPlugin
import airflow.utils.python_virtualenv 
from typing import List

def _generate_virtualenv_cmd(tmp_dir: str, python_bin: str, system_site_packages: bool) -> List[str]:
    cmd = ['python3','/usr/local/airflow/.local/lib/python3.7/site-packages/virtualenv', tmp_dir]
    if system_site_packages:
        cmd.append('--system-site-packages')
    if python_bin is not None:
        cmd.append(f'--python={python_bin}')
    return cmd

airflow.utils.python_virtualenv._generate_virtualenv_cmd=_generate_virtualenv_cmd

class VirtualPythonPlugin(AirflowPlugin):                
    name = 'virtual_python_plugin'
```

------
#### [ Apache Airflow v2 ]

Das folgende Beispiel zeigt eine `plugins.zip` Datei mit einer flachen Verzeichnisstruktur für Apache Airflow v2.

**Example flaches Verzeichnis mit plugins.zip `PythonVirtualenvOperator`**  
Das folgende Beispiel zeigt den Hauptbaum einer Datei plugins.zip für das `PythonVirtualenvOperator` benutzerdefinierte Plugin in. [Ein benutzerdefiniertes Plugin für Apache Airflow erstellen PythonVirtualenvOperator](samples-virtualenv.md)  

```
├── virtual_python_plugin.py
```

**Example plugins/virtual\$1python\$1plugin.py**  
Das folgende Beispiel zeigt das `PythonVirtualenvOperator` benutzerdefinierte Plugin.  

```
"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""
from airflow.plugins_manager import AirflowPlugin
import airflow.utils.python_virtualenv 
from typing import List

def _generate_virtualenv_cmd(tmp_dir: str, python_bin: str, system_site_packages: bool) -> List[str]:
    cmd = ['python3','/usr/local/airflow/.local/lib/python3.7/site-packages/virtualenv', tmp_dir]
    if system_site_packages:
        cmd.append('--system-site-packages')
    if python_bin is not None:
        cmd.append(f'--python={python_bin}')
    return cmd

airflow.utils.python_virtualenv._generate_virtualenv_cmd=_generate_virtualenv_cmd

class VirtualPythonPlugin(AirflowPlugin):                
    name = 'virtual_python_plugin'
```

------

### Beispiel für die Verwendung einer verschachtelten Verzeichnisstruktur in plugins.zip
<a name="configuring-dag-plugins-overview-complex"></a>

------
#### [ Apache Airflow v3 ]

Das folgende Beispiel zeigt eine `plugins.zip` Datei mit separaten Verzeichnissen für `hooks``operators`, und einem `sensors` Verzeichnis.

**Example plugins.zip**  

```
__init__.py
my_airflow_plugin.py
 hooks/
  |-- __init__.py
  |-- my_airflow_hook.py
 operators/
  |-- __init__.py
  |-- my_airflow_operator.py
  |-- hello_operator.py
 sensors/
  |-- __init__.py
  |-- my_airflow_sensor.py
```

Im folgenden Beispiel werden die Import-Anweisungen in der DAG ([DAGs Ordner](https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-dag-folder.html#configuring-dag-folder-how)) angezeigt, die die benutzerdefinierten Plug-ins verwendet.

**Example dags/your\$1dag.py**  

```
from airflow import DAG
from datetime import datetime, timedelta
from operators.my_airflow_operator import MyOperator
from sensors.my_airflow_sensor import MySensor
from operators.hello_operator import HelloOperator

default_args = {
	'owner': 'airflow',
	'depends_on_past': False,
	'start_date': datetime(2018, 1, 1),
	'email_on_failure': False,
	'email_on_retry': False,
	'retries': 1,
	'retry_delay': timedelta(minutes=5),
}


with DAG('customdag',
		 max_active_runs=3,
		 schedule_interval='@once',
		 default_args=default_args) as dag:

	sens = MySensor(
		task_id='taskA'
	)

	op = MyOperator(
		task_id='taskB',
		my_field='some text'
	)

	hello_task = HelloOperator(task_id='sample-task', name='foo_bar')



	sens >> op >> hello_task
```

**Example plugins/my\$1airflow\$1plugin.py**  

```
from airflow.plugins_manager import AirflowPlugin
from hooks.my_airflow_hook import *
from operators.my_airflow_operator import *
                    
class PluginName(AirflowPlugin):
                    
    name = 'my_airflow_plugin'
                    
    hooks = [MyHook]
    operators = [MyOperator]
    sensors = [MySensor]
```

Die folgenden Beispiele stellen die einzelnen Importanweisungen vor, die in den benutzerdefinierten Plugin-Dateien benötigt werden.

**Example hooks/my\$1airflow\$1hook.py**  

```
from airflow.hooks.base import BaseHook


class MyHook(BaseHook):

    def my_method(self):
        print("Hello World")
```

**Example sensors/my\$1airflow\$1sensor.py**  

```
from airflow.sensors.base import BaseSensorOperator
from airflow.utils.decorators import apply_defaults


class MySensor(BaseSensorOperator):

    @apply_defaults
    def __init__(self,
                 *args,
                 **kwargs):
        super(MySensor, self).__init__(*args, **kwargs)

    def poke(self, context):
        return True
```

**Example operators/my\$1airflow\$1operator.py**  

```
from airflow.operators.bash import BaseOperator
from airflow.utils.decorators import apply_defaults
from hooks.my_airflow_hook import MyHook


class MyOperator(BaseOperator):

    @apply_defaults
    def __init__(self,
                 my_field,
                 *args,
                 **kwargs):
        super(MyOperator, self).__init__(*args, **kwargs)
        self.my_field = my_field

    def execute(self, context):
        hook = MyHook('my_conn')
        hook.my_method()
```

**Example operators/hello\$1operator.py**  

```
from airflow.models.baseoperator import BaseOperator
from airflow.utils.decorators import apply_defaults

class HelloOperator(BaseOperator):

    @apply_defaults
    def __init__(
            self,
            name: str,
            **kwargs) -> None:
        super().__init__(**kwargs)
        self.name = name

    def execute(self, context):
        message = "Hello {}".format(self.name)
        print(message)
        return message
```

Folgen Sie den Schritten unter [Testen benutzerdefinierter Plug-ins mit dem Amazon MWAA-CLI-Hilfsprogramm](#configuring-dag-plugins-cli-utility) und dann [Erstellen einer Datei plugins.zip](#configuring-dag-plugins-zip), um den Inhalt **in** Ihrem `plugins` Verzeichnis zu komprimieren. Beispiel, `cd plugins`.

------
#### [ Apache Airflow v2 ]

Das folgende Beispiel zeigt eine `plugins.zip` Datei mit separaten Verzeichnissen für `hooks``operators`, und einem `sensors` Verzeichnis.

**Example plugins.zip**  

```
__init__.py
 my_airflow_plugin.py
 hooks/
  |-- __init__.py
  |-- my_airflow_hook.py
 operators/
  |-- __init__.py
  |-- my_airflow_operator.py
  |-- hello_operator.py
 sensors/
  |-- __init__.py
  |-- my_airflow_sensor.py
```

Im folgenden Beispiel werden die Import-Anweisungen in der DAG ([DAGs Ordner](https://docs.aws.amazon.com/mwaa/latest/userguide/configuring-dag-folder.html#configuring-dag-folder-how)) angezeigt, die die benutzerdefinierten Plug-ins verwendet.

**Example dags/your\$1dag.py**  

```
from airflow import DAG
from datetime import datetime, timedelta
from operators.my_airflow_operator import MyOperator
from sensors.my_airflow_sensor import MySensor
from operators.hello_operator import HelloOperator

default_args = {
	'owner': 'airflow',
	'depends_on_past': False,
	'start_date': datetime(2018, 1, 1),
	'email_on_failure': False,
	'email_on_retry': False,
	'retries': 1,
	'retry_delay': timedelta(minutes=5),
}


with DAG('customdag',
		 max_active_runs=3,
		 schedule_interval='@once',
		 default_args=default_args) as dag:

	sens = MySensor(
		task_id='taskA'
	)

	op = MyOperator(
		task_id='taskB',
		my_field='some text'
	)

	hello_task = HelloOperator(task_id='sample-task', name='foo_bar')



	sens >> op >> hello_task
```

**Example plugins/my\$1airflow\$1plugin.py**  

```
from airflow.plugins_manager import AirflowPlugin
from hooks.my_airflow_hook import *
from operators.my_airflow_operator import *
                    
class PluginName(AirflowPlugin):
                    
    name = 'my_airflow_plugin'
                    
    hooks = [MyHook]
    operators = [MyOperator]
    sensors = [MySensor]
```

Die folgenden Beispiele stellen die einzelnen Importanweisungen vor, die in den benutzerdefinierten Plugin-Dateien benötigt werden.

**Example hooks/my\$1airflow\$1hook.py**  

```
from airflow.hooks.base import BaseHook


class MyHook(BaseHook):

    def my_method(self):
        print("Hello World")
```

**Example sensors/my\$1airflow\$1sensor.py**  

```
from airflow.sensors.base import BaseSensorOperator
from airflow.utils.decorators import apply_defaults


class MySensor(BaseSensorOperator):

    @apply_defaults
    def __init__(self,
                 *args,
                 **kwargs):
        super(MySensor, self).__init__(*args, **kwargs)

    def poke(self, context):
        return True
```

**Example operators/my\$1airflow\$1operator.py**  

```
from airflow.operators.bash import BaseOperator
from airflow.utils.decorators import apply_defaults
from hooks.my_airflow_hook import MyHook


class MyOperator(BaseOperator):

    @apply_defaults
    def __init__(self,
                 my_field,
                 *args,
                 **kwargs):
        super(MyOperator, self).__init__(*args, **kwargs)
        self.my_field = my_field

    def execute(self, context):
        hook = MyHook('my_conn')
        hook.my_method()
```

**Example operators/hello\$1operator.py**  

```
from airflow.models.baseoperator import BaseOperator
from airflow.utils.decorators import apply_defaults

class HelloOperator(BaseOperator):

    @apply_defaults
    def __init__(
            self,
            name: str,
            **kwargs) -> None:
        super().__init__(**kwargs)
        self.name = name

    def execute(self, context):
        message = "Hello {}".format(self.name)
        print(message)
        return message
```

Folgen Sie den Schritten unter [Testen benutzerdefinierter Plug-ins mit dem Amazon MWAA-CLI-Hilfsprogramm](#configuring-dag-plugins-cli-utility) und dann [Erstellen einer Datei plugins.zip](#configuring-dag-plugins-zip), um den Inhalt **in** Ihrem `plugins` Verzeichnis zu komprimieren. Beispiel, `cd plugins`.

------

## Eine Datei vom Typ plugins.zip erstellen
<a name="configuring-dag-plugins-test-create"></a>

In den folgenden Schritten werden die Schritte beschrieben, die wir empfehlen, um eine Datei plugins.zip lokal zu erstellen.

### Schritt eins: Testen Sie benutzerdefinierte Plugins mit dem Amazon MWAA CLI Utility
<a name="configuring-dag-plugins-cli-utility"></a>
+ Das Befehlszeilenschnittstellenprogramm (CLI) repliziert eine Amazon Managed Workflows for Apache Airflow Airflow-Umgebung lokal.
+ Die CLI erstellt lokal ein Docker-Container-Image, das einem Amazon MWAA-Produktionsimage ähnelt. Sie können damit eine lokale Apache Airflow Airflow-Umgebung ausführen, um benutzerdefinierte Plugins und Abhängigkeiten zu entwickeln und zu testen DAGs, bevor Sie sie auf Amazon MWAA bereitstellen.
+ Informationen zum Ausführen der CLI finden Sie unter [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)on GitHub.

### Schritt zwei: Erstellen Sie die Datei plugins.zip
<a name="configuring-dag-plugins-zip"></a>

Sie können ein integriertes ZIP-Archivierungsprogramm oder ein anderes ZIP-Hilfsprogramm (z. B. [7zip](https://www.7-zip.org/download.html)) verwenden, um eine ZIP-Datei zu erstellen.

**Anmerkung**  
Das integrierte ZIP-Hilfsprogramm für Windows OS fügt möglicherweise Unterordner hinzu, wenn Sie eine ZIP-Datei erstellen. Wir empfehlen, den Inhalt der Datei plugins.zip vor dem Hochladen in Ihren Amazon S3 S3-Bucket zu überprüfen, um sicherzustellen, dass keine zusätzlichen Verzeichnisse hinzugefügt wurden.

1. Wechseln Sie zu den Verzeichnissen in Ihr lokales Airflow-Plugin-Verzeichnis. Zum Beispiel:

   ```
   myproject$ cd plugins
   ```

1. Führen Sie den folgenden Befehl aus, um sicherzustellen, dass der Inhalt über Ausführungsberechtigungen verfügt (nur macOS und Linux).

   ```
   plugins$ chmod -R 755 .
   ```

1. Komprimieren Sie den Inhalt **Ihres** `plugins` Ordners.

   ```
   plugins$ zip -r plugins.zip .
   ```

## Auf Amazon `plugins.zip` S3 hochladen
<a name="configuring-dag-plugins-upload"></a>

Sie können die Amazon S3 S3-Konsole oder die AWS Command Line Interface (AWS CLI) verwenden, um eine `plugins.zip` Datei in Ihren Amazon S3 S3-Bucket hochzuladen.

### Mit dem AWS CLI
<a name="configuring-dag-plugins-upload-cli"></a>

The AWS Command Line Interface (AWS CLI) ist ein Open-Source-Tool, mit dem Sie mithilfe von Befehlen in Ihrer Befehlszeilen-Shell mit AWS Diensten interagieren können. Um die Schritte auf dieser Seite abzuschließen, benötigen Sie Folgendes:
+ [AWS CLI — Installieren Sie Version 2.](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)
+ [AWS CLI — Schnelle Konfiguration mit `aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).

**Zum Hochladen mit dem AWS CLI**

1. Navigieren Sie in der Befehlszeile zu dem Verzeichnis, in dem Ihre `plugins.zip` Datei gespeichert ist. Zum Beispiel:

   ```
   cd plugins
   ```

1. Verwenden Sie den folgenden Befehl, um alle Ihre Amazon S3 S3-Buckets aufzulisten.

   ```
   aws s3 ls
   ```

1. Verwenden Sie den folgenden Befehl, um die Dateien und Ordner im Amazon S3 S3-Bucket für Ihre Umgebung aufzulisten.

   ```
   aws s3 ls s3://YOUR_S3_BUCKET_NAME
   ```

1. Verwenden Sie den folgenden Befehl, um die `plugins.zip` Datei in den Amazon S3 S3-Bucket für Ihre Umgebung hochzuladen.

   ```
   aws s3 cp plugins.zip s3://amzn-s3-demo-bucket/plugins.zip
   ```

### Verwenden der Amazon S3-Konsole
<a name="configuring-dag-plugins-upload-console"></a>

Die Amazon S3 S3-Konsole ist eine webbasierte Benutzeroberfläche, mit der Sie die Ressourcen in Ihrem Amazon S3 S3-Bucket erstellen und verwalten können.

**Um mit der Amazon S3 S3-Konsole hochzuladen**

1. Öffnen Sie die Seite [Umgebungen](https://console.aws.amazon.com/mwaa/home#/environments) auf der Amazon MWAA-Konsole.

1. Wählen Sie eine Umgebung aus.

1. Wählen Sie im Bereich **DAG-Code im Bereich S3** **den Link S3-Bucket** aus, um Ihren Speicher-Bucket in der Konsole zu öffnen.

1. Klicken Sie auf **Upload**.

1. Wählen **Sie Datei hinzufügen**.

1. Wählen Sie die lokale Kopie Ihres aus `plugins.zip` und wählen Sie **Hochladen**.

## Installation benutzerdefinierter Plugins in Ihrer Umgebung
<a name="configuring-dag-plugins-mwaa-installing"></a>

In diesem Abschnitt wird beschrieben, wie Sie die benutzerdefinierten Plugins, die Sie in Ihren Amazon S3 S3-Bucket hochgeladen haben, installieren, indem Sie bei jeder Aktualisierung der ZIP-Datei den Pfad zur Datei plugins.zip und die Version der Datei plugins.zip angeben.

### Angeben des Pfads zu `plugins.zip` auf der Amazon MWAA-Konsole (beim ersten Mal)
<a name="configuring-dag-plugins-mwaa-first"></a>

Wenn Sie zum ersten Mal einen `plugins.zip` in Ihren Amazon S3 S3-Bucket hochladen, müssen Sie auch den Pfad zu der Datei auf der Amazon MWAA-Konsole angeben. Sie müssen diesen Schritt nur einmal ausführen.

1. Öffnen Sie die Seite [Umgebungen](https://console.aws.amazon.com/mwaa/home#/environments) auf der Amazon MWAA-Konsole.

1. Wählen Sie eine Umgebung aus.

1. Wählen Sie **Bearbeiten** aus.

1. Wählen Sie im Bereich **DAG-Code in Amazon S3** **neben dem Feld **Plugins-Datei — optional** die Option S3 durchsuchen** aus.

1. Wählen Sie die `plugins.zip` Datei in Ihrem Amazon S3 S3-Bucket aus.

1. Wählen Sie **Choose (Auswählen)** aus.

1. Wählen Sie **Weiter**, **Umgebung aktualisieren**.

### Angabe der `plugins.zip` Version auf der Amazon MWAA-Konsole
<a name="configuring-dag-plugins-s3-mwaaconsole"></a>

Sie müssen die Version Ihrer `plugins.zip` Datei auf der Amazon MWAA-Konsole jedes Mal angeben, wenn Sie eine neue Version Ihrer Datei `plugins.zip` in Ihren Amazon S3 S3-Bucket hochladen. 

1. Öffnen Sie die Seite [Umgebungen](https://console.aws.amazon.com/mwaa/home#/environments) auf der Amazon MWAA-Konsole.

1. Wählen Sie eine Umgebung aus.

1. Wählen Sie **Bearbeiten** aus.

1. Wählen Sie im Bereich **DAG-Code in Amazon S3** eine `plugins.zip` Version aus der Dropdownliste aus.

1. Wählen Sie **Weiter** aus.

## Beispielhafte Anwendungsfälle für plugins.zip
<a name="configuring-dag-plugins-examples"></a>
+ Erfahren Sie in, wie Sie ein benutzerdefiniertes Plugin erstellen[Benutzerdefiniertes Plugin mit Apache Hive und Hadoop](samples-hive.md).
+ Erfahren Sie in, wie Sie ein benutzerdefiniertes Plugin erstellen[Benutzerdefiniertes Plugin zum Patchen PythonVirtualenvOperator ](samples-virtualenv.md).
+ Erfahren Sie in, wie Sie ein benutzerdefiniertes Plugin erstellen[Benutzerdefiniertes Plugin mit Oracle](samples-oracle.md).
+ Erfahren Sie in, wie Sie ein benutzerdefiniertes Plugin erstellen[Ändern der Zeitzone einer DAG auf Amazon MWAA](samples-plugins-timezone.md).

## Als nächstes
<a name="configuring-dag-plugins-next-up"></a>

Testen Sie Ihre DAGs benutzerdefinierten Plugins und Python-Abhängigkeiten lokal mit [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)on GitHub.