翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
requirements.txt での Python 依存関係の管理
このページでは、Amazon Managed Workflows for Apache Airflow 環境の requirements.txt
ファイルに Python の依存関係をインストールして管理するために推奨するベストプラクティスについて説明します。
目次
Amazon MWAACLIユーティリティDAGsを使用したテスト
-
コマンドラインインターフェイス (CLI) ユーティリティは、Amazon Managed Workflows for Apache Airflow 環境をローカルにレプリケートします。
-
は、Amazon MWAA本番稼働用イメージと同様の Docker コンテナイメージをローカルにCLI構築します。これにより、Amazon にデプロイする前に、ローカル Apache Airflow 環境を実行してDAGs、、カスタムプラグイン、依存関係を開発およびテストできますMWAA。
-
を実行するには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/
。このプロセスは、Amazon MWAAの for Python *
pip3 install -r requirements.txt
の依存関係と Apache Airflow サービスの起動の前に開始されます。plugins.zip
ファイルは、環境の実行中に継続的に変更したくないファイルや、 を書き込むユーザーにアクセス権を付与したくないファイルに使用されますDAGs。例えば、Python ライブラリのホイールファイル、証明書PEMファイル、設定YAMLファイルなどです。
次のセクションでは、plugins.zip
ファイルにあるホイールを Amazon S3 バケットにインストールする方法について説明します。
-
必要なWHLファイルをダウンロードします。Amazon MWAA local-runner
または別の 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
ホイールを取得し、環境にインストールします。
でホストされているWHLファイルの使用 URL
次のセクションでは、 でホストされているホイールをインストールする方法について説明しますURL。は、パブリックにアクセス可能であるか、Amazon MWAA環境にVPC指定したカスタム Amazon 内からアクセス可能であるURL必要があります。
-
を指定しますURL。のホイールURLに を指定します
requirements.txt
。例 パブリックのホイールアーカイブ URL
次の例では、公開サイトからホイールをダウンロードします。
--find-links https://files.pythonhosted.org/packages/ --no-index
Amazon MWAA は、URL指定した からホイールを取得し、環境にインストールします。
注記
URLs は、Amazon v2.2.2 MWAA 以降で要件をインストールするプライベートウェブサーバーからアクセスできません。
からのWHLファイルの作成 DAG
Apache Airflow v2.2.2 以降を使用するプライベートウェブサーバーがあり、環境が外部リポジトリにアクセスできないために要件をインストールできない場合は、以下を使用して既存の Amazon MWAA要件DAGを取得し、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 ログを有効にすることをお勧めします。
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 で Apache Airflow で発生する可能性のある最も一般的なエラーMWAAは次のとおりです。
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 アクセスポリシー: AmazonMWAAWebServerAccessアクセス許可が必要です。
Apache Airflow UI にアクセスするには
-
Amazon MWAAコンソールで環境ページ
を開きます。 -
環境を選択します。
-
[Airflow UI を開く] を選択します。
requirements.txt
シナリオ例
requirements.txt
では異なるフォーマットを組み合わせることができます。次の例では、さまざまな方法を組み合わせてエクストラをインストールしています。
例 PyPi.org とパブリックの追加 URL
カスタム 503 準拠リポジトリ などのパブリック のパッケージに加えてURL、 PyPi.org PEP からパッケージを指定する場合は、 --index-url
オプションを使用する必要がありますURLs。
aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib