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 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 パッケージインデックス (PyPi.org)、Python wheels (.whl)、またはプライベート PyPi/PEP-503 準拠リポジトリでホストされている Python 依存関係から環境にインストールできます。

Python 依存関係の場所とサイズ制限

Apache Airflow スケジューラとワーカーは、AWS で管理されるFargateコンテナが /usr/local/airflow/plugins での環境でスタートアップする際に、カスタムプラグインを探します。

  • サイズ制限。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 (Amazon MWAA) 環境をローカルに複製します。

  • CLI は、Amazon MWAA のプロダクションイメージに似た Docker コンテナイメージをローカルでビルドします。これにより、Amazon MWAA にデプロイする前に、ローカルの Apache Airflow 環境を実行して DAG、カスタムプラグイン、依存関係を開発およびテストできます。

  • CLI を実行するには、「」のaws-mwaa-local-runner「」を参照してください GitHub。

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

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

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

  2. Apache Airflow パッケージのエクストラを確認してください。Amazon MWAA に Apache Airflow v2 用にインストールされているパッケージのリストを表示するには、 GitHub ウェブサイトの「Amazon MWAA local runnerrequirements.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 。ログタイプの詳細については、「Amazon での Airflow ログの表示 CloudWatch」を参照してください。

  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 内の他のパッケージと競合する可能性があります。

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

  2. Airflow パッケージのエクストラを確認してくださいhttps://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.7.txt で Apache Airflow v1.10.12 で利用できるパッケージのリストが確認してください。

  3. 制約ファイルを追加します。Apache Airflow v1.10.12 の制約ファイルを requirements.txt ファイルの先頭に追加します。制約ファイルが xyz==1.0 パッケージが環境内の他のパッケージと互換性がないと判断した場合、pip3 install は環境に互換性のないライブラリがインストールされるのを防ぐために失敗しま す。

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.7.txt"
  4. アパッチ・エアフロー v1.10.12 パッケージ。「Airflow パッケージエクストラ」と Apache Airflow v1.10.12 バージョン (==) を追加します。これにより、同じ名前で異なるバージョンのパッケージが環境にインストールされるのを防ぐことができます。

    apache-airflow[package]==1.10.12
    例 Secure Shell (SSH)

    次の例では、 requirements.txt ファイルは、Apache Airflow v1.10.12 用 SSH をインストールします。

    apache-airflow[ssh]==1.10.12
  5. Python ライブラリ パッケージ名とバージョン (==) を requirements.txt ファイルに追加します。これにより、PyPi.org からの今後の重大な更新が自動的に適用されないようにできます。

    library == version
    例 Boto3

    次の例では、requirements.txt ファイルは、Apache Airflow v1.10.12 用の Boto3 ライブラリをインストールします。

    boto3 == 1.17.4

    バージョンなしでパッケージが指定されている場合、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://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 コンソールでスケジューラのロググループを開き、Logs コンソールで Apache Airflow CloudWatch ログを表示する方法について説明します。

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))

次のステップ

  • DAGs、カスタムプラグイン、Python の依存関係をローカルaws-mwaa-local-runnerでテストします GitHub。