

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
<a name="samples-oracle"></a>

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.

**Contents**
+ [Versi](#samples-oracle-version)
+ [Prasyarat](#samples-oracle-prereqs)
+ [Izin](#samples-oracle-permissions)
+ [Persyaratan](#samples-oracle-dependencies)
+ [Contoh kode](#samples-oracle-code)
+ [Buat plugin kustom](#samples-oracle-create-pluginszip-steps)
  + [Unduh dependensi](#samples-oracle-install)
  + [*Plugin*Khusus](#samples-oracle-plugins-code)
  + [Plugins.zip](#samples-oracle-pluginszip)
+ [Opsi konfigurasi Airflow](#samples-oracle-airflow-config)
+ [Apa selanjutnya?](#samples-oracle-next-up)

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

**[Anda dapat menggunakan contoh kode pada halaman ini dengan **Apache Airflow v2 di Python 3.10 dan Apache Airflow**[v3 di Python 3.11](https://peps.python.org/pep-0619/).](https://peps.python.org/pep-0664/)**

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

Untuk menggunakan kode sampel di halaman ini, Anda memerlukan yang berikut:
+ Lingkungan [Amazon MWAA.](get-started.md)
+ Pencatatan pekerja diaktifkan pada tingkat log apa pun, `CRITICAL` atau di bagian sebelumnya untuk lingkungan Anda. Untuk informasi selengkapnya tentang jenis log Amazon MWAA dan cara mengelola grup log Anda, lihat [Mengakses log Aliran Udara di Amazon CloudWatch](monitoring-airflow.md)

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

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

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

Untuk menggunakan kode sampel pada halaman ini, tambahkan dependensi berikut ke Anda. `requirements.txt` Untuk mempelajari lebih lanjut, lihat[Menginstal dependensi Python](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
```

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

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

1. Salin isi contoh kode berikut dan simpan secara lokal sebagai`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 
       )
   ```

## Buat plugin kustom
<a name="samples-oracle-create-pluginszip-steps"></a>

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

### Unduh dependensi
<a name="samples-oracle-install"></a>

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#
   ```

1. Instal fasilitas asinkron I/O asli Linux (libaio).

   ```
   yum -y install libaio
   ```

1. 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
   ```

1. Buat `oracle_plugin` direktori. Misalnya:

   ```
   mkdir oracle_plugin
   cd oracle_plugin
   ```

1. [Gunakan perintah curl berikut untuk mendownload [instantclient-basic-linux.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) dari Oracle Instant Client Downloads untuk Linux x86-64 (64-bit).](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. 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
   ```

1. Di `oracle_plugin` direktori Anda, ekstrak `lib64/libaio.so.1.0.1` file `lib64/libaio.so.1``lib64/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
<a name="samples-oracle-plugins-code"></a>

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 sebagai`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>

Langkah-langkah berikut menjelaskan cara membuat`plugins.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
   ```

1. 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
   ```

1. Hapus `client.zip` file. Misalnya:

   ```
   rm client.zip
   ```

**Zip file env\$1var\$1plugin\$1oracle.py**

1. Tambahkan `env_var_plugin_oracle.py` file ke root plugins.zip. Misalnya:

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

1. plugins.zip Anda sekarang menyertakan yang berikut ini:

   ```
   env_var_plugin_oracle.py
   instantclient_18_5/
   ```

## Opsi konfigurasi Airflow
<a name="samples-oracle-airflow-config"></a>

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](configuring-env-variables.md#configuring-2.0-airflow-override).

## Apa selanjutnya?
<a name="samples-oracle-next-up"></a>
+ Pelajari cara mengunggah `requirements.txt` file dalam contoh ini ke bucket Amazon S3 Anda. [Menginstal dependensi Python](working-dags-dependencies.md)
+ Pelajari cara mengunggah kode DAG dalam contoh ini ke `dags` folder di bucket Amazon S3 Anda. [Menambahkan atau memperbarui DAGs](configuring-dag-folder.md)
+ Pelajari lebih lanjut cara mengunggah `plugins.zip` file dalam contoh ini ke bucket Amazon S3 Anda. [Menginstal plugin kustom](configuring-dag-import-plugins.md)