Python 依存関係のインストール - Amazon Managed Workflows for Apache Airflow

Python 依存関係のインストール

Python 依存関係とは、Amazon Managed Workflows for Apache Airflow 環境の Apache Airflow バージョンの Apache Airflow ベースインストールに含まれていないパッケージまたはディストリビューションです。このトピックでは、Amazon S3 バケット内の requirements.txt ファイルを使用して Apache Airflow Python の依存関係を Amazon MWAA 環境にインストールする手順について説明します。

前提条件

このページのステップを完了するには、以下のものが必要です。

  • アクセス許可 — AWS アカウント には、管理者から、ご使用の環境の AmazonMWAAFullConsoleAccess アクセスコントロールポリシーへのアクセス権限が付与されている必要があります。さらに、Amazon MWAA 環境には、その環境で使用される AWS のリソースへのアクセスを 実行ロール で許可されている必要があります。

  • アクセス — 依存関係をウェブサーバーに直接インストールするためにパブリックリポジトリにアクセスする必要がある場合は、パブリックネットワーク のウェブサーバーアクセスが環境に設定されている必要があります。詳細については、Apache Airflow のアクセスモード を参照してください。

  • Amazon S3 設定plugins.zip で DAG、カスタムプラグイン、および requirements.txt で Python の依存関係を保存するために使用される Amazon S3 バケット は、Public Access BlockedVersioning Enabled で構成する必要があります。

仕組み

Amazon MWAA では、Python の依存関係はすべて、requirements.txt ファイルを Amazon S3 バケットにアップロードし、ファイルを更新するたびに Amazon MWAA コンソールでファイルのバージョンを指定することでインストールされます。Amazon MWAA は pip3 install -r requirements.txt を実行して、Python の依存関係を Apache Airflowスケジューラおよび各ワーカーにインストールします。

Python の依存関係をお使いの環境で実行するには、次の 3 つのことを行う必要があります。

  1. requirements.txt ファイルをローカルに作成します。

  2. ローカルの requirements.txt を Amazon S3 バケットにアップロードします。

  3. 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-docker-images を参照してください。

ステップ 2: requirements.txt を作成する

次のセクションでは、requirements.txt ファイルの Python Package インデックスから Python 依存関係を指定する方法について説明します。

