Membuat plugin khusus dengan Oracle - Amazon Managed Workflows for Apache Airflow

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membuat plugin khusus dengan Oracle

Contoh berikut memandu Anda melalui langkah-langkah untuk membuat plugin khusus menggunakan Oracle untuk Amazon MWAA dan dapat dikombinasikan dengan plugin dan binari khusus lainnya di file plugins.zip Anda.

Versi

Anda dapat menggunakan contoh kode pada halaman ini dengan Apache Airflow v2 di Python 3.10 dan Apache Airflowv3 di Python 3.11.

Prasyarat

Untuk menggunakan kode sampel di halaman ini, Anda memerlukan yang berikut:

Izin

Tidak diperlukan izin tambahan untuk menggunakan contoh kode di halaman ini.

Persyaratan

Untuk menggunakan kode sampel pada halaman ini, tambahkan dependensi berikut ke Anda. requirements.txt Untuk mempelajari lebih lanjut, lihatMenginstal dependensi Python.

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

Contoh kode

Langkah-langkah berikut menjelaskan cara membuat kode DAG yang akan menguji plugin kustom.

  1. Di prompt perintah Anda, arahkan ke direktori tempat kode DAG Anda disimpan. Misalnya:

    cd dags
  2. Salin isi contoh kode berikut dan simpan secara lokal sebagaioracle.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 )

Buat plugin kustom

Bagian ini menjelaskan cara mengunduh dependensi, membuat plugin kustom dan plugins.zip.

Unduh dependensi

Amazon MWAA akan mengekstrak konten plugins.zip ke dalam setiap penjadwal /usr/local/airflow/plugins Amazon MWAA dan wadah pekerja. Ini digunakan untuk menambahkan binari ke lingkungan Anda. Langkah-langkah berikut menjelaskan cara merakit file yang diperlukan untuk plugin kustom.

Tarik gambar wadah Amazon Linux
  1. Di command prompt Anda, tarik image container Amazon Linux, dan jalankan container secara lokal. Misalnya:

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

    Prompt perintah Anda dapat memanggil baris perintah bash. Misalnya:

    bash-4.2#
  2. Instal fasilitas asinkron I/O asli Linux (libaio).

    yum -y install libaio
  3. Biarkan jendela ini terbuka untuk langkah selanjutnya. Kami akan menyalin file-file berikut secara lokal:lib64/libaio.so.1,,lib64/libaio.so.1.0.0. lib64/libaio.so.1.0.1

Unduh folder klien
  1. Instal paket unzip secara lokal. Misalnya:

    sudo yum install unzip
  2. Buat oracle_plugin direktori. Misalnya:

    mkdir oracle_plugin cd oracle_plugin
  3. Gunakan perintah curl berikut untuk mendownload instantclient-basic-linux.x64-18.5.0.0.0dbru.zip dari Oracle Instant Client Downloads untuk Linux x86-64 (64-bit).

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

    unzip *.zip
Ekstrak file dari Docker
  1. Dalam prompt perintah baru, tampilkan dan tuliskan ID kontainer Docker Anda. Misalnya:

    docker container ls

    Prompt perintah Anda dapat mengembalikan semua kontainer dan mereka IDs. Misalnya:

    debc16fd6970
  2. Di oracle_plugin direktori Anda, ekstrak lib64/libaio.so.1.0.1 file lib64/libaio.so.1lib64/libaio.so.1.0.0,, ke instantclient_18_5 folder lokal. Misalnya:

    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/

Plugin Khusus

Apache Airflow akan mengeksekusi isi file Python di folder plugin saat startup. Ini digunakan untuk mengatur dan memodifikasi variabel lingkungan. Langkah-langkah berikut menjelaskan kode sampel untuk plugin kustom.

  • Salin isi contoh kode berikut dan simpan secara lokal sebagaienv_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

Langkah-langkah berikut menjelaskan cara membuatplugins.zip. Isi contoh ini dapat dikombinasikan dengan plugin dan binari Anda yang lain menjadi satu plugins.zip file.

Zip isi direktori plugin
  1. Di prompt perintah Anda, arahkan ke oracle_plugin direktori. Misalnya:

    cd oracle_plugin
  2. Zip instantclient_18_5 direktori di plugins.zip. Misalnya:

    zip -r ../plugins.zip ./

    Prompt perintah Anda menampilkan:

    oracle_plugin$ ls client.zip instantclient_18_5
  3. Hapus client.zip file. Misalnya:

    rm client.zip
Zip file env_var_plugin_oracle.py
  1. Tambahkan env_var_plugin_oracle.py file ke root plugins.zip. Misalnya:

    zip plugins.zip env_var_plugin_oracle.py
  2. plugins.zip Anda sekarang menyertakan yang berikut ini:

    env_var_plugin_oracle.py instantclient_18_5/

Opsi konfigurasi Airflow

Jika Anda menggunakan Apache Airflow v2, core.lazy_load_plugins : False tambahkan sebagai opsi konfigurasi Apache Airflow. Untuk mempelajari lebih lanjut, lihat Menggunakan opsi konfigurasi untuk memuat plugin di 2.

Apa selanjutnya?