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

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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

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 リソースにアクセスするには、実行ロールによって Amazon MWAA 環境が許可されている必要があります。

  • アクセス — 依存関係をウェブサーバーに直接インストールするためにパブリックリポジトリにアクセスする必要がある場合は、パブリックネットワークのウェブサーバーアクセスが環境に設定されている必要があります。詳細については、「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 つのことを行う必要があります。

  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-local-runner」を参照してください。

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

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

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

  2. Apache Airflow パッケージのエクストラを確認してください。Amazon MWAA でApache Airflow v2 にインストールされたパッケージのリストが表示するには、GitHub Web サイトの「Amazon MWAA local runner 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) を使用して、requirements.txtファイルを Amazon S3 バケットにアップロードできます。

の使用 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://YOUR_S3_BUCKET_NAME/requirements.txt

Amazon S3 コンソールの使用

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

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

  2. 環境を選択します。

  3. Amazon S3 コンソールの [DAG コード in S3] ペインで DAG コード内の [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-local-runner を使用して、DAG、カスタムプラグイン、Python の依存関係をローカルでテストします。