Apache Airflow v3
  1. ローカルでテストしますrequirements.txt ファイルを作成する前に、ライブラリを繰り返し追加してパッケージとバージョンの適切な組み合わせを見つけてください。Amazon MWAA CLI ユーティリティを実行するには、GitHub の aws-mwaa-docker-images を参照してください。

  2. Apache Airflow パッケージのエクストラを確認してください。Amazon MWAA で Apache Airflow v3 にインストールされているパッケージのリストにアクセスするには、GitHub ウェブサイトの aws-mwaa-docker-imagesrequirements.txt を参照してください。

  3. 制約ステートメントを追加します。Apache Airflow v3 環境用の制約ファイルを requirements.txt ファイルの先頭に追加します。Apache Airflow の制約ファイルには、Apache Airflow のリリース時点で利用可能なプロバイダーのバージョンが指定されています。

    次の例では、{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 ログへのアクセス を参照してください。

  4. Apache Airflow パッケージパッケージエクストラ とバージョン (==) を追加します。これにより、同じ名前で異なるバージョンのパッケージが環境にインストールされるのを防ぐことができます。

    apache-airflow[package-extra]==2.5.1
  5. Python ライブラリ パッケージ名とバージョン (==) を requirements.txt ファイルに追加します。これにより、PyPI.org からの将来の重大な更新が自動的に適用されるのを防ぐことができます。

    library == version
    例 Boto3 と psycopg2-binary

    この例は、デモンストレーションのみを目的としています。boto と psycopg2 のバイナリライブラリは Apache Airflow v3 のベースインストールに含まれており、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 内の他のパッケージと競合する可能性があります。

Apache Airflow v2
  1. ローカルでテストしますrequirements.txt ファイルを作成する前に、ライブラリを繰り返し追加してパッケージとバージョンの適切な組み合わせを見つけてください。Amazon MWAA CLI ユーティリティを実行するには、GitHub の aws-mwaa-docker-images を参照してください。

  2. Apache Airflow パッケージのエクストラを確認してください。Amazon MWAA で Apache Airflow v2 用にインストールされているパッケージのリストにアクセスするには、GitHub ウェブサイトの aws-mwaa-docker-images requirements.txt にアクセスします。

  3. 制約ステートメントを追加します。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 ログへのアクセス を参照してください。

  4. Apache Airflow パッケージパッケージエクストラ とバージョン (==) を追加します。これにより、同じ名前で異なるバージョンのパッケージが環境にインストールされるのを防ぐことができます。

    apache-airflow[package-extra]==2.5.1
  5. 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 を使用してアップロードするには
  1. 以下のコマンドを使って、Amazon S3 バケットをすべてリストアップします

    aws s3 ls
  2. 以下のコマンドを使用して、ご使用の環境の Amazon S3 バケット内のファイルとフォルダを一覧表示します。

    aws s3 ls s3://YOUR_S3_BUCKET_NAME
  3. 以下のコマンドにより、requirements.txt ファイルが Amazon S3 にアップロードされます。

    aws s3 cp requirements.txt s3://amzn-s3-demo-bucket/requirements.txt

Amazon S3 コンソールの使用

Amazon S3 コンソールは、Amazon S3 バケット内のリソースを作成および管理するために使用できるウェブベースのユーザーインターフェイスです。

Amazon S3 コンソールを使ってアップロードするには
  1. Amazon MWAA コンソールで、環境ページ を開きます。

  2. 環境を選択します。

  3. コンソールの DAG コード in S3 ペインで S3 バケット リンクを選択して、ストレージバケットを開きます。

  4. アップロード を選択します。

  5. ファイルの追加 を選択します。

  6. requirements.txt のローカルコピーを選択し、アップロード を選択します。

環境への Python 依存関係のインストール

このセクションでは、requirements.txt ファイルへのパスを指定し、更新されるたびに requirements.txt ファイルのバージョンを指定することで、Amazon S3 バケットにアップロードした依存関係をインストールする方法について説明します。

Amazon MWAA コンソールで requirements.txt へのパスを指定する(初回)

これが初めて requirements.txt を作成してAmazon S3 バケットにアップロードする場合、Amazon MWAA コンソールでファイルへのパスも指定する必要があります。1 回だけこのステップを行ってください。

  1. Amazon MWAA コンソールで、環境ページ を開きます。

  2. 環境を選択します。

  3. 編集 を選択します。

  4. Amazon S3 ペインの DAG コード で、要件ファイル - オプション フィールドに隣接する S3 の参照 を選択します。

  5. Amazon S3 バケット上の requirements.txt ファイルを選択します。

  6. 選択 を選択します。

  7. 次へ環境の更新 を選択します。

環境の更新が完了した直後に、新しいパッケージの使用を開始できます。

Amazon MWAA コンソールでrequirements.txtのバージョンを指定する。

新しいバージョンの requirements.txt を Amazon S3 バケットにアップロードするたびに、Amazon MWAA コンソールで requirements.txt ファイルのバージョンを指定する必要があります。

  1. Amazon MWAA コンソールで、環境ページ を開きます。

  2. 環境を選択します。

  3. 編集 を選択します。

  4. Amazon S3 の DAG コードペインで、ドロップダウンリストから requirements.txt のバージョンを選択します。

  5. 次へ環境の更新 を選択します。

環境の更新が完了した直後に、新しいパッケージの使用を開始できます。

requirements.txt のログにアクセスする

ワークフローのスケジュール設定と dags フォルダーの解析を行うスケジューラーの Apache Airflow ログを表示できます。次のステップでは、Amazon MWAA コンソールでスケジューラーのロググループを開き、CloudWatch Logs コンソールで Apache Airflow ログにアクセスする方法について説明します。

requirements.txt のログにアクセスするには
  1. Amazon MWAA コンソールで、環境ページ を開きます。

  2. 環境を選択します。

  3. モニタリング ペインで Airflow スケジューラーロググループ を選択します。

  4. ログストリームrequirements_install_ip ログを選択します。

  5. 環境にインストールされたパッケージのリストについては、/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))
  6. パッケージのリストを確認し、インストール中にエラーが発生したパッケージがないか確認してください。何か問題が発生した場合、次のようなエラーが表示されます。

    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-docker-images を使用して、DAG、カスタムプラグイン、Python の依存関係をローカルでテストします。