Amazon MWAA 環境にライブラリをインストールする方法を教えてください。

所要時間3分
0

Amazon Managed Workflows for an Apache Airflow (Amazon MWAA) 環境でライブラリをインストールしたいと考えています。

簡単な説明

requirements.txt ファイルと plugins.zip ファイルを使用して Amazon MWAA に Python ライブラリをインストールします。requirements.txt ファイルを使用してパッケージをインストールする場合、パッケージはデフォルトで Python Package Index (PyPI ウェブサイト) からインストールされます。コンパイルされたアーティファクトを含むライブラリ (.whl ファイル) を配布する場合は、plugins.zip ファイルを使用してこれらの Python ホイールをインストールしてください。

Amazon MWAA バージョン 2.2.2 と 2.4.3 の場合、プライベートウェブサーバーオプションではアウトバウンドインターネットアクセスは利用できません。Amazon MWAA は、Amazon MWAA サービスの仮想プライベートクラウド (VPC) 内のウェブサーバーに要件とプラグインをインストールします。これらの要件には、アウトバウンドインターネットアクセスを備えた NAT ゲートウェイが含まれます。ただし、以前の Amazon MWAA バージョン (2.0.2 と 1.10.12) では、要件とプラグインはデフォルトではウェブサーバーにインストールされません。

Amazon MWAA バージョン 2.2.2 と 2.4.3 の場合、Amazon MWAA ローカルランナーには Python の依存関係 (.whl) と要件をダウンロードして plugins.zip ファイルにパッケージ化するコマンドラインユーティリティが用意されています。

Amazon MWAA のすべてのバージョンで、plugins.zip ファイルを使用してカスタム Apache Airflow オペレーション、フック、センサー、またはインターフェイスをインストールできます。プラグインは、環境変数、認証、および .crt や .yaml などの設定ファイルをエクスポートします。

解決方法

プライベートウェブサーバー (Amazon MWAA バージョン 2.2.2 および 2.4.3) のある環境に .whl を使用してライブラリをインストールします

Amazon MWAA ローカル環境をセットアップします

  1. Docker イメージを構築し、Amazon MWAA ローカル環境をセットアップします (GitHub ウェブサイトから) 。MWAA リポジトリは、Amazon MWAA 環境をローカルに複製するコマンドラインインターフェイス (CLI) ユーティリティを提供します。

  2. Python ライブラリと依存関係を requirements.txt ファイルに追加します。

  3. 次のスクリプトを使用して requirements.txt ファイルをテストします。

#aws-mwaa-local-runner % ./mwaa-local-env test-requirements

出力は次のようになります。

 Installing requirements.txt
Collecting aws-batch (from -r /usr/local/airflow/dags/requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/5d/11/3aedc6e150d2df6f3d422d7107ac9eba5b50261cf57ab813bb00d8299a34/aws_batch-0.6.tar.gz
Collecting awscli (from aws-batch->-r /usr/local/airflow/dags/requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/07/4a/d054884c2ef4eb3c237e1f4007d3ece5c46e286e4258288f0116724af009/awscli-1.19.21-py2.py3-none-any.whl (3.6MB)
    100% |████████████████████████████████| 3.6MB 365kB/s
...
...
...
Installing collected packages: botocore, docutils, pyasn1, rsa, awscli, aws-batch
  Running setup.py install for aws-batch ... done
Successfully installed aws-batch-0.6 awscli-1.19.21 botocore-1.20.21 docutils-0.15.2 pyasn1-0.4.8 rsa-4.7.2

requirements.txt ファイルから .whl ファイルをビルドします

次の package-requirements local-runner コマンドを実行して、requirements.txt ファイルから .whl ファイルをビルドします。

#aws-mwaa-local-runner % ./mwaa-local-env package-requirements

このコマンドは、すべての .whl ファイルを aws-mwaa-local-runner/plugin というフォルダにダウンロードします。

.whl ファイルと Amazon MWAA 制約を含む plugins.zip ファイルを作成します

constraints.txt をダウンロードしてプラグインのディレクトリにコピーします。次に、次のコマンドを実行して plugins.zip ファイルを作成します。

#aws-mwaa-local-runner % curl -o plugins/constraints.txt "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.2/constraints-3.7.txt"
#aws-mwaa-local-runner % zip -j dags/plugins.zip plugins/constraints.txt

plugins.zip ファイルにパッケージされている .whl ファイルを指す新しい requirements.txt ファイルを作成します

1.新しい requirements.txt ファイルを作成します。任意のテキストツールで、次のような形式を使用してください。

=========new requirements.txt==========

--find-links /usr/local/airflow/plugins

--no-index

--constraint “/usr/local/airflow/plugins/constraints.txt”

aws-batch==0.6
====================================

2.plugins.zip ファイルと requirements.txt ファイルを MWAA クラスターの Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。次に、環境を更新します。

Python ホイールを使用してカスタムライブラリをインストールする

Python ホイールは、コンパイルされたアーティファクトを含むパッケージファイルです。このパッケージをインストールするには、.whl ファイルを plugins.zip ファイルに含めます。次に、requirements.txt ファイル内でこのファイルを参照します。.whl ファイルを plugins.zip ファイルに追加したら、環境を更新します。.whl ファイルは、Amazon Elastic Container Service (Amazon ECS) Fargate コンテナの場所 (/usr/local/airflow/plugins/) に送られます。

Python ホイールをインストールする

  1. plugins.zip ファイルを作成します。次のコマンドを実行して、システム上にローカルの Amazon MWAA プラグインディレクトリを作成します。
$ mkdir plugins
  1. 作成したプラグインディレクトリに .whl ファイルをコピーします。次のコマンドを実行して、ローカルの Airflow プラグインディレクトリを指すようにディレクトリを変更します。
$ cd plugins

次のコマンドを実行して、コンテンツに実行権限があることを確認します。

plugins$ chmod -R 755

次のコマンドを実行して、プラグインフォルダ内のコンテンツを圧縮します。

plugins$ zip -r plugins.zip .
  1. requirements.txt ファイルに .whl ファイルのパス (例: ** /usr/local/airflow/plugins/example_wheel.whl**) を含めます。

: Amazon S3 バケットのバージョニングを必ずオンにしてください。

  1. plugins.zip ファイルと requirements.txt ファイルを Amazon S3 バケットにアップロードします (例: s3://example-bucket/plugins.zip) 。

  2. Amazon MWAA コンソールで plugins.zip のバージョンを指定します

カスタムオペレーター、フック、センサー、またはインターフェイスをインストールする

Amazon MWAA は Apache Airflow の組み込みプラグインマネージャーをサポートしています。プラグインマネージャーでは、カスタムの Apache Airflow オペレーター、フック、センサー、またはインターフェイスを使用できます。これらのカスタムプラグインは、フラットなディレクトリ構造とネストされたディレクトリ構造のいずれかで plugins.zip ファイルに配置されます。plugins.zip ファイルの内容は、/usr/local/airflow/plugins/ にあるバックエンドの Amazon ECS Fargate コンテナに書き込まれます。 詳細については、「カスタムプラグインの例」を参照してください。

ランタイム環境変数を生成するカスタムプラグインを作成する

Amazon MWAA 環境でランタイム環境変数を生成するカスタムプラグインを作成します。次に、これらの環境変数を Directed Acyclic Graph (DAG) コードで使用します。詳細については、「ランタイム環境変数を生成するカスタムプラグインの作成」を参照してください。

PEM、.crt、および設定ファイル (.yaml) をエクスポートする

環境が稼働しているときに特定のファイルを継続的に更新する必要がない場合は、plugins.zip ファイルを使用してファイルを配布してください。DAG を作成して、ユーザーアクセスを必要としないファイル (証明書、PEM、設定 YAML ファイルなど) に plugins.zip を使用することもできます。

次のコマンド例では、ca-certificates.crt ファイルを plugins.zip ファイルにバンドルします。

$ zip plugins.zip ca-certificates.crt

この plugins.zip ファイルを使用して環境を更新すると、.crt ファイルが各ワーカーコンテナの /usr/local/airflow/plugins/ca-certificates.crt というパスで同期されます。次に、DAG はこのファイルにアクセスします。他のファイル形式についても同じ手順に従います。

カスタムプラグインとバイナリをインストールする

Oracle for Amazon MWAA を使用してカスタムプラグインを作成し、plugins.zip ファイル内の他のカスタムプラグインやバイナリと組み合わせることができます。これには Python 以外のパッケージも含まれます。詳細については、「Oracle でのカスタムプラグインの作成」を参照してください。

コンテナにバイナリを追加したり、環境変数を設定および変更したりするには、「Apache Hive と Hadoop によるカスタムプラグインの作成」を参照してください。

パッケージのインストールのトラブルシューティング

(GitHub ウェブサイトから) aws-mwaa-local-runner を使用して DAG、カスタムプラグイン、Python 依存関係をテストします。

ログファイルを表示します。ファイルは Apache Airflow ワーカーまたは Scheduler のロググループから表示できます。

重要: パッケージまたは plugins.zip ファイルをインストールする前に、Amazon MWAA CLI ユーティリティを使用して Python の依存関係と plugins.zip ファイルをテストすることがベストプラクティスです。

関連情報

プラグイン

AWS公式
AWS公式更新しました 10ヶ月前
コメントはありません