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 依存関係をインストールする手順について説明します。

前提条件

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

  • アクセス許可 — 管理者から環境の AmazonMWAAFullConsoleAccess アクセスコントロールポリシーへのアクセス権が付与されている AWS アカウント 必要があります。さらに、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 つのことを行う必要があります。

  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-images requirements.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 は環境に互換性のないライブラリがインストールされるのを防ぐために失敗します。パッケージのインストールが失敗した場合、CloudWatch Logs の対応するログストリームの各 Apache Airflow コンポーネント (スケジューラ、ワーカー、ウェブサーバー) のエラーログにアクセスできます。ログタイプの詳細については、「」を参照してください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-binary ライブラリは 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-imagesrequirements.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 は環境に互換性のないライブラリがインストールされるのを防ぐために失敗します。パッケージのインストールが失敗した場合、CloudWatch Logs の対応するログストリームの各 Apache Airflow コンポーネント (スケジューラ、ワーカー、ウェブサーバー) のエラーログにアクセスできます。ログタイプの詳細については、「」を参照してください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. S3 ペインの DAG コードで 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 DAGs、カスタムプラグイン、Python 依存関係をローカルでテストします。 aws-mwaa-docker-images