

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

# Mengelola dependensi Python di requirements.txt
<a name="best-practices-dependencies"></a>

Topik ini menjelaskan cara menginstal dan mengelola dependensi Python dalam `requirements.txt` file untuk Amazon Managed Workflow untuk lingkungan Apache Airflow.

**Contents**
+ [Menguji DAG menggunakan utilitas Amazon MWAA CLI](#best-practices-dependencies-cli-utility)
+ [Menginstal dependensi Python menggunakan Format File PyPi.org Persyaratan](#best-practices-dependencies-different-ways)
  + [Opsi satu: Dependensi Python dari Indeks Paket Python](#best-practices-dependencies-pip-extras)
  + [Opsi dua: Roda Python (.whl)](#best-practices-dependencies-python-wheels)
    + [Menggunakan `file` plugins.zip pada bucket Amazon S3](#best-practices-dependencies-python-wheels-s3)
    + [Menggunakan file WHL yang dihosting di URL](#best-practices-dependencies-python-wheels-url)
    + [Membuat file WHL dari DAG](#best-practices-dependencies-python-wheels-dag)
  + [Opsi tiga: Dependensi Python yang dihosting di Repo Compliant PyPi/PEP-503 pribadi](#best-practices-dependencies-custom-auth-url)
+ [Mengaktifkan log di konsol Amazon MWAA](#best-practices-dependencies-troubleshooting-enable)
+ [Mengakses log di konsol CloudWatch Logs](#best-practices-dependencies-troubleshooting-view)
+ [Mengakses kesalahan di Apache Airflow UI](#best-practices-dependencies-troubleshooting-aa)
  + [Masuk ke Apache Airflow](#airflow-access-and-login)
+ [Contoh `skenario` requirements.txt](#best-practices-dependencies-ex-mix-match)

## Menguji DAG menggunakan utilitas Amazon MWAA CLI
<a name="best-practices-dependencies-cli-utility"></a>
+ Utilitas antarmuka baris perintah (CLI) mereplikasi Alur Kerja Terkelola Amazon untuk lingkungan Apache Airflow secara lokal.
+ CLI membangun image kontainer Docker secara lokal yang mirip dengan gambar produksi Amazon MWAA. Anda dapat menggunakan ini untuk menjalankan lingkungan Apache Airflow lokal untuk mengembangkan dan menguji DAG, plugin khusus, dan dependensi sebelum menerapkan ke Amazon MWAA.
+ Untuk menjalankan CLI, lihat [ aws-mwaa-docker-images on](https://github.com/aws/amazon-mwaa-docker-images). GitHub

## Menginstal dependensi Python menggunakan Format File PyPi.org Persyaratan
<a name="best-practices-dependencies-different-ways"></a>

Bagian berikut menjelaskan berbagai cara untuk menginstal dependensi Python sesuai dengan Format [ File PyPi.org ](https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format) Persyaratan.

### Opsi satu: Dependensi Python dari Indeks Paket Python
<a name="best-practices-dependencies-pip-extras"></a>

Bagian berikut menjelaskan cara menentukan dependensi Python dari Indeks Paket [ Python ](https://pypi.org/) dalam `requirements.txt` file.

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

1. **Uji secara lokal**. Tambahkan pustaka tambahan secara berulang untuk menemukan kombinasi paket yang tepat dan versinya, sebelum membuat `requirements.txt` file. Untuk menjalankan utilitas Amazon MWAA CLI, lihat [ aw ](https://github.com/aws/amazon-mwaa-docker-images) s-mwaa-docker-images on. GitHub

1. **Tinjau tambahan paket Apache Airflow**. Untuk mengakses daftar paket yang diinstal untuk Apache Airflow v3 di Amazon MWAA, lihat [ aws-mwa `requirements.txt`](https://github.com/aws/amazon-mwaa-docker-images/blob/main/requirements.txt) a-docker-images di situs web. GitHub 

1. **Tambahkan pernyataan kendala**. Tambahkan file batasan untuk lingkungan Apache Airflow v3 Anda di bagian atas `requirements.txt` file Anda. File batasan Apache Airflow menentukan versi penyedia yang tersedia pada saat rilis Apache Airflow.

    Dalam contoh berikut, ganti {{{Airflow-version}}} dengan nomor versi lingkungan Anda, dan {{{Python-version}}} dengan versi Python yang kompatibel dengan lingkungan Anda. 

    Untuk informasi tentang versi Python yang kompatibel dengan lingkungan Apache Airflow Anda, lihat Versi [ Apache Airflow](airflow-versions.md#airflow-versions-official). 

   ```
   --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{{{Airflow-version}}}/constraints-{{{Python-version}}}.txt"
   ```

    Jika file batasan menentukan bahwa `xyz==1.0` paket tidak kompatibel dengan paket lain di lingkungan Anda, `pip3 install` gagal mencegah pustaka yang tidak kompatibel diinstal ke lingkungan Anda. Jika penginstalan gagal untuk paket apa pun, Anda dapat mengakses log kesalahan untuk setiap komponen Apache Airflow (penjadwal, pekerja, dan server web) di aliran log yang sesuai di CloudWatch Log. Untuk informasi selengkapnya tentang jenis log, lihat[Mengakses log Aliran Udara di Amazon CloudWatch](monitoring-airflow.md). 

1. **Paket Apache Airflow**. Tambahkan [ paket ekstra ](http://airflow.apache.org/docs/apache-airflow/3.3.1/extra-packages-ref.html) dan versi (`==`). Ini membantu mencegah paket dengan nama yang sama, tetapi versi yang berbeda, tidak diinstal di lingkungan Anda.

   ```
   apache-airflow[package-extra]==3.3.1
   ```

1. **Pustaka Python**. Tambahkan nama paket dan version (`==`) dalam `requirements.txt` file Anda. Ini membantu [ PyPi.org ](https://pypi.org) mencegah pembaruan yang rusak di masa mendatang agar tidak diterapkan secara otomatis.

   ```
   {{library}} == {{version}}
   ```  
**Example Boto3 dan psycopg2-biner**  

   Contoh ini disediakan untuk tujuan demonstrasi. Pustaka psycopg2-binary disertakan dengan instalasi dasar untuk Apache Airflow v3 dan tidak perlu ditentukan dalam file. `requirements.txt`

   ```
   boto3==1.43.56
   botocore==1.43.56
   psycopg2-binary==2.9.12
   ```

   Jika paket ditentukan tanpa versi, Amazon MWAA menginstal versi terbaru paket dari [ PyPi.org](https://pypi.org). Versi ini dapat bertentangan dengan paket lain di Anda`requirements.txt`.

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

1. **Uji secara lokal**. Tambahkan pustaka tambahan secara berulang untuk menemukan kombinasi paket yang tepat dan versinya, sebelum membuat `requirements.txt` file. Untuk menjalankan utilitas Amazon MWAA CLI, lihat [ aw ](https://github.com/aws/amazon-mwaa-docker-images) s-mwaa-docker-images on. GitHub

1. **Tinjau tambahan paket Apache Airflow**. Untuk mengakses daftar paket yang diinstal untuk Apache Airflow v2 di Amazon MWAA, akses [ aws-mwa `requirements.txt`](https://github.com/aws/amazon-mwaa-docker-images/blob/main/requirements.txt) a-docker-images di situs web. GitHub 

1. **Tambahkan pernyataan kendala**. Tambahkan file batasan untuk lingkungan Apache Airflow v2 Anda di bagian atas `requirements.txt` file Anda. File batasan Apache Airflow menentukan versi penyedia yang tersedia pada saat rilis Apache Airflow.

    Dimulai dengan Apache Airflow v2.7.2, file persyaratan Anda harus menyertakan `--constraint` pernyataan. Jika Anda tidak memberikan batasan, Amazon MWAA akan menentukan satu untuk Anda untuk memastikan paket yang tercantum dalam persyaratan Anda kompatibel dengan versi Apache Airflow yang Anda gunakan. 

   Dalam contoh berikut, ganti {{{Airflow-version}}} dengan nomor versi lingkungan Anda, dan {{{Python-version}}} dengan versi Python yang kompatibel dengan lingkungan Anda.

   Untuk informasi tentang versi Python yang kompatibel dengan lingkungan Apache Airflow Anda, lihat Versi [ Apache Airflow](airflow-versions.md#airflow-versions-official).

   ```
   --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{{{Airflow-version}}}/constraints-{{{Python-version}}}.txt"
   ```

   Jika file batasan menentukan bahwa `xyz==1.0` paket tidak kompatibel dengan paket lain di lingkungan Anda, `pip3 install` gagal mencegah pustaka yang tidak kompatibel diinstal ke lingkungan Anda. Jika penginstalan gagal untuk paket apa pun, Anda dapat mengakses log kesalahan untuk setiap komponen Apache Airflow (penjadwal, pekerja, dan server web) di aliran log yang sesuai di CloudWatch Log. Untuk informasi selengkapnya tentang jenis log, lihat[Mengakses log Aliran Udara di Amazon CloudWatch](monitoring-airflow.md).

1. **Paket Apache Airflow**. Tambahkan [ paket ekstra ](http://airflow.apache.org/docs/apache-airflow/2.5.1/extra-packages-ref.html) dan versi (`==`). Ini membantu mencegah paket dengan nama yang sama, tetapi versi yang berbeda, tidak diinstal di lingkungan Anda.

   ```
   apache-airflow[package-extra]==2.5.1
   ```

1. **Pustaka Python**. Tambahkan nama paket dan version (`==`) dalam `requirements.txt` file Anda. Ini membantu [ PyPi.org ](https://pypi.org) mencegah pembaruan yang rusak di masa mendatang agar tidak diterapkan secara otomatis.

   ```
   {{library}} == {{version}}
   ```  
**Example Boto3 dan psycopg2-biner**  

   Contoh ini disediakan untuk tujuan demonstrasi. Pustaka boto dan psycopg2-binary disertakan dengan instalasi dasar Apache Airflow v2 dan tidak perlu ditentukan dalam file. `requirements.txt`

   ```
   boto3==1.17.54
   boto==2.49.0
   botocore==1.20.54
   psycopg2-binary==2.8.6
   ```

   Jika paket ditentukan tanpa versi, Amazon MWAA menginstal versi terbaru paket dari [ PyPi.org](https://pypi.org). Versi ini dapat bertentangan dengan paket lain di Anda`requirements.txt`.

------

### Opsi dua: Roda Python (.whl)
<a name="best-practices-dependencies-python-wheels"></a>

Roda Python adalah format paket yang dirancang untuk mengirimkan perpustakaan dengan artefak yang dikompilasi. Ada beberapa manfaat paket roda sebagai metode untuk menginstal dependensi di Amazon MWAA:
+ **Instalasi lebih cepat ** - file WHL disalin ke wadah sebagai satu ZIP, dan kemudian diinstal secara lokal, tanpa harus mengunduh masing-masing.
+ **Lebih sedikit konflik ** — Anda dapat menentukan kompatibilitas versi untuk paket Anda terlebih dahulu. Akibatnya, tidak perlu untuk secara rekur `pip` sif mengerjakan versi yang kompatibel.
+ **Ketahanan yang lebih ** besar — Dengan pustaka yang dihosting secara eksternal, persyaratan hilir dapat berubah, mengakibatkan ketidakcocokan versi antar wadah di lingkungan Amazon MWAA. Dengan tidak bergantung pada sumber eksternal untuk dependensi, setiap wadah akan memiliki pustaka yang sama terlepas dari kapan setiap wadah dibuat instansiasi.

Kami merekomendasikan metode berikut untuk menginstal dependensi Python dari arsip roda Python (`.whl`) di file Anda`requirements.txt`.

**Topics**
+ [Menggunakan `file` plugins.zip pada bucket Amazon S3](#best-practices-dependencies-python-wheels-s3)
+ [Menggunakan file WHL yang dihosting di URL](#best-practices-dependencies-python-wheels-url)
+ [Membuat file WHL dari DAG](#best-practices-dependencies-python-wheels-dag)

#### Menggunakan `file` plugins.zip pada bucket Amazon S3
<a name="best-practices-dependencies-python-wheels-s3"></a>

Penjadwal Apache Airflow, pekerja, dan server web (untuk Apache Airflow v2.2.2 dan yang lebih baru) mencari plugin khusus selama startup pada wadah Fargate yang AWS dikelola untuk lingkungan Anda di. `/usr/local/airflow/plugins/{{*}}` Proses ini dimulai sebelum Amazon MWAA `pip3 install -r requirements.txt` untuk dependensi Python dan startup layanan Apache Airflow. `plugins.zip`File dapat digunakan untuk file apa pun yang Anda tidak ingin terus diubah selama eksekusi lingkungan, atau yang Anda tidak ingin memberikan akses kepada pengguna yang menulis DAG. Misalnya, file roda perpustakaan Python, file PEM sertifikat, dan file YAML konfigurasi.

Bagian berikut menjelaskan cara memasang roda yang ada di `plugins.zip` file di bucket Amazon S3 Anda.

1. **Unduh file WHL yang diperlukan ** Anda dapat menggunakannya [`pip download`](https://pip.pypa.io/en/stable/cli/pip_download/) dengan yang ada `requirements.txt` di Amazon MWAA [ aws-mwaa-docker-images ](https://github.com/aws/amazon-mwaa-docker-images) atau [ wadah ](https://aws.amazon.com/amazon-linux-2) Amazon Linux 2 lainnya untuk menyelesaikan dan mengunduh file roda Python yang diperlukan.

   ```
   pip3 download -r "$AIRFLOW_HOME/dags/requirements.txt" -d "$AIRFLOW_HOME/plugins"
   cd "{{$AIRFLOW_HOME}}/plugins"
   zip "{{$AIRFLOW_HOME}}/plugins.zip" *
   ```

1. **Tentukan jalur di Anda `requirements.txt`**. Tentukan direktori plugin di bagian atas requirements.txt Anda menggunakan [`--find-links`](https://pip.pypa.io/en/stable/cli/pip_install/#install-find-links) dan menginstruksikan untuk `pip` tidak menginstal dari sumber lain menggunakan [`--no-index`](https://pip.pypa.io/en/stable/cli/pip_install/#install-no-index), seperti yang tercantum dalam kode berikut:

   ```
   --find-links /usr/local/airflow/plugins
   --no-index
   ```  
**Example roda di requirements.txt**  

   Contoh berikut mengasumsikan Anda telah mengunggah roda dalam `plugins.zip` file di root bucket Amazon S3 Anda. Contoh:

   ```
   --find-links /usr/local/airflow/plugins
   --no-index
   
   numpy
   ```

   Amazon MWAA mengambil `numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl` roda dari `plugins` folder dan menginstalnya di lingkungan Anda.

#### Menggunakan file WHL yang dihosting di URL
<a name="best-practices-dependencies-python-wheels-url"></a>

Bagian berikut menjelaskan cara memasang roda yang dihosting di URL. URL harus dapat diakses publik, atau dapat diakses dari dalam Amazon VPC khusus yang Anda tentukan untuk lingkungan Amazon MWAA Anda.
+ **Berikan URL**. Berikan URL ke roda di Anda`requirements.txt`.  
**Example arsip roda pada URL publik**  

  Contoh berikut mengunduh roda dari situs publik.

  ```
  --find-links https://files.pythonhosted.org/packages/
  --no-index
  ```

  Amazon MWAA mengambil roda dari URL yang Anda tentukan dan menginstalnya di lingkungan Anda.
**catatan**  
URL tidak dapat diakses dari persyaratan pemasangan server web pribadi di Amazon MWAA v2.2.2 dan yang lebih baru.

#### Membuat file WHL dari DAG
<a name="best-practices-dependencies-python-wheels-dag"></a>

Jika Anda memiliki ** lingkungan jaringan ** pribadi menggunakan Apache Airflow v2.2.2 atau yang lebih baru dan Anda tidak dapat menginstal persyaratan karena lingkungan Anda tidak memiliki akses ke repositori eksternal, Anda dapat menggunakan DAG berikut untuk mengambil persyaratan Amazon MWAA yang ada dan mengemasnya di Amazon S3:

```
from airflow import DAG
 from airflow.operators.bash_operator import BashOperator
 from airflow.utils.dates import days_ago
					
 S3_BUCKET = 'my-s3-bucket'
 S3_KEY = 'backup/plugins_whl.zip' 
					
 with DAG(dag_id="create_whl_file", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag:
 cli_command = BashOperator(
 task_id="bash_command",
 bash_command=f"mkdir /tmp/whls;pip3 download -r /usr/local/airflow/requirements/requirements.txt -d /tmp/whls;zip -j /tmp/plugins.zip /tmp/whls/*;aws s3 cp /tmp/plugins.zip s3://{S3_BUCKET}/{S3_KEY}"
)
```

Setelah menjalankan DAG, gunakan file baru ini sebagai Amazon MWAA Anda, secara opsional`plugins.zip`, dikemas dengan plugin lain. Kemudian, perbarui Anda yang `requirements.txt` didahului oleh `--find-links /usr/local/airflow/plugins` dan `--no-index` tanpa menambahkan`--constraint`.

Metode ini dapat Anda gunakan untuk menggunakan pustaka yang sama secara offline.

### Opsi tiga: Dependensi Python yang dihosting di Repo Compliant PyPi/PEP-503 pribadi
<a name="best-practices-dependencies-custom-auth-url"></a>

Bagian berikut menjelaskan cara menginstal tambahan Apache Airflow yang dihosting di URL pribadi dengan otentikasi.

1. Tambahkan nama pengguna dan kata sandi Anda sebagai opsi konfigurasi [ Apache Airflow](configuring-env-variables.md). Contoh:
   + `foo.user` : `{{YOUR_USER_NAME}}`
   + `foo.pass` : `{{YOUR_PASSWORD}}`

1. Buat `requirements.txt` file Anda. Ganti placeholder dalam contoh berikut dengan URL pribadi Anda, dan nama pengguna dan kata sandi yang telah Anda tambahkan sebagai opsi konfigurasi [ Apache Airflow. ](configuring-env-variables.md) Contoh:

   ```
   --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
   ```

1. Tambahkan pustaka tambahan apa pun ke `requirements.txt` file Anda. Contoh:

   ```
   --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
   my-private-package==1.2.3
   ```

## Mengaktifkan log di konsol Amazon MWAA
<a name="best-practices-dependencies-troubleshooting-enable"></a>

Per [ an eksekusi ](mwaa-create-role.md) untuk lingkungan Amazon MWAA Anda memerlukan izin untuk mengirim CloudWatch log ke Log. Untuk memperbarui izin peran eksekusi, lihat[Peran eksekusi Amazon MWAA](mwaa-create-role.md).

Anda dapat mengaktifkan log Apache Airflow di `CRITICAL` level `INFO``WARNING`,`ERROR`,, atau. Saat Anda memilih tingkat log, Amazon MWAA mengirimkan log untuk tingkat itu dan semua tingkat keparahan yang lebih tinggi. Misalnya, jika Anda mengaktifkan log di `INFO` level tersebut, Amazon MWAA mengirimkan `INFO` log dan`WARNING`,`ERROR`, dan level `CRITICAL` CloudWatch log ke Log. Sebaiknya aktifkan log Apache Airflow di `INFO` level agar penjadwal mengakses log yang diterima untuk. `requirements.txt`

![Gambar ini menggambarkan cara mengaktifkan log di tingkat INFO.](https://docs.aws.amazon.com/id_id/mwaa/latest/userguide/images/mwaa-console-logs-info.png)


## Mengakses log di konsol CloudWatch Logs
<a name="best-practices-dependencies-troubleshooting-view"></a>

Anda dapat mengakses log Apache Airflow untuk penjadwal yang menjadwalkan alur kerja Anda dan mengurai folder Anda. `dags` Langkah-langkah berikut menjelaskan cara membuka grup log untuk penjadwal di konsol Amazon MWAA, dan mengakses log Apache Airflow di konsol CloudWatch Logs.

**Untuk mengakses log untuk `requirements.txt`**

1. Buka [ halaman ](https://console.aws.amazon.com/mwaa/home#/environments) Lingkungan di konsol Amazon MWAA.

1. Pilih lingkungan.

1. Pilih grup log penjadwal ** aliran udara ** di ** panel ** Monitoring.

1. Pilih aliran `requirements_install_ip` ** log masuk**.

1. Lihat daftar paket yang diinstal pada lingkungan di`/usr/local/airflow/.local/bin`. Contoh:

   ```
   Collecting appdirs==1.4.4 (from -r /usr/local/airflow/.local/bin (line 1))
   Downloading https://files.pythonhosted.org/packages/3b/00/2344469e2084fb28kjdsfiuyweb47389789vxbmnbjhsdgf5463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl  
   Collecting astroid==2.4.2 (from -r /usr/local/airflow/.local/bin (line 2))
   ```

1. Tinjau daftar paket dan apakah salah satu dari ini mengalami kesalahan selama instalasi. Jika terjadi kesalahan, Anda bisa mendapatkan kesalahan yang mirip dengan berikut ini:

   ```
   2021-03-05T14:34:42.731-07:00
   No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))
   No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))
   ```

## Mengakses kesalahan di Apache Airflow UI
<a name="best-practices-dependencies-troubleshooting-aa"></a>

Anda juga dapat memeriksa UI Apache Airflow Anda untuk mengidentifikasi apakah kesalahan terkait dengan masalah lain. Kesalahan paling umum yang dapat Anda temui dengan Apache Airflow di Amazon MWAA adalah:

```
Broken DAG: No module named {{x}}
```

Jika Anda menemukan kesalahan ini di UI Apache Airflow Anda, kemungkinan Anda kehilangan ketergantungan yang diperlukan dalam `requirements.txt` file Anda.

### Masuk ke Apache Airflow
<a name="airflow-access-and-login"></a>

Anda memerlukan [Kebijakan akses UI Apache Airflow: AmazonMWAAWebServerAccess](access-policies.md#web-ui-access) izin untuk Akun AWS in AWS Identity and Access Management (IAM) Anda untuk mengakses UI Apache Airflow Anda.

**Untuk mengakses UI Apache Airflow Anda**

1. Buka [ halaman ](https://console.aws.amazon.com/mwaa/home#/environments) Lingkungan di konsol Amazon MWAA.

1. Pilih lingkungan.

1. Pilih ** Open Airflow UI**.

## Contoh `skenario` requirements.txt
<a name="best-practices-dependencies-ex-mix-match"></a>

Anda dapat mencampur dan mencocokkan format yang berbeda di format Anda`requirements.txt`. Contoh berikut menggunakan kombinasi berbagai cara untuk menginstal ekstra.

**Example Ekstra aktif PyPi.org dan URL publik**  
Anda perlu menggunakan `--index-url` opsi saat menentukan paket dari PyPi.org, selain paket pada URL publik, seperti URL repo kustom yang sesuai dengan PEP 503.  

```
aws-batch == 0.6
				phoenix-letter >= 0.3
				
				--index-url http://dist.repoze.org/zope2/2.10/simple
				zopelib
```