

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

# Membuat plugin khusus untuk Apache Airflow PythonVirtualenvOperator
<a name="samples-virtualenv"></a>

Contoh berikut menjelaskan cara menambal Apache `PythonVirtualenvOperator` Airflow dengan plugin khusus di Amazon Managed Workflows untuk Apache Airflow.

**Topics**
+ [Versi](#samples-virtualenv-version)
+ [Prasyarat](#samples-virtualenv-prereqs)
+ [Izin](#samples-virtualenv-permissions)
+ [Persyaratan](#samples-virtualenv-dependencies)
+ [Kode sampel plugin kustom](#samples-virtualenv-plugins-code)
+ [Plugins.zip](#samples-virtualenv-pluginszip)
+ [Contoh kode](#samples-virtualenv-code)
+ [Opsi konfigurasi Airflow](#samples-virtualenv-airflow-config)
+ [Apa selanjutnya?](#samples-virtualenv-next-up)

## Versi
<a name="samples-virtualenv-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-virtualenv-prereqs"></a>

Untuk menggunakan kode sampel di halaman ini, Anda memerlukan yang berikut:
+ Lingkungan [Amazon MWAA.](get-started.md)

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

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

## Persyaratan
<a name="samples-virtualenv-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).

```
virtualenv
```

## Kode sampel plugin kustom
<a name="samples-virtualenv-plugins-code"></a>

Apache Airflow akan mengeksekusi isi file Python di folder plugin saat startup. Plugin ini akan menambal built-in `PythonVirtualenvOperator` selama proses startup itu agar kompatibel dengan Amazon MWAA. Langkah-langkah berikut menampilkan kode sampel untuk plugin kustom.

1. Di prompt perintah Anda, arahkan ke `plugins` direktori di bagian sebelumnya. Misalnya:

   ```
   cd plugins
   ```

1. Salin isi contoh kode berikut dan simpan secara lokal sebagai`virtual_python_plugin.py`.

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

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

Langkah-langkah berikut menjelaskan cara membuat`plugins.zip`.

1. Di prompt perintah Anda, arahkan ke direktori yang berisi `virtual_python_plugin.py` di bagian sebelumnya. Misalnya:

   ```
   cd plugins
   ```

1. Zip konten di dalam `plugins` folder Anda.

   ```
   zip plugins.zip virtual_python_plugin.py
   ```

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

Langkah-langkah berikut menjelaskan cara membuat kode DAG untuk 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`virtualenv_test.py`.

   ```
   """
   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 import DAG
   from airflow.operators.python import PythonVirtualenvOperator
   from airflow.utils.dates import days_ago
   import os
   
   os.environ["PATH"] = os.getenv("PATH") + ":/usr/local/airflow/.local/bin"
   
   def virtualenv_fn():
       import boto3
       print("boto3 version ",boto3.__version__)
   
   with DAG(dag_id="virtualenv_test", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag:
       virtualenv_task = PythonVirtualenvOperator(
           task_id="virtualenv_task",
           python_callable=virtualenv_fn,
           requirements=["boto3>=1.17.43"],
           system_site_packages=False,
           dag=dag,
       )
   ```

## Opsi konfigurasi Airflow
<a name="samples-virtualenv-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-virtualenv-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)