

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

# Python 依存関係のインストール
<a name="working-dags-dependencies"></a>

Python 依存関係とは、Amazon Managed Workflows for Apache Airflow 環境の Apache Airflow バージョンの Apache Airflow ベースインストールに含まれていないパッケージまたはディストリビューションです。このトピックでは、Amazon S3 バケット内の `requirements.txt` ファイルを使用して Apache Airflow Python の依存関係を Amazon MWAA 環境にインストールする手順について説明します。

**Contents**
+ [前提条件](#working-dags-dependencies-prereqs)
+ [仕組み](#working-dags-dependencies-how)
+ [Python の依存関係の概要](#working-dags-dependencies-overview)
  + [Python 依存関係の場所とサイズ制限](#working-dags-dependencies-quota)
+ [requirements.txt ファイルの作成](#working-dags-dependencies-test-create)
  + [ステップ 1: Amazon MWAA CLI ユーティリティを使用して Python の依存関係をテストする](#working-dags-dependencies-cli-utility)
  + [ステップ 2: `requirements.txt` を作成する](#working-dags-dependencies-syntax-create)
+ [`requirements.txt` を Amazon S3 にアップロードします。](#configuring-dag-dependencies-upload)
  + [の使用 AWS CLI](#configuring-dag-dependencies-upload-cli)
  + [Amazon S3 コンソールの使用](#configuring-dag-dependencies-upload-console)
+ [環境への Python 依存関係のインストール](#configuring-dag-dependencies-installing)
  + [Amazon MWAA コンソールで `requirements.txt` へのパスを指定する（初回）](#configuring-dag-dependencies-first)
  + [Amazon MWAA コンソールで`requirements.txt`のバージョンを指定する。](#working-dags-dependencies-mwaaconsole-version)
+ [`requirements.txt` のログにアクセスする](#working-dags-dependencies-logs)
+ [次のステップ](#working-dags-dependencies-next-up)

## 前提条件
<a name="working-dags-dependencies-prereqs"></a>

このページのステップを完了するには、以下のものが必要です。
+ アクセス**許可** — 管理者から環境の [AmazonMWAAFullConsoleAccess](access-policies.md#console-full-access) アクセスコントロールポリシーへのアクセス権が付与されている AWS アカウント 必要があります。さらに、Amazon MWAA 環境は、環境で使用される AWS リソースにアクセスするために[実行ロール](mwaa-create-role.md)によって許可されている必要があります。
+ **アクセス** — 依存関係をウェブサーバーに直接インストールするためにパブリックリポジトリにアクセスする必要がある場合は、**パブリックネットワーク** のウェブサーバーアクセスが環境に設定されている必要があります。詳細については、[Apache Airflow のアクセスモード](configuring-networking.md) を参照してください。
+ **Amazon S3 設定** — `plugins.zip` で DAG、カスタムプラグイン、および `requirements.txt` で Python の依存関係を保存するために使用される [Amazon S3 バケット](mwaa-s3-bucket.md)は、*Public Access Blocked* と *Versioning Enabled*で構成する必要があります。

## 仕組み
<a name="working-dags-dependencies-how"></a>

Amazon MWAA では、Python の依存関係はすべて、`requirements.txt` ファイルを Amazon S3 バケットにアップロードし、ファイルを更新するたびに Amazon MWAA コンソールでファイルのバージョンを指定することでインストールされます。Amazon MWAA は `pip3 install -r requirements.txt` を実行して、Python の依存関係を Apache Airflowスケジューラおよび各ワーカーにインストールします。

Python の依存関係をお使いの環境で実行するには、次の 3 つのことを行う必要があります。

1. `requirements.txt` ファイルをローカルに作成します。

1. ローカルの `requirements.txt` を Amazon S3 バケットにアップロードします。

1. Amazon MWAA コンソールの **要件ファイル** フィールドに、このファイルのバージョンを指定します。

**注記**  
これが初めて `requirements.txt` を作成してAmazon S3 バケットにアップロードする場合、Amazon MWAA コンソールでファイルへのパスも指定する必要があります。1 回だけこのステップを行ってください。

## Python の依存関係の概要
<a name="working-dags-dependencies-overview"></a>

Apache Airflow エクストラやその他の Python 依存関係は、Python Package インデックス (PyPi.org)、Python wheels (`.whl`)、または環境上の PyPI/PEP-503 準拠のプライベートリポジトリでホストされている Python 依存関係からインストールできます。

### Python 依存関係の場所とサイズ制限
<a name="working-dags-dependencies-quota"></a>

Apache Airflow スケジューラ と ワーカーは、`requirements.txt` ファイル内のパッケージを探し、パッケージは `/usr/local/airflow/.local/bin` の環境にインストールされます。
+ **サイズ制限**。1 GB 未満の合計サイズを持つライブラリを参照する `requirements.txt` ファイルをお勧めします。Amazon MWAA がインストールする必要のあるライブラリが多いほど、環境での *スタートアップ* 時間が長くなります。Amazon MWAA はインストールするライブラリのサイズを明示的に制限していませんが、10 分以内に依存関係をインストールできない場合、Fargate サービスはタイムアウトし、環境を安定した状態にロールバックしようとします。

## requirements.txt ファイルの作成
<a name="working-dags-dependencies-test-create"></a>

以下の手順では、requirements.txt ファイルをローカルで作成する場合に推奨される手順について説明します。

### ステップ 1: Amazon MWAA CLI ユーティリティを使用して Python の依存関係をテストする
<a name="working-dags-dependencies-cli-utility"></a>
+ コマンドラインインターフェイス (CLI) ユーティリティは、Amazon Managed Workflows for Apache Airflow 環境をローカルに複製します。
+ CLI は、Amazon MWAA のプロダクションイメージに似た Docker コンテナイメージをローカルでビルドします。これを使用すると、Amazon MWAA にデプロイする前に、ローカルの Apache Airflow 環境を実行して DAG、カスタムプラグイン、依存関係を開発およびテストできます。
+ CLI を実行するには、GitHub の [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) を参照してください。

### ステップ 2: `requirements.txt` を作成する
<a name="working-dags-dependencies-syntax-create"></a>

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

------
#### [ Apache Airflow v3 ]

1. **ローカルでテストします**。`requirements.txt` ファイルを作成する前に、ライブラリを繰り返し追加してパッケージとバージョンの適切な組み合わせを見つけてください。Amazon MWAA CLI ユーティリティを実行するには、GitHub の [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) を参照してください。

1. **Apache Airflow パッケージのエクストラを確認してください**。Amazon MWAA で Apache Airflow v3 にインストールされているパッケージのリストにアクセスするには、GitHub ウェブサイトの [aws-mwaa-docker-images`requirements.txt`](https://github.com/aws/amazon-mwaa-docker-images/blob/main/requirements.txt) を参照してください。

1. **制約ステートメントを追加します**。ファイルの上部に Apache Airflow v3 環境の制約`requirements.txt`ファイルを追加します。Apache Airflow の制約ファイルには、Apache Airflow のリリース時点で利用可能なプロバイダーのバージョンが指定されています。

    次の例では、*\$1environment-version\$1* をお使いの環境のバージョン番号に、*\$1Python-version\$1* を環境と互換性のある Python のバージョンに置き換えます。

   Apache Airflow 環境と互換性のある Python のバージョンについては、[Apache Airflow のバージョン](airflow-versions.md#airflow-versions-official) を参照してください。

   ```
   --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 ログへのアクセス](monitoring-airflow.md) を参照してください。

1. Apache Airflow パッケージ。[パッケージエクストラ](http://airflow.apache.org/docs/apache-airflow/2.5.1/extra-packages-ref.html) とバージョン (`==`) を追加します。これにより、同じ名前で異なるバージョンのパッケージが環境にインストールされるのを防ぐことができます。

   ```
   apache-airflow[package-extra]==2.5.1
   ```

1. Python ライブラリ パッケージ名とバージョン (`==`) を `requirements.txt` ファイルに追加します。これにより、[PyPI.org](https://pypi.org) からの将来の重大な更新が自動的に適用されるのを防ぐことができます。

   ```
   library == version
   ```  
**Example Boto3 と psycopg2-binary**  

   この例は、デモンストレーションのみを目的としています。boto と psycopg2 のバイナリライブラリは 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](https://pypi.org) からパッケージの最新バージョンをインストールします。このバージョンは、お客様の `requirements.txt` 内の他のパッケージと競合する可能性があります。

------
#### [ Apache Airflow v2 ]

1. **ローカルでテストします**。`requirements.txt` ファイルを作成する前に、ライブラリを繰り返し追加してパッケージとバージョンの適切な組み合わせを見つけてください。Amazon MWAA CLI ユーティリティを実行するには、GitHub の [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) を参照してください。

1. **Apache Airflow パッケージのエクストラを確認してください**。Amazon MWAA で Apache Airflow v2 用にインストールされているパッケージのリストにアクセスするには、GitHub ウェブサイトの [aws-mwaa-docker-images `requirements.txt`](https://github.com/aws/amazon-mwaa-docker-images/blob/main/requirements.txt) にアクセスします。

1. **制約ステートメントを追加します**。Apache Airflow v2 環境用の制約ファイルを `requirements.txt` ファイルの先頭に追加します。Apache Airflow の制約ファイルには、Apache Airflow のリリース時点で利用可能なプロバイダーのバージョンが指定されています。

    Apache Airflow v2.7.2 から、要件ファイルには `--constraint` ステートメントを含める必要があります。制約を指定しない場合、要件に記載されているパッケージが使用している Apache Airflow のバージョンと互換性があることを確認するため、Amazon MWAA はお客様に代わって制約を指定します。

   次の例では、*\$1environment-version\$1* をお使いの環境のバージョン番号に、*\$1Python-version\$1* を環境と互換性のある Python のバージョンに置き換えます。

   Apache Airflow 環境と互換性のある Python のバージョンについては、[Apache Airflow のバージョン](airflow-versions.md#airflow-versions-official) を参照してください。

   ```
   --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 ログへのアクセス](monitoring-airflow.md) を参照してください。

1. Apache Airflow パッケージ。[パッケージエクストラ](http://airflow.apache.org/docs/apache-airflow/2.5.1/extra-packages-ref.html) とバージョン (`==`) を追加します。これにより、同じ名前で異なるバージョンのパッケージが環境にインストールされるのを防ぐことができます。

   ```
   apache-airflow[package-extra]==2.5.1
   ```

1. Python ライブラリ パッケージ名とバージョン (`==`) を `requirements.txt` ファイルに追加します。これにより、[PyPI.org](https://pypi.org) からの将来の重大な更新が自動的に適用されるのを防ぐことができます。

   ```
   library == version
   ```  
**Example 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](https://pypi.org) からパッケージの最新バージョンをインストールします。このバージョンは、お客様の `requirements.txt` 内の他のパッケージと競合する可能性があります。

------

## `requirements.txt` を Amazon S3 にアップロードします。
<a name="configuring-dag-dependencies-upload"></a>

Amazon S3 コンソールまたは AWS Command Line Interface (AWS CLI) を使用して、Amazon S3 バケットに`requirements.txt`ファイルをアップロードできます。

### の使用 AWS CLI
<a name="configuring-dag-dependencies-upload-cli"></a>

 AWS Command Line Interface (AWS CLI) は、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りするために使用できるオープンソースツールです。このページのステップを完了するには、以下のものが必要です。
+ [AWS CLI – バージョン 2 をインストール](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)します。
+ [AWS CLI – を使用したクイック設定`aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

**を使用してアップロードするには AWS CLI**

1. 以下のコマンドを使って、Amazon S3 バケットをすべてリストアップします

   ```
   aws s3 ls
   ```

1. 以下のコマンドを使用して、ご使用の環境の Amazon S3 バケット内のファイルとフォルダを一覧表示します。

   ```
   aws s3 ls s3://YOUR_S3_BUCKET_NAME
   ```

1. 以下のコマンドにより、`requirements.txt` ファイルが Amazon S3 にアップロードされます。

   ```
   aws s3 cp requirements.txt s3://amzn-s3-demo-bucket/requirements.txt
   ```

### Amazon S3 コンソールの使用
<a name="configuring-dag-dependencies-upload-console"></a>

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

**Amazon S3 コンソールを使ってアップロードするには**

1. Amazon MWAA コンソールで、[環境ページ](https://console.aws.amazon.com/mwaa/home#/environments) を開きます。

1. 環境を選択します。

1. コンソールの **DAG コード in S3** ペインで **S3 バケット** リンクを選択して、ストレージバケットを開きます。

1. **アップロード** を選択します。

1. **ファイルの追加** を選択します。

1. `requirements.txt` のローカルコピーを選択し、**アップロード** を選択します。

## 環境への Python 依存関係のインストール
<a name="configuring-dag-dependencies-installing"></a>

このセクションでは、requirements.txt ファイルへのパスを指定し、更新されるたびに requirements.txt ファイルのバージョンを指定することで、Amazon S3 バケットにアップロードした依存関係をインストールする方法について説明します。

### Amazon MWAA コンソールで `requirements.txt` へのパスを指定する（初回）
<a name="configuring-dag-dependencies-first"></a>

これが初めて `requirements.txt` を作成してAmazon S3 バケットにアップロードする場合、Amazon MWAA コンソールでファイルへのパスも指定する必要があります。1 回だけこのステップを行ってください。

1. Amazon MWAA コンソールで、[環境ページ](https://console.aws.amazon.com/mwaa/home#/environments) を開きます。

1. 環境を選択します。

1. **編集** を選択します。

1. **Amazon S3 ペインの DAG コード** で、**要件ファイル - オプション** フィールドに隣接する **S3 の参照** を選択します。

1. Amazon S3 バケット上の `requirements.txt` ファイルを選択します。

1. **選択** を選択します。

1. **次へ** → **環境の更新** を選択します。

環境の更新が完了した直後に、新しいパッケージの使用を開始できます。

### Amazon MWAA コンソールで`requirements.txt`のバージョンを指定する。
<a name="working-dags-dependencies-mwaaconsole-version"></a>

新しいバージョンの `requirements.txt` を Amazon S3 バケットにアップロードするたびに、Amazon MWAA コンソールで `requirements.txt` ファイルのバージョンを指定する必要があります。

1. Amazon MWAA コンソールで、[環境ページ](https://console.aws.amazon.com/mwaa/home#/environments) を開きます。

1. 環境を選択します。

1. **編集** を選択します。

1. **Amazon S3 の DAG コードペイン**で、ドロップダウンリストから `requirements.txt` のバージョンを選択します。

1. **次へ** → **環境の更新** を選択します。

環境の更新が完了した直後に、新しいパッケージの使用を開始できます。

## `requirements.txt` のログにアクセスする
<a name="working-dags-dependencies-logs"></a>

ワークフローのスケジュール設定と `dags` フォルダーの解析を行うスケジューラーの Apache Airflow ログを表示できます。次のステップでは、Amazon MWAA コンソールでスケジューラーのロググループを開き、CloudWatch Logs コンソールで Apache Airflow ログにアクセスする方法について説明します。

**`requirements.txt` のログにアクセスするには**

1. Amazon MWAA コンソールで、[環境ページ](https://console.aws.amazon.com/mwaa/home#/environments) を開きます。

1. 環境を選択します。

1. **モニタリング** ペインで **Airflow スケジューラーロググループ** を選択します。

1. **ログストリーム** の `requirements_install_ip` ログを選択します。

1. 環境にインストールされたパッケージのリストについては、`/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))
   ```

1. パッケージのリストを確認し、インストール中にエラーが発生したパッケージがないか確認してください。何か問題が発生した場合、次のようなエラーが表示されます。

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

## 次のステップ
<a name="working-dags-dependencies-next-up"></a>

GitHub の [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) を使用して、DAG、カスタムプラグイン、Python の依存関係をローカルでテストします。