Mengelola dependensi Python di requirements.txt - Amazon Managed Workflows for Apache Airflow (MWAA)

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

Halaman ini menjelaskan praktik terbaik yang kami sarankan untuk menginstal dan mengelola dependensi Python dalam file untuk lingkungan Alur Kerja Terkelola Amazon requirements.txt untuk Apache Airflow.

Pengujian DAGs menggunakan MWAA CLI utilitas Amazon

  • Utilitas antarmuka baris perintah (CLI) mereplikasi Alur Kerja Terkelola Amazon untuk lingkungan Apache Airflow secara lokal.

  • CLIMembangun image container Docker secara lokal yang mirip dengan image produksi AmazonMWAA. Ini memungkinkan Anda menjalankan lingkungan Apache Airflow lokal untuk mengembangkan dan mengujiDAGs, plugin khusus, dan dependensi sebelum menerapkan ke Amazon. MWAA

  • Untuk menjalankanCLI, lihat aws-mwaa-local-runnerdi GitHub.

Menginstal dependensi Python menggunakan PyPi Format File Persyaratan .org

Bagian berikut menjelaskan berbagai cara untuk menginstal dependensi Python sesuai dengan Format File Persyaratan PyPi .org.

Opsi satu: dependensi Python dari Indeks Paket Python

Bagian berikut menjelaskan cara menentukan dependensi Python dari Indeks Paket Python dalam sebuah file. requirements.txt

