翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
requirements.txt での Python 依存関係の管理
このページでは、Apache Airflow 用 Amazon マネージドワークフロー環境の requirements.txt
ファイルに Python の依存関係をインストールして管理するために推奨するベストプラクティスについて説明します。
目次
Amazon MWAA CLI ユーティリティを使用した DAG のテスト
-
コマンドラインインターフェイス (CLI) ユーティリティは、Amazon Managed Workflows for Apache Airflow (Amazon MWAA) 環境をローカルに複製します。
-
CLI は、Amazon MWAA のプロダクションイメージに似た Docker コンテナイメージをローカルでビルドします。これにより、Amazon MWAA にデプロイする前に、ローカルの Apache Airflow 環境を実行して DAG、カスタムプラグイン、依存関係を開発およびテストできます。
-
CLI を実行するには、 の aws-mwaa-local-runner
を参照してください GitHub。
PyPi.org 要件ファイル形式を使用した Python 依存関係のインストール
次のセクションでは、 PyPi.org 要件ファイル形式
オプション 1: Python Package インデックスからの Python 依存関係
次のセクションでは、requirements.txt
ファイルの「Python Package インデックス
オプション 2: Python wheel (.whl)
Python wheel は、コンパイルされたアーティファクトをライブラリに同梱するために設計されたパッケージ形式です。Amazon MWAA に依存関係をインストールする方法として、ホイールパッケージにはいくつかの利点があります。
-
より速いインストール — WHL ファイルは 1 つの ZIP としてコンテナにコピーされ、ローカルにインストールされます。各ファイルをダウンロードする必要はありません。
-
より少ないコンフリクト — パッケージのバージョン互換性を事前に判断できます。その結果、
pip
が互換性のあるバージョンを再帰的に調べる必要がなくなります。 -
耐障害性の向上 — 外部でホストされているライブラリでは、ダウンストリームの要件が変更され、Amazon MWAA 環境上のコンテナ間でバージョン互換性がなくなる可能性があります。依存関係を外部ソースに依存しないことで、各コンテナがいつインスタンス化されたかに関係なく、上のすべてのコンテナに同じライブラリが割り当てられます。
requirements.txt
の Python wheel アーカイブ (.whl
) から Python 依存関係をインストールするには、次の方法をお勧めします。
Amazon S3 バケット上の plugins.zip
ファイルを使用する
Apache Airflow スケジューラ、ワーカー、およびウェブサーバー (Apache Airflow v2.2.2 以降用) は、 の環境の AWSマネージド Fargate コンテナで起動時にカスタムプラグインを探します/usr/local/airflow/plugins/
。このプロセスは、Python 依存関係および Apache Airflow サービスの起動のための Amazon MWAA の *
pip3 install -r requirements.txt
前に始まります。plugins.zip
ファイルは、環境実行中に継続的に変更されたくないファイル、またはDAGを作成するユーザーにアクセス権を与えたくないファイルに使用できます。たとえば、Python ライブラリのホイールファイル、証明書 PEM ファイル、構成 YAML ファイルなどです。
次のセクションでは、plugins.zip
ファイルにあるホイールを Amazon S3 バケットにインストールする方法について説明します。
-
必要な WHL ファイルをダウンロードします。Amazon MWAA「ローカルランナー
」または別の「Amazon Linux 2 」コンテナにある既存の requirements.txt
と「pip download
」を使用して、必要な Python wheel ファイルを解決してダウンロードできます。 $
pip3 download -r "$AIRFLOW_HOME/dags/requirements.txt" -d "$AIRFLOW_HOME/plugins"
$
cd "
$AIRFLOW_HOME
/plugins"$
zip "
$AIRFLOW_HOME
/plugins.zip" * -
requirements.txt
でパスを指定します。以下に示すように、requirements.txt の先頭に「--find-links
」を使用してプラグインディレクトリを指定し、 pip
に他のソースからインストールしないように「--no-index
」を使用して指示します。 --find-links /usr/local/airflow/plugins --no-index
例 requirements.txt 内のホイール
次の例では、Amazon S3 バケットのルートにある
plugins.zip
ファイルにホイールをアップロードしたことを前提としています。例:--find-links /usr/local/airflow/plugins --no-index numpy
Amazon MWAA は
plugins
フォルダからnumpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl
ホイールを取得し、環境にインストールします。
URL にホストされている WHL ファイルを使用する
次のセクションでは、URL でホストされるホイールをインストールする方法について説明します。URL は、パブリックにアクセス可能であるか、Amazon MWAA 環境用に指定したカスタム Amazon MWAA 内からアクセスできる必要があります。
-
URL を指定してください。
requirements.txt
内のホイールの URL を指定します。例 公開 URL でのホイールアーカイブ
次の例では、公開サイトからホイールをダウンロードします。
--find-links https://files.pythonhosted.org/packages/ --no-index
Amazon MWAA は、指定した URL からホイールを取得し、お使いの環境にインストールします。
注記
Amazon MWAA v2.2.2 以降では、要件をインストールするプライベートウェブサーバーから URL にアクセスすることはできません。
DAG から WHL ファイルを作成しています。
Apache Airflow v2.2.2 以降を使用するプライベートウェブサーバーがあり、環境が外部リポジトリにアクセスできないために要件をインストールできない場合は、次の DAG を使用して既存の Amazon MWAA 要件を取得し、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}
" )
DAG を実行したら、この新しいファイルを Amazon MWAA plugins.zip
として使用します。オプションで、他のプラグインと一緒にパッケージ化することもできます。次に、 を追加--no-index
せずにrequirements.txt
、 の前に --find-links /usr/local/airflow/plugins
と を更新します--constraint
。
この方法では、同じライブラリをオフラインで使用できます。
オプション 3: プライベート PyPi/PEP-503 準拠リポジトリでホストされる Python 依存関係
次のセクションでは、認証付きのプライベート URL でホストされている Apache Airflow エクストラをインストールする方法について説明します。
-
ユーザー名とパスワードを「Apache Airflow 構成オプション」として追加します。例:
-
foo.user
:YOUR_USER_NAME
-
foo.pass
:YOUR_PASSWORD
-
-
requirements.txt
ファイルを作成します。次の例のプレースホルダーは、プライベート URL と「Apache Airflow 構成オプション」として追加したユーザー名とパスワードに置き換えてください。例:--index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
-
その他のライブラリを
requirements.txt
ファイルに追加します。例:--index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com my-private-package==1.2.3
Amazon MWAA コンソールでログを有効にします。
Amazon MWAA 環境の実行ロールには、ログを CloudWatch Logs に送信するためのアクセス許可が必要です。実行ロールのアクセス権限を更新するには、「Amazon MWAA 実行ロール」を参照してください。
Apache Airflow ログは INFO
、WARNING
、ERROR
または CRITICAL
レベルで有効にできます。ログレベルを選択すると、Amazon MWAA はそのレベルとそれ以上の重要度レベルのすべてのログを送信します。例えば、 INFO
レベルでログを有効にすると、Amazon MWAA はINFO
ログと WARNING
、ERROR
、 CRITICAL
ログレベルを CloudWatch Logs に送信します。requirements.txt
で受信したログをスケジューラーに表示できるように、INFO
レベルで Apache Airflow ログを有効にすることをお勧めします。
![この画像は、INFO レベルでログを有効にする方法を示しています。](images/mwaa-console-logs-info.png)
Logs コンソールでの CloudWatch ログの表示
ワークフローのスケジュール設定と dags
フォルダーの解析を行うスケジューラーの Apache Airflow ログを表示できます。次の手順では、Amazon MWAA コンソールでスケジューラのロググループを開き、Logs コンソールで Apache Airflow CloudWatch ログを表示する方法について説明します。
requirements.txt
のログを表示するには
-
Amazon MWAA コンソールで「環境ページ
」を開きます。 -
環境を選択します。
-
モニタリングペインで Airflow スケジューラーロググループを選択します。
-
[ログストリーム]
requirements_install_ip
のログを選択します。 -
/usr/local/airflow/.local/bin
で環境にインストールされたパッケージのリストが表示されるはずです。例: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))
-
パッケージのリストを確認し、インストール中にエラーが発生したパッケージがないか確認してください。何か問題が発生した場合、以下のようなエラーが表示されることがあります。
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))
Apache Airflow UI でエラーを表示する
また、Apache Airflow UI をチェックして、エラーが別の問題に関連しているかどうかを確認することもできます。Amazon MWAA の Apache Airflow で発生する可能性のある最も一般的なエラーは次のとおりです。
Broken DAG: No module named
x
Apache Airflow UI にこのエラーが表示される場合は、requirements.txt
のファイルに必要な依存関係が欠けている可能性があります。
Apache Airflow へのログイン
Apache Airflow UI を表示するには、 AWS Identity and Access Management (IAM) AWS のアカウントのApache Airflow UI アクセスポリシー: AmazonMWAAWebServer アクセスアクセス許可が必要です。
Apache Airflow UI にアクセスするには
-
Amazon MWAA コンソールで「環境ページ
」を開きます。 -
環境を選択します。
-
[Airflow UI を開く] を選択します。
requirements.txt
シナリオ例
requirements.txt
では異なるフォーマットを組み合わせることができます。次の例では、さまざまな方法を組み合わせてエクストラをインストールしています。
例 PyPi.org とパブリック URL の追加
カスタム PEP 503 準拠のリポジトリ URL などのパブリック URL 上のパッケージに加えて、 PyPi.org からパッケージを指定する場合は、 --index-url
オプションを使用する必要があります URLs 。
aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib