翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Python 依存関係とは、Amazon Managed Workflows for Apache Airflow 環境の Apache Airflow バージョンの Apache Airflow ベースインストールに含まれていないパッケージまたはディストリビューションです。このトピックでは、Amazon S3 バケット内の requirements.txt
ファイルを使用して Amazon MWAA 環境に Apache Airflow Python 依存関係をインストールする手順について説明します。
目次
前提条件
このページのステップを完了するには、以下のものが必要です。
-
アクセス許可 — AWS アカウントには、管理者から環境の AmazonMWAAFullConsoleAccess アクセスコントロールポリシーへのアクセス権が付与されている必要があります。さらに、Amazon MWAA 環境は、環境で使用される AWS リソースにアクセスするために実行ロールによって許可されている必要があります。
-
アクセス — 依存関係をウェブサーバーに直接インストールするためにパブリックリポジトリにアクセスする必要がある場合は、パブリックネットワークのウェブサーバーアクセスが環境に設定されている必要があります。詳細については、「Apache Airflow のアクセスモード」を参照してください。
-
Amazon S3 設定 —
plugins.zip
で DAG、カスタムプラグイン、およびrequirements.txt
で Python の依存関係を保存するために使用される Amazon S3 バケットは、Public Access Blocked と Versioning Enabledで構成する必要があります。
仕組み
Amazon MWAA では、Python の依存関係はすべて、requirements.txt
ファイルを Amazon S3 バケットにアップロードし、ファイルを更新するたびに Amazon MWAA コンソールでファイルのバージョンを指定することでインストールされます。Amazon MWAA は pip3 install -r requirements.txt
を実行して、Python の依存関係を Apache Airflowスケジューラおよび各ワーカーにインストールします。
Python の依存関係をお使いの環境で実行するには、次の 3 つのことを行う必要があります。
-
requirements.txt
ファイルをローカルに作成します。 -
ローカルの
requirements.txt
を Amazon S3 バケットにアップロードします。 -
Amazon MWAA コンソールの [要件ファイル] フィールドに、このファイルのバージョンを指定します。
注記
これが初めて requirements.txt
を作成してAmazon S3 バケットにアップロードする場合、Amazon MWAA コンソールでファイルへのパスも指定する必要があります。1 回だけこのステップを行ってください。
Python の依存関係の概要
Apache Airflow エクストラやその他の Python 依存関係は、Python Package インデックス (PyPi.org)、Python wheels (.whl
)、または環境上の PyPI/PEP-503 準拠のプライベートリポジトリでホストされている Python 依存関係からインストールできます。
Python 依存関係の場所とサイズ制限
Apache Airflow スケジューラ と ワーカーは、requirements.txt
ファイル内のパッケージを探し、パッケージは /usr/local/airflow/.local/bin
の環境にインストールされます。
-
サイズ制限。1 GB 未満の合計サイズを持つライブラリを参照する
requirements.txt
ファイルをお勧めします。Amazon MWAA がインストールする必要のあるライブラリが多いほど、環境でのスタートアップ時間が長くなります。Amazon MWAA はインストールするライブラリのサイズを明示的に制限していませんが、10 分以内に依存関係をインストールできない場合、Fargate サービスはタイムアウトし、環境を安定した状態にロールバックしようとします。
requirements.txt ファイルの作成
以下の手順では、requirements.txt ファイルをローカルで作成する場合に推奨される手順について説明します。
ステップ 1: Amazon MWAA CLI ユーティリティを使用して Python の依存関係をテストする
-
コマンドラインインターフェイス (CLI) ユーティリティは、Amazon Managed Workflows for Apache Airflow 環境をローカルに複製します。
-
CLI は、Amazon MWAA のプロダクションイメージに似た Docker コンテナイメージをローカルでビルドします。これにより、Amazon MWAA にデプロイする前に、ローカルの Apache Airflow 環境を実行して DAG、カスタムプラグイン、依存関係を開発およびテストできます。
-
CLI を実行するには、GitHub の「aws-mwaa-local-runner
」を参照してください。
ステップ 2: requirements.txt
を作成する
次のセクションでは、requirements.txt
ファイルの Python Package インデックス
-
ローカルでテストします。
requirements.txt
ファイルを作成する前に、ライブラリを繰り返し追加してパッケージとバージョンの適切な組み合わせを見つけてください。Amazon MWAA CLI ユーティリティを実行するには、GitHub の「aws-mwaa-local-runner」を参照してください。 -
Apache Airflow パッケージのエクストラを確認してください。Amazon MWAA でApache Airflow v2 にインストールされたパッケージのリストが表示するには、GitHub Web サイトの「Amazon MWAA local runner
requirements.txt
」を参照してください。 -
制約ステートメントを追加します。Apache Airflow v2 環境用の制約ファイルを
requirements.txt
ファイルの先頭に追加します。Apache Airflow の制約ファイルには、Apache Airflow のリリース時点で利用可能なプロバイダーのバージョンが指定されています。Apache Airflow v2.7.2 から、要件ファイルには
--constraint
ステートメントを含める必要があります。制約を指定しない場合、要件に記載されているパッケージが使用している Apache Airflow のバージョンと互換性があることを確認するため、Amazon MWAA はお客様に代わって制約を指定します。次の例では、
{environment-version}
をお使いの環境のバージョン番号に、{Python-version}
を環境と互換性のある Python のバージョンに置き換えます。Apache Airflow 環境と互換性のある Python のバージョンについては、「Apache Airflow のバージョン」を参照してください。
--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-
{Airflow-version}
/constraints-{Python-version}
.txt"制約ファイルが
xyz==1.0
パッケージが環境内の他のパッケージと互換性がないと判断した場合、pip3 install
は環境に互換性のないライブラリがインストールされるのを防ぐために失敗します。いずれかのパッケージのインストールが失敗した場合、各 Apache Airflow コンポーネント (スケジューラー、ワーカー、ウェブサーバー) のエラーログを CloudWatch Logs の対応するログストリームで確認できます。ログタイプの詳細については、「Amazon CloudWatch の Airflow ログの表示」を参照してください。 -
Apache Airflow パッケージ。パッケージエクストラ
とバージョン ( ==
) を追加します。これにより、同じ名前で異なるバージョンのパッケージが環境にインストールされるのを防ぐことができます。apache-airflow[
package-extra
]==2.5.1 -
Python ライブラリ パッケージ名とバージョン (
==
) をrequirements.txt
ファイルに追加します。これにより、PyPI.orgからの将来の重大な更新が自動的に適用されるのを防ぐことができます。 library
==version
例 Boto3 と psycopg2-binary
この例は、デモンストレーションのみを目的としています。boto と psycopg2 のバイナリライブラリは Apache Airflow v2 のベースインストールに含まれており、
requirements.txt
ファイルで指定する必要はありません。boto3==1.17.54 boto==2.49.0 botocore==1.20.54 psycopg2-binary==2.8.6
パッケージがバージョンなしで指定されている場合、Amazon MWAA は PyPI.org
からパッケージの最新バージョンをインストールします。このバージョンは、お客様の requirements.txt
内の他のパッケージと競合する可能性があります。
requirements.txt
を Amazon S3 にアップロードします。
Amazon S3 コンソールまたは AWS Command Line Interface (AWS CLI) を使用して、Amazon S3 バケットにrequirements.txt
ファイルをアップロードできます。
の使用 AWS CLI
AWS Command Line Interface (AWS CLI) は、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りできるオープンソースツールです。このページのステップを完了するには、以下のものが必要です。
を使用してアップロードするには AWS CLI
-
以下のコマンドを使って、Amazon S3 バケットをすべてリストアップします
aws s3 ls
-
以下のコマンドを使用して、ご使用の環境の Amazon S3 バケット内のファイルとフォルダを一覧表示します。
aws s3 ls s3://
YOUR_S3_BUCKET_NAME
-
以下のコマンドにより、
requirements.txt
ファイルが Amazon S3 にアップロードされます。aws s3 cp requirements.txt s3://
YOUR_S3_BUCKET_NAME
/requirements.txt
Amazon S3 コンソールの使用
Amazon S3 コンソールは、Amazon S3 バケット内のリソースを作成および管理できるウェブベースのユーザーインターフェイスです。
Amazon S3 コンソールを使ってアップロードするには
-
Amazon MWAA コンソールで、環境ページ
を開きます。 -
環境を選択します。
-
Amazon S3 コンソールの [DAG コード in S3] ペインで DAG コード内の [S3バケット] リンクを選択して、ストレージバケットを開きます。
-
[アップロード] を選択します。
-
[ファイルの追加] を選択します。
-
requirements.txt
のローカルコピーを選択し、[アップロード] を選択します。
環境への Python 依存関係のインストール
このセクションでは、requirements.txt ファイルへのパスを指定し、更新されるたびに requirements.txt ファイルのバージョンを指定することで、Amazon S3 バケットにアップロードした依存関係をインストールする方法について説明します。
Amazon MWAA コンソールで requirements.txt
へのパスを指定する(初回)
これが初めて requirements.txt
を作成してAmazon S3 バケットにアップロードする場合、Amazon MWAA コンソールでファイルへのパスも指定する必要があります。1 回だけこのステップを行ってください。
-
Amazon MWAA コンソールで、環境ページ
を開きます。 -
環境を選択します。
-
[編集] を選択します。
-
Amazon S3 ペインの DAG コードで、[要件ファイル-オプション] フィールドの横にある [S3 を参照] を選択します。
-
Amazon S3 バケット上の
requirements.txt
ファイルを選択します。 -
[選択] を選択します。
-
[次へ] → [環境の更新 を選択します。
環境の更新が完了した直後に、新しいパッケージの使用を開始できます。
Amazon MWAA コンソールでrequirements.txt
のバージョンを指定する。
新しいバージョンの requirements.txt
を Amazon S3 バケットにアップロードするたびに、Amazon MWAA コンソールで requirements.txt
ファイルのバージョンを指定する必要があります。
-
Amazon MWAA コンソールで、環境ページ
を開きます。 -
環境を選択します。
-
[編集] を選択します。
-
Amazon S3 の DAG コードペインで、ドロップダウンリストから
requirements.txt
のバージョンを選択します。 -
[次へ] → [環境の更新] を選択します。
環境の更新が完了した直後に、新しいパッケージの使用を開始できます。
requirements.txt
のログを表示する
ワークフローのスケジュール設定と 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))
次のステップ
-
GitHub の aws-mwaa-local-runner
を使用して、DAG、カスタムプラグイン、Python の依存関係をローカルでテストします。