Apache Airflow v2
  1. Uji secara lokal. Tambahkan pustaka tambahan secara iteratif untuk menemukan kombinasi paket dan versinya yang tepat, sebelum membuat requirements.txt file. Untuk menjalankan MWAA CLI utilitas Amazon, lihat aws-mwaa-local-runnerdi GitHub.

  2. Tinjau paket tambahan Apache Airflow. Untuk melihat daftar paket yang diinstal untuk Apache Airflow v2 di AmazonMWAA, lihat Amazon MWAA local runner requirements.txt di situs web. GitHub

  3. Tambahkan pernyataan kendala. Tambahkan file kendala untuk lingkungan Apache Airflow v2 Anda di bagian atas file Anda. requirements.txt 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 pernyataan. --constraint Jika Anda tidak memberikan kendala, 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 {environment-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 Apache Airflow Versions.

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

    Jika file kendala menentukan bahwa xyz==1.0 paket tidak kompatibel dengan paket lain di lingkungan Anda, pip3 install akan gagal untuk mencegah pustaka yang tidak kompatibel diinstal ke lingkungan Anda. Jika instalasi gagal untuk paket apa pun, Anda dapat melihat log kesalahan untuk setiap komponen Apache Airflow (penjadwal, pekerja, dan server web) di aliran log yang sesuai di Log. CloudWatch Untuk informasi selengkapnya tentang jenis log, lihatMelihat log Aliran Udara di Amazon CloudWatch.

  4. Paket Apache Airflow. Tambahkan paket ekstra dan versi (==). Ini membantu mencegah paket dengan nama yang sama, tetapi versi yang berbeda, diinstal di lingkungan Anda.

    apache-airflow[package-extra]==2.5.1
  5. Pustaka Python. Tambahkan nama paket dan versi (==) di requirements.txt file Anda. Ini membantu mencegah pembaruan yang melanggar future PyPidari.org agar tidak diterapkan secara otomatis.

    library == version
    contoh Boto3 dan psycopg2-biner

    Contoh ini disediakan untuk tujuan demonstrasi. Pustaka biner boto dan psycopg2 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. Versi ini mungkin bertentangan dengan paket lain di Andarequirements.txt.

Apache Airflow v1
  1. Uji secara lokal. Tambahkan pustaka tambahan secara iteratif untuk menemukan kombinasi paket dan versinya yang tepat, sebelum membuat requirements.txt file. Untuk menjalankan MWAA CLI utilitas Amazon, lihat aws-mwaa-local-runnerdi GitHub.

  2. Tinjau paket tambahan Aliran Udara. Tinjau daftar paket yang tersedia untuk Apache Airflow v1.10.12 di airflow/constraints-1.10.12/constraints-3.7.txt. https://raw.githubusercontent.com/apache/

  3. Tambahkan file kendala. Tambahkan file kendala untuk Apache Airflow v1.10.12 ke bagian atas file Anda. requirements.txt Jika file kendala menentukan bahwa xyz==1.0 paket tidak kompatibel dengan paket lain di lingkungan Anda, file tersebut pip3 install akan gagal mencegah pustaka yang tidak kompatibel diinstal ke lingkungan Anda.

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.7.txt"
  4. Apache Airflow v1.10.12 paket. Tambahkan ekstra paket Airflow dan versi Apache Airflow v1.10.12 (). == Ini membantu mencegah paket dengan nama yang sama, tetapi versi yang berbeda, diinstal di lingkungan Anda.

    apache-airflow[package]==1.10.12
    contoh Shell Aman (SSH)

    Berikut contoh requirements.txt file menginstal SSH untuk Apache Airflow v1.10.12.

    apache-airflow[ssh]==1.10.12
  5. Pustaka Python. Tambahkan nama paket dan versi (==) di requirements.txt file Anda. Ini membantu mencegah pembaruan yang melanggar future PyPidari.org agar tidak diterapkan secara otomatis.

    library == version
    contoh Boto3

    Contoh requirements.txt file berikut menginstal perpustakaan Boto3 untuk Apache Airflow v1.10.12.

    boto3 == 1.17.4

    Jika paket ditentukan tanpa versi, Amazon MWAA menginstal versi terbaru paket dari PyPi.org. Versi ini mungkin bertentangan dengan paket lain di Andarequirements.txt.

Opsi dua: Roda Python (.whl)

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 — WHL file disalin ke wadah sebagai satuZIP, 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 mengerjakan versi yang kompatibel pip secara rekursif.

  • Ketahanan yang lebih besar — Dengan pustaka yang dihosting secara eksternal, persyaratan hilir dapat berubah, mengakibatkan ketidakcocokan versi antar kontainer di lingkungan Amazon. MWAA Dengan tidak bergantung pada sumber eksternal untuk dependensi, setiap kontainer memiliki pustaka yang sama terlepas dari kapan setiap wadah dipakai.

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

Menggunakan plugins.zip file di bucket Amazon S3

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 untuk dependensi Python dan startup layanan Apache Airflow. pip3 install -r requirements.txt plugins.zipFile digunakan untuk file apa pun yang Anda tidak ingin terus berubah selama eksekusi lingkungan, atau Anda mungkin tidak ingin memberikan akses ke pengguna yang menulisDAGs. Misalnya, file roda pustaka Python, file sertifikat, dan PEM file konfigurasiYAML.

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

  1. Unduh WHL file yang diperlukan Anda dapat menggunakan pip downloaddengan yang ada requirements.txt di Amazon MWAA local-runner atau wadah 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" *
  2. Tentukan jalur di Anda requirements.txt. Tentukan direktori plugin di bagian atas requirements.txt Anda menggunakan --find-linksdan menginstruksikan untuk pip tidak menginstal dari sumber lain menggunakan --no-index, seperti yang ditunjukkan dalam berikut

    --find-links /usr/local/airflow/plugins --no-index
    contoh roda di requirements.txt

    Contoh berikut mengasumsikan Anda telah mengunggah roda dalam plugins.zip file di root bucket Amazon S3 Anda. Sebagai 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 WHL file yang dihosting di URL

Bagian berikut menjelaskan cara memasang roda yang di-host di fileURL. URLHarus dapat diakses publik, atau dapat diakses dari dalam Amazon khusus yang VPC Anda tentukan untuk MWAA lingkungan Amazon Anda.

  • Menyediakan a URL. Berikan URL ke roda di Andarequirements.txt.

    contoh arsip roda di depan umum URL

    Contoh berikut mengunduh roda dari situs publik.

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

    Amazon MWAA mengambil roda dari yang URL Anda tentukan dan menginstalnya di lingkungan Anda.

    catatan

    URLstidak dapat diakses dari server web pribadi yang menginstal persyaratan di Amazon MWAA v2.2.2 dan yang lebih baru.

Membuat WHL file dari DAG

Jika Anda memiliki server web 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 yang berikut ini untuk DAG mengambil MWAA persyaratan Amazon 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 menjalankanDAG, gunakan file baru ini sebagai Amazon Anda MWAAplugins.zip, opsional, dikemas dengan plugin lain. Kemudian, perbarui Anda requirements.txt sebelumnya dengan --find-links /usr/local/airflow/plugins dan --no-index tanpa menambahkan. --constraint

Metode ini memungkinkan Anda untuk menggunakan perpustakaan yang sama secara offline.

Opsi tiga: Dependensi Python yang dihosting pada Repo yang Sesuai/-503 pribadi PyPi PEP

Bagian berikut menjelaskan cara menginstal tambahan Apache Airflow yang di-host secara pribadi URL dengan otentikasi.

  1. Tambahkan nama pengguna dan kata sandi Anda sebagai opsi konfigurasi Apache Airflow. Sebagai contoh:

    • foo.user : YOUR_USER_NAME

    • foo.pass : YOUR_PASSWORD

  2. Buat requirements.txt file Anda. Gantikan placeholder dalam contoh berikut dengan pribadi AndaURL, dan nama pengguna dan kata sandi yang telah Anda tambahkan sebagai opsi konfigurasi Apache Airflow. Sebagai contoh:

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
  3. Tambahkan pustaka tambahan apa pun ke requirements.txt file Anda. Sebagai 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

Peran eksekusi untuk MWAA lingkungan Amazon Anda memerlukan izin untuk mengirim log ke CloudWatch Log. Untuk memperbarui izin peran eksekusi, lihatPeran MWAA eksekusi Amazon.

Anda dapat mengaktifkan log Apache Airflow diINFO,, WARNINGERROR, atau CRITICAL level. Saat Anda memilih level log, Amazon MWAA mengirimkan log untuk level tersebut dan semua tingkat keparahan yang lebih tinggi. Misalnya, jika Anda mengaktifkan log di INFO level tersebut, Amazon MWAA mengirimkan INFO log danWARNING,ERROR, dan tingkat CRITICAL CloudWatch log ke Log. Sebaiknya aktifkan log Apache Airflow pada INFO level agar Scheduler dapat melihat log yang diterima untuk file. requirements.txt

Gambar ini menunjukkan cara mengaktifkan log di INFO level tersebut.

Melihat log di konsol CloudWatch Log

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

Untuk melihat log untuk requirements.txt
  1. Buka halaman Lingkungan di MWAA konsol Amazon.

  2. Pilih lingkungan.

  3. Pilih grup log penjadwal aliran udara di panel Pemantauan.

  4. Pilih requirements_install_ip log masuk Aliran log.

  5. Anda akan melihat daftar paket yang diinstal pada lingkungan di/usr/local/airflow/.local/bin. Sebagai 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))
  6. Tinjau daftar paket dan apakah salah satu dari ini mengalami kesalahan selama instalasi. Jika terjadi kesalahan, Anda mungkin melihat kesalahan yang mirip dengan yang 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))

Melihat kesalahan di Apache Airflow UI

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

Broken DAG: No module named x

Jika Anda melihat kesalahan ini di Apache Airflow UI, Anda mungkin kehilangan ketergantungan yang diperlukan dalam file Anda. requirements.txt

Masuk ke Apache Airflow

Anda memerlukan Kebijakan akses Apache Airflow UI: A mazonMWAAWeb ServerAccess izin untuk AWS akun Anda di AWS Identity and Access Management (IAM) untuk melihat UI Apache Airflow Anda.

Untuk mengakses UI Apache Airflow Anda
  1. Buka halaman Lingkungan di MWAA konsol Amazon.

  2. Pilih lingkungan.

  3. Pilih Buka UI Aliran Udara.

Contoh requirements.txt skenario

Anda dapat mencampur dan mencocokkan berbagai format dalam format Andarequirements.txt. Contoh berikut menggunakan kombinasi dari berbagai cara untuk menginstal ekstra.

contoh Ekstra di PyPi .org dan publik URL

Anda perlu menggunakan --index-url opsi saat menentukan paket dari PyPi .org, selain paket di publikURL, seperti repo yang sesuai dengan PEP 503 kustom. URLs

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