

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.

# Ein benutzerdefiniertes Plugin mit Oracle erstellen
<a name="samples-oracle"></a>

Das folgende Beispiel führt Sie durch die Schritte zum Erstellen eines benutzerdefinierten Plugins mit Oracle for Amazon MWAA, das mit anderen benutzerdefinierten Plugins und Binärdateien in Ihrer Datei plugins.zip kombiniert werden kann.

**Contents**
+ [Version](#samples-oracle-version)
+ [Voraussetzungen](#samples-oracle-prereqs)
+ [Berechtigungen](#samples-oracle-permissions)
+ [Voraussetzungen](#samples-oracle-dependencies)
+ [Codebeispiel](#samples-oracle-code)
+ [Erstellen Sie das benutzerdefinierte Plugin](#samples-oracle-create-pluginszip-steps)
  + [Laden Sie Abhängigkeiten herunter](#samples-oracle-install)
  + [Benutzerdefiniertes Plug-in](#samples-oracle-plugins-code)
  + [Plugins.zip](#samples-oracle-pluginszip)
+ [Konfigurationsoptionen für Airflow](#samples-oracle-airflow-config)
+ [Als nächstes](#samples-oracle-next-up)

## Version
<a name="samples-oracle-version"></a>

[Sie können das Codebeispiel auf dieser Seite mit **Apache Airflow v2** in [Python 3.10](https://peps.python.org/pep-0619/) und **Apache Airflow v3** in Python 3.11 verwenden.](https://peps.python.org/pep-0664/)

## Voraussetzungen
<a name="samples-oracle-prereqs"></a>

Um den Beispielcode auf dieser Seite zu verwenden, benötigen Sie Folgendes:
+ Eine [Amazon MWAA-Umgebung](get-started.md).
+ Die Worker-Protokollierung ist auf jeder Protokollebene `CRITICAL` oder im vorherigen Abschnitt für Ihre Umgebung aktiviert. Weitere Informationen zu Amazon MWAA-Protokolltypen und zur Verwaltung Ihrer Protokollgruppen finden Sie unter [Zugreifen auf Airflow-Protokolle in Amazon CloudWatch](monitoring-airflow.md)

## Berechtigungen
<a name="samples-oracle-permissions"></a>

Für die Verwendung des Codebeispiels auf dieser Seite sind keine zusätzlichen Berechtigungen erforderlich.

## Voraussetzungen
<a name="samples-oracle-dependencies"></a>

Um den Beispielcode auf dieser Seite zu verwenden, fügen Sie Ihrem die folgenden Abhängigkeiten hinzu`requirements.txt`. Weitere Informationen finden Sie unter[Python-Abhängigkeiten installieren](working-dags-dependencies.md).

```
-c https://raw.githubusercontent.com/apache/airflow/constraints-2.0.2/constraints-3.7.txt
cx_Oracle
apache-airflow-providers-oracle
```

## Codebeispiel
<a name="samples-oracle-code"></a>

In den folgenden Schritten wird beschrieben, wie Sie den DAG-Code erstellen, mit dem das benutzerdefinierte Plugin getestet wird.

1. Navigieren Sie in der Befehlszeile zu dem Verzeichnis, in dem Ihr DAG-Code gespeichert ist. Beispiel:

   ```
   cd dags
   ```

1. Kopieren Sie den Inhalt des folgenden Codebeispiels und speichern Sie ihn lokal unter`oracle.py`.

   ```
   from airflow import DAG
   from airflow.operators.python_operator import PythonOperator
   from airflow.utils.dates import days_ago
   import os
   import cx_Oracle
   
   DAG_ID = os.path.basename(__file__).replace(".py", "")
   
   def testHook(**kwargs):
       cx_Oracle.init_oracle_client()
       version = cx_Oracle.clientversion()
       print("cx_Oracle.clientversion",version)
       return version
   
   with DAG(dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag:
       hook_test = PythonOperator(
           task_id="hook_test",
           python_callable=testHook,
           provide_context=True 
       )
   ```

## Erstellen Sie das benutzerdefinierte Plugin
<a name="samples-oracle-create-pluginszip-steps"></a>

In diesem Abschnitt wird beschrieben, wie Sie die Abhängigkeiten herunterladen, das benutzerdefinierte Plugin und die Datei plugins.zip erstellen.

### Laden Sie Abhängigkeiten herunter
<a name="samples-oracle-install"></a>

Amazon MWAA extrahiert den Inhalt von plugins.zip in jeden `/usr/local/airflow/plugins` Amazon MWAA-Scheduler und Worker-Container. Dies wird verwendet, um Binärdateien zu Ihrer Umgebung hinzuzufügen. In den folgenden Schritten wird beschrieben, wie Sie die für das benutzerdefinierte Plugin benötigten Dateien zusammenstellen.

**Rufen Sie das Amazon Linux-Container-Image ab**

1. Rufen Sie in Ihrer Befehlszeile das Amazon Linux-Container-Image ab und führen Sie den Container lokal aus. Beispiel:

   ```
   docker pull amazonlinux
   						docker run -it amazonlinux:latest /bin/bash
   ```

   Ihre Eingabeaufforderung kann eine Bash-Befehlszeile aufrufen. Beispiel:

   ```
   bash-4.2#
   ```

1. Installieren Sie die native asynchrone I/O Linux-Einrichtung (libaio).

   ```
   yum -y install libaio
   ```

1. Lassen Sie dieses Fenster für nachfolgende Schritte geöffnet. Wir werden die folgenden Dateien lokal kopieren:`lib64/libaio.so.1`,`lib64/libaio.so.1.0.0`,`lib64/libaio.so.1.0.1`.

**Laden Sie den Kundenordner herunter**

1. Installieren Sie das Entpackungspaket lokal. Beispiel:

   ```
   sudo yum install unzip
   ```

1. Erstellen Sie ein `oracle_plugin`-Verzeichnis. Beispiel:

   ```
   mkdir oracle_plugin
   cd oracle_plugin
   ```

1. [Verwenden Sie den folgenden curl-Befehl, um die [instantclient-basic-linuxDatei .x64-18.5.0.0.0dbru.zip](https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip) von Oracle Instant Client Downloads für Linux x86-64 (64-Bit) herunterzuladen.](https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html)

   ```
   curl https://download.oracle.com/otn_software/linux/instantclient/185000/instantclient-basic-linux.x64-18.5.0.0.0dbru.zip > client.zip
   ```

1. Entpacken Sie die Datei `client.zip`. Beispiel:

   ```
   unzip *.zip
   ```

**Extrahieren Sie Dateien aus Docker**

1. Zeigen Sie in einer neuen Befehlszeile Ihre Docker-Container-ID an und notieren Sie sie. Beispiel:

   ```
   docker container ls
   ```

   Ihre Eingabeaufforderung kann alle Container und ihre IDs zurückgeben. Beispiel:

   ```
   debc16fd6970
   ```

1. Extrahieren Sie in Ihrem `oracle_plugin` Verzeichnis die `lib64/libaio.so.1``lib64/libaio.so.1.0.0`,, `lib64/libaio.so.1.0.1` Dateien in den lokalen `instantclient_18_5` Ordner. Beispiel:

   ```
   docker cp debc16fd6970:/lib64/libaio.so.1 instantclient_18_5/
   docker cp debc16fd6970:/lib64/libaio.so.1.0.0 instantclient_18_5/
   docker cp debc16fd6970:/lib64/libaio.so.1.0.1 instantclient_18_5/
   ```

### Benutzerdefiniertes Plug-in
<a name="samples-oracle-plugins-code"></a>

Apache Airflow führt beim Start den Inhalt der Python-Dateien im Plugins-Ordner aus. Dies wird verwendet, um Umgebungsvariablen festzulegen und zu ändern. In den folgenden Schritten wird der Beispielcode für das benutzerdefinierte Plugin beschrieben.
+ Kopieren Sie den Inhalt des folgenden Codebeispiels und speichern Sie ihn lokal unter`env_var_plugin_oracle.py`.

  ```
  from airflow.plugins_manager import AirflowPlugin
  import os
  
  os.environ["LD_LIBRARY_PATH"]='/usr/local/airflow/plugins/instantclient_18_5'
  os.environ["DPI_DEBUG_LEVEL"]="64"
  
  class EnvVarPlugin(AirflowPlugin):                
      name = 'env_var_plugin'
  ```

### Plugins.zip
<a name="samples-oracle-pluginszip"></a>

In den folgenden Schritten wird erklärt, wie Sie das erstellen`plugins.zip`. Der Inhalt dieses Beispiels kann mit Ihren anderen Plugins und Binärdateien in einer einzigen `plugins.zip` Datei kombiniert werden.

**Den Inhalt des Plugin-Verzeichnisses komprimieren**

1. Navigieren Sie in der Befehlszeile zu dem `oracle_plugin` Verzeichnis. Beispiel:

   ```
   cd oracle_plugin
   ```

1. Komprimieren Sie das `instantclient_18_5` Verzeichnis in der Datei plugins.zip. Beispiel:

   ```
   zip -r ../plugins.zip ./
   ```

   Ihre Eingabeaufforderung zeigt an:

   ```
   oracle_plugin$ ls
   client.zip		instantclient_18_5
   ```

1. Entfernen Sie die `client.zip` Datei. Beispiel:

   ```
   rm client.zip
   ```

**Komprimieren Sie die Datei env\$1var\$1plugin\$1oracle.py**

1. Fügen Sie die `env_var_plugin_oracle.py` Datei dem Stammverzeichnis der Datei plugins.zip hinzu. Beispiel:

   ```
   zip plugins.zip env_var_plugin_oracle.py
   ```

1. Ihre Datei plugins.zip enthält jetzt Folgendes:

   ```
   env_var_plugin_oracle.py
   instantclient_18_5/
   ```

## Konfigurationsoptionen für Airflow
<a name="samples-oracle-airflow-config"></a>

Wenn Sie Apache Airflow v2 verwenden, fügen Sie es `core.lazy_load_plugins : False` als Apache Airflow Airflow-Konfigurationsoption hinzu. Weitere Informationen finden Sie unter [Verwenden von Konfigurationsoptionen zum Laden von Plugins in 2.](configuring-env-variables.md#configuring-2.0-airflow-override)

## Als nächstes
<a name="samples-oracle-next-up"></a>
+ Erfahren Sie unter, wie Sie die `requirements.txt` Datei in diesem Beispiel in Ihren Amazon S3 S3-Bucket hochladen[Python-Abhängigkeiten installieren](working-dags-dependencies.md).
+ Erfahren Sie unter, wie Sie den DAG-Code in diesem Beispiel in den `dags` Ordner in Ihrem Amazon S3 S3-Bucket hochladen[Hinzufügen oder Aktualisieren DAGs](configuring-dag-folder.md).
+ Weitere Informationen zum Hochladen der `plugins.zip` Datei in diesem Beispiel in Ihren Amazon S3 S3-Bucket finden Sie unter[Installation benutzerdefinierter Plugins](configuring-dag-import-plugins.md).