翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
requirements.txt での Python 依存関係の管理
このトピックでは、Amazon Managed Workflows for Apache Airflow 環境のrequirements.txtファイルに Python 依存関係をインストールして管理する方法について説明します。
目次
Amazon MWAA CLI ユーティリティを使用した DAG のテスト
-
コマンドラインインターフェイス (CLI) ユーティリティは、Amazon Managed Workflows for Apache Airflow 環境をローカルに複製します。
-
CLI は、Amazon MWAA のプロダクションイメージに似た Docker コンテナイメージをローカルでビルドします。これを使用して、ローカル Apache Airflow 環境を実行し、Amazon MWAA にデプロイする前に DAGs、カスタムプラグイン、依存関係を開発およびテストできます。
-
CLI を実行するには、GitHub の aws-mwaa-docker-images
を参照してください。
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 ファイルは、環境の実行中に継続的に変更しないファイル、または DAGs を記述するユーザーにアクセス権を付与しないファイルに使用できます。たとえば、Python ライブラリのホイールファイル、証明書 PEM ファイル、構成 YAML ファイルなどです。
次のセクションでは、plugins.zip ファイルにあるホイールを Amazon S3 バケットにインストールする方法について説明します。
-
必要な WHL ファイルをダウンロードする
requirements.txtAmazon MWAA aws-mwaa-docker-imagesの既存の または別の Amazon Linux 2 コンテナ pip downloadで を使用して、必要な Python ホイールファイルを解決してダウンロードできます。 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 の上部にある plugins ディレクトリを指定--find-linksし --no-index、 を使用して他のソースから をインストール pipしないように に指示します。--find-links /usr/local/airflow/plugins --no-index例 requirements.txt 内のホイール
次の例では、Amazon S3 バケットのルートにある
plugins.zipファイルにホイールをアップロードしたことを前提としています。例:--find-links /usr/local/airflow/plugins --no-index numpyAmazon MWAA は
pluginsフォルダからnumpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whlホイールを取得し、環境にインストールします。
URL にホストされている WHL ファイルを使用する
次のセクションでは、URL でホストされるホイールをインストールする方法について説明します。URL は、パブリックにアクセス可能であるか、Amazon MWAA 環境用に指定したカスタム Amazon VPC 内からアクセスできる必要があります。
-
URL を指定してください。
requirements.txt内のホイールの URL を指定します。例 公開 URL でのホイールアーカイブ
次の例では、公開サイトからホイールをダウンロードします。
--find-links https://files.pythonhosted.org/packages/ --no-indexAmazon MWAA は、指定した URL からホイールを取得し、お使いの環境にインストールします。
注記
URLsは、Amazon MWAA v2.2.2 以降で要件をインストールするプライベートウェブサーバーからはアクセスできません。
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://amzn-s3-demo-bucket/{S3_KEY}" )
DAG を実行したら、この新しいファイルを Amazon MWAA plugins.zip として使用します。オプションで、他のプラグインと一緒にパッケージ化することもできます。次に、--constraint を追加せずに --find-links /usr/local/airflow/plugins および --no-index の前に requirements.txt を更新してください。
この方法では、同じライブラリをオフラインで使用できます。
オプション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 に送信します。スケジューラが 用に受信したログにアクセスするために、 INFOレベルで Apache Airflow ログを有効にすることをお勧めしますrequirements.txt。
CloudWatch Logs コンソールでのログへのアクセス
ワークフローをスケジュールし、dagsフォルダを解析するスケジューラの Apache Airflow ログにアクセスできます。次の手順では、Amazon MWAA コンソールでスケジューラのロググループを開き、CloudWatch Logs コンソールで Apache Airflow ログにアクセスする方法について説明します。
のログにアクセスするには 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 namedx
このエラーが Apache Airflow UI で見つかった場合、requirements.txtファイルに必要な依存関係がない可能性があります。
Apache Airflow にログインする
Apache Airflow UI にアクセスするには、 AWS アカウント in AWS Identity and Access Management (IAM) のアクセスApache Airflow UI アクセスポリシー: AmazonMWAAWebServerAccess許可が必要です。
Apache Airflow UI にアクセスするには
-
Amazon MWAA コンソールで、環境ページ
を開きます。 -
環境を選択します。
-
[Airflow UI を開く] を選択します。
requirements.txt シナリオ例
requirements.txt では異なるフォーマットを組み合わせることができます。次の例では、さまざまな方法を組み合わせてエクストラをインストールしています。
例 PyPI.org のエクストラとパブリック URL
パブリック URL 上のパッケージ (PEP 503 準拠のカスタム repo URL など) に加えて、PyPI.org からパッケージを指定する場合は、--index-url のオプションを使用する必要があります。
aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib