Amazon MWAA 環境にカスタムパッケージをインストールするにはどうすればよいですか?
最終更新日: 2022 年 3 月 3 日
Amazon Managed Workflows for Apache Airflow (Amazon MWAA) 環境で plugins.zip を使用してカスタムパッケージをインストールしたいと思っています。
簡単な説明
requirements.txt ファイルと plugins.zip ファイルにより、Amazon MWAA に Python ライブラリをインストールできます。インストールに requirements.txt ファイルを使用した場合には、パッケージはデフォルトで、PyPI.org からがインストールされます。ただし、コンパイル済みのアーティファクトを含むライブラリ (.whl ファイル) を配布する必要がある場合は、plugins.zip ファイルを使用してこれらの Python wheel をインストールします。
plugins.zip ファイルを使用すれば、この.zip ファイル内にファイルをドロップするだけで、カスタムの Apache Airflow オペレータ、フック、センサー、インターフェイスをインストールできます。このファイルは、バックエンドの Amazon ECS Fargate コンテナの /usr/local/airflow/plugins/ という場所に書き込まれます。プラグインは、環境変数や、認証および設定ファイル (.crt、.yaml など) のエクスポートにも使用できます。
解決方法
Python Wheels を使用してライブラリをインストールする
Python wheel は、コンパイル済みアーティファクトを含むパッケージファイルです。このパッケージをインストールするには、(.whl) ファイルを plugins.zip に配置し、このファイルを requirements.txt から参照します。.whl ファイルを plugins.zip に追加した後に環境を更新すると、その.whl ファイルは、基盤となる Amazon Elastic Container Service (Amazon ECS) Fargate コンテナ内のロケーション /usr/local/airflow/plugins/ にコピーされます。Python Wheels をインストールするには、以下の操作を行います。
1. plugins.zip ファイルを作成します。
次のコマンドを実行して、システム上にローカルの Airflow プラグイン用ディレクトリを作成します。
$ mkdir plugins
.whl ファイルを、作成したプラグイン用ディレクトリにコピーします。
次のコマンドを実行して、ローカルの Airflow プラグイン用ディレクトリを指すようにディレクトリを変更します。
$ cd plugins
plugins$ chmod -R 755
次のコマンドを実行して、プラグイン用フォルダー内のコンテンツを Zip 圧縮します。
plugins$ zip -r plugins.zip
2. requirements.txt ファイル内に .whl ファイルのパス (例: /usr/local/airflow/plugins/example_wheel.whl) を記述します。
注: ご使用の Amazon Simple Storage Service (Amazon S3) バケットで、バージョニングを必ずオンにしてください。
3. plugins.zip ファイルと requirements.txt ファイルを S3 バケットにアップロードします (例: s3: //example-bucket/plugins.zip)。
4. 環境を編集するために、Amazon MWAA コンソールの [Environments] (環境) ページを開きます。
5. リストから環境を選択し、[Edit] (編集) をクリックします。
6. [Specify details] (詳細の指定) ページの [DAG code in Amazon S3 section] (Amazon S3 セクションの DAG コード) で、ユースケースに応じて次のいずれかを実行します。
注: plugins.zip または requirements.txt ファイルを初めて環境にアップロードする場合は、ファイルを選択した後にバージョンの選択も行います。すでにアップロードしてあるファイルを更新した場合は、ファイルの選択をスキップしてバージョンのみを選択できます。
[Plugins file - optional] (プラグインファイル – オプション) フィールドで、[Browse S3] (S3 をブラウズ) をクリックします。
Amazon S3 バケット内の plugins.zip ファイルを選択した上で、[Choose] (選択) をクリックします。
[Plugins file - optional] (プラグインファイル – オプション) の [Choose a version] (バージョンを選択] で、アップロードしたファイルの最新バージョンを選択します。
– または –
[Requirements file - optional] (要件ファイル – オプション) で、[Browse S3] (S3 を参照) をクリックします。
Amazon S3 バケット内の requirements.txt ファイルを選択し、[Choose] (選択) をクリックします。
[Requirements file - optional] (要件ファイル – オプション) の [Choose a version] (バージョンを選択) で、アップロードしたファイルの最新バージョンを選択します。
7. [Next] (次へ)、[Save] (保存) の順にクリックします。
カスタムオペレータ、フック、センサー、インターフェースのインストール
Amazon MWAA は Apache Airflow の組み込みプラグインマネージャーをサポートしており、これによりカスタムの Apache Airflow オペレータ、フック、センサー、またはインターフェイスを使用できます。これらのカスタムプラグインは、フラットかつネストされたディレクトリ構造を使用して plugins.zip ファイルに配置できます。カスタムプラグインの例については、「カスタムプラグインの例」を参照してください。
カスタムプラグインを作成してランタイム環境変数を生成する
Amazon MWAA 環境では、環境変数を実行時に生成するカスタムプラグインを作成することもできます。その後、これらの環境変数は DAG コードの中で使用できます。詳しくは、「Creating a custom plugin that generates runtime environment variables」(実行時に環境変数を生成するカスタムプラグインの作成) を参照してください。
PEM、.crt、および設定ファイルのエクスポート
環境の実行中に継続的に更新する必要がない特定のファイルは、plugins.zip を使用して配布することができます。また、DAG (証明書 (.crt)、PEM、設定 YAML ファイルなど) を書き込むユーザーが、そのアクセス権を必要としないファイルを配置することもできます。これらのファイルを plugins.zip にドロップしたら、その plugins.zip を S3 にアップロードし環境を更新します。このファイルは、/usr/local/airflow/plugins へのアクセスに必要な許可を使用してレプリケートされます。
次のコマンドを実行すると、カスタム CA 証明書を plugins.zip ファイルに圧縮できます。
$ zip plugins.zip ca-certificates.crt
kube_config.yaml を plugins.zip ファイルに圧縮するには、以下のコマンドを実行します。
$ zip plugins.zip kube_config.yaml
インストールプロセスに関するトラブルシューティング
前出の各パッケージのインストール中に問題が発生した場合は、aws-mwaa-local-runner を使用して DAG、カスタムプラグイン、および Python の依存関係をローカルでテストします。
plugins.zip ファイルを使用した Python パッケージのインストールに関する問題のトラブルシューティングを行う際は、Apache Airflow Worker または Scheduler のロググループからログファイル (requirements_install_ip) を表示することができます。
重要: Amazon MWAA 環境にパッケージまたは plugins.zip ファイルをインストールする前に、Amazon MWAA CLI ユーティリティ (aws-mwaa-local-runner) を使用して Python の依存関係と plugins.zip ファイルをテストすることがベストプラクティスです。