

# AWS Glue での Python ライブラリの使用
<a name="aws-glue-programming-python-libraries"></a>

 AWS Glue ETL で使用する追加の Python モジュールとライブラリをインストールできます。AWS Glue 2.0 以上の場合、AWS Glue は Python パッケージインストーラ (pip3) を使用して、AWS Glue ETL で使用する追加モジュールをインストールします。AWSGlue には、追加の Python モジュールを AWS Glue ジョブ環境に持ち込むための複数のオプションが用意されています。`--additional-python-modules` パラメータを使用して、バンドルされた Python ホイールを含む zip ファイル (「ホイールの zip」とも呼ばれ、Glue 5.0 AWS 以降で使用可能）、個々の Python ホイールファイル、要件ファイル (requirements.txt、Glue 5.0 AWS 以降で使用可能）、またはカンマ区切りの Python モジュールのリストを使用して、新しいモジュールを追加できます。また、AWS Glue 環境で提供される Python モジュールのバージョンを変更するためにも使用できます (詳細については、「[AWS Glue で提供済みの Python モジュール](#glue-modules-provided)」を参照）。

**Topics**
+ [pip を使用して追加の Python モジュールを AWS Glue 2.0 以降にインストールする](#addl-python-modules-support)
+ [PySpark のネイティブ機能を使用して Python ファイルを含める](#extra-py-files-support)
+ [ビジュアル変換を使用するプログラミングスクリプト](#aws-glue-programming-with-cvt)
+ [取り込みのためのライブラリの圧縮](#aws-glue-programming-python-libraries-zipping)
+ [Glue Studio ノートブックでの Python AWS ライブラリのロード](#aws-glue-programming-python-libraries-notebooks)
+ [AWS Glue 0.9/1.0 の開発エンドポイントへの Python ライブラリのロード](#aws-glue-programming-python-libraries-dev-endpoint)
+ [ジョブまたは JobRun での Python ライブラリの使用](#aws-glue-programming-python-libraries-job)
+ [Python の依存関係をプロアクティブに分析する](#aws-glue-programming-analyzing-python-dependencies)
+ [AWS Glue で提供済みの Python モジュール](#glue-modules-provided)
+ [付録 A: ホイールアーティファクトの Zip の作成](#glue-python-library-zip-of-wheels-appendix)
+ [付録 B: AWS Glue 環境の詳細](#glue-python-libraries-environment-details)

## pip を使用して追加の Python モジュールを AWS Glue 2.0 以降にインストールする
<a name="addl-python-modules-support"></a>

AWS Glue は Python パッケージインストーラー (pip3) を使用して、AWS Glue ETL で使用する追加モジュールをインストールします。`--additional-python-modules` パラメータでコンマ区切りの Python モジュールのリストを指定することで、新しいモジュールを追加したり、既存のモジュールのバージョンを変更したりできます。ビルド済みのホイールアーティファクトは、ファイルを Amazon S3 にアップロードし、モジュールのリストに Amazon S3 オブジェクトへのパスを指定することで、ホイールの zip またはスタンドアロンのホイールアーティファクトとしてインストールできます。ジョブパラメータの設定の詳細については、[AWS Glue ジョブでジョブパラメータを使用する](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html) を参照してください。

 `--python-modules-installer-option` パラメータを使用すると、pip3 に追加オプションを渡すことができます。たとえば、`--only-binary` を渡して、`--additional-python-modules` で指定したパッケージについて、ビルド済みのアーティファクトのみをインストールするよう pip に強制できます。その他の例については、[AWS Glue 2.0 を使用して Spark ETL ワークロード用のホイールから Python モジュールを構築する](https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/) を参照してください。

### Python 依存関係管理のベストプラクティス
<a name="glue-python-library-best-practices"></a>

本番ワークロードの場合、Glue AWS はすべての Python 依存関係をホイールファイルとして単一の zip アーティファクトにパッケージ化することを推奨します。このアプローチにより、以下が提供されます。
+ **決定的実行**: インストールされるパッケージバージョンの正確な制御
+ **信頼性**: ジョブの実行中に外部パッケージリポジトリに依存しない
+ **パフォーマンス**: 複数のネットワーク呼び出しではなく 1 回のダウンロードオペレーションで可能
+ **オフラインインストール**: インターネットアクセスのないプライベート VPC 環境で動作

#### 重要な考慮事項
<a name="glue-python-library-important-considerations"></a>

[AWS 責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)では、お客様が追加の Python モジュール、ライブラリ、およびそれらの依存関係を管理する責任があります。これには、以下が含まれます。
+ **セキュリティ更新**: セキュリティの脆弱性に対処するためのパッケージの定期的な更新
+ **バージョンの互換性: **パッケージが Glue AWS バージョンと互換性があることを確認
+ **テスト**: パッケージ化された依存関係が Glue 環境で正しく機能することの検証

依存関係が最小限の場合は、個別のホイールファイルの使用を検討してください。

### (推奨) Zip of Wheels を使用して AWS Glue 5.0 以降に追加の Python ライブラリをインストールする
<a name="glue-python-library-installing-zip-of-wheels"></a>

AWS Glue 5.0 以降では、より信頼性が高く決定論的な依存関係管理を実現するため、複数のホイールファイルを、バンドルされた Python ホイールを含む 1 つの zip アーティファクトにパッケージ化できます。このアプローチを使用するには、すべてのホイール依存関係とその推移的依存関係を含む zip ファイルを `.gluewheels.zip` サフィックスで作成し、Amazon S3 にアップロードして、`--additional-python-modules` パラメータを使用して参照します。`--python-modules-installer-option` ジョブパラメータに `--no-index` を必ず追加します。この設定では、ホイールファイルの zip は基本的に pip のローカルインデックスとして機能し、ランタイムに依存関係を解決します。これにより、ジョブ実行中に PyPI などの外部パッケージリポジトリへの依存が排除され、本番ワークロードの安定性と一貫性が向上します。例えば、次のようになります。

```
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/zip-of-wheels-1.0.0.gluewheels.zip
--python-modules-installer-option --no-index
```

ホイールファイルの zip 作成方法については、「[付録 A: ホイールアーティファクトの Zip の作成](#glue-python-library-zip-of-wheels-appendix)」を参照してください。

### Wheel を使用した追加の Python ライブラリのインストール
<a name="glue-python-library-installing-wheel"></a>

AWS Glue では、Amazon S3 に保存されている wheel (.whl) ファイルを使用したカスタム Python パッケージのインストールをサポートしています。AWS Glue ジョブに wheel ファイルを含めるには、s3 に保存されている wheel ファイルのカンマ区切りリストを `--additional-python-modules` ジョブパラメータに渡します。例えば、次のようになります。

```
--additional-python-modules s3://amzn-s3-demo-bucket/path/to/package-1.0.0-py3-none-any.whl,s3://your-bucket/path/to/another-package-2.1.0-cp311-cp311-linux_x86_64.whl
```

このアプローチでは、カスタムディストリビューションが必要な場合や、適切なオペレーティングシステム用にプリコンパイルされたネイティブの依存関係を持つパッケージが必要な場合でもサポートされます。その他の例については、[Building Python modules from a wheel for Spark ETL workloads using AWS Glue 2.0](https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/) を参照してください。

### requirements.txt を使用して AWS Glue 5.0 以降に追加の Python ライブラリをインストールする
<a name="addl-python-modules-requirements-txt"></a>

AWS Glue 5.0 以降では、Python ライブラリの依存関係を管理するための業界標準である `requirements.txt` を指定できます。そのためにはまず、次の 2 つのジョブパラメータを指定します。
+ キー: `--python-modules-installer-option`

  値: `-r`
+ キー: `--additional-python-modules`

  値: `s3://path_to_requirements.txt`

AWS Glue 5.0 ノードは、`requirements.txt` で指定された Python ライブラリを最初にロードします。

次に requirements.txt の例を示します。

```
awswrangler==3.9.1
elasticsearch==8.15.1
PyAthena==3.9.0
PyMySQL==1.1.1
PyYAML==6.0.2
pyodbc==5.2.0
pyorc==0.9.0
redshift-connector==2.1.3
scipy==1.14.1
scikit-learn==1.5.2
SQLAlchemy==2.0.36
```

**重要**  
このオプションは、特に本番環境のワークロードでは注意して使用してください。ランタイムに PyPI から依存関係をプルすることは、アーティファクト pip が解決されるかどうかがわからないため、非常にリスクが高くなります。ピン留めされていないライブラリバージョンを使用すると、Python モジュールの最新バージョンがプルされるため、特にリスクが高くなります。これにより、重大な変更が発生したり、互換性のない Python モジュールが取り込まれたりする可能性があります。これにより、AWS Glue ジョブ環境での Python のインストールエラーにより、ジョブが失敗する可能性があります。ライブラリバージョンを固定すると安定性が向上しますが、pip 解決はまだ完全には決定的ではないため、同様の問題が発生する可能性があります。ベストプラクティスとして、AWS Glue では、ホイールの zip や個々のホイールファイルなどの固定アーティファクトを使用することをお勧めします (詳細については「[(推奨) Zip of Wheels を使用して AWS Glue 5.0 以降に追加の Python ライブラリをインストールする](#glue-python-library-installing-zip-of-wheels)」を参照）。

**重要**  
推移的依存関係のバージョンを固定しない場合、プライマリ依存関係は互換性のない推移的依存関係バージョンをプルする可能性があります。ベストプラクティスとして、AWS Glue ジョブの一貫性を高めるために、すべてのライブラリバージョンを固定する必要があります。さらに、AWS Glue では、本番ワークロードの一貫性と信頼性を最大限に確保するため、依存関係をホイールの zip ファイルにパッケージ化することを推奨しています。

### カンマ区切りリストとして直接設定し追加の Python ライブラリをインストールする
<a name="glue-python-library-installing-comma-separated-list"></a>

新しい Python モジュール AWS Glue を更新または追加するには、カンマ区切りの Python モジュールのリストを値として `--additional-python-modules` パラメータを渡すことができます。例えば、更新や新しい scikit-learn モジュールの追加には、`"--additional-python-modules", "scikit-learn==0.21.3"` のキー/値を使用します。Python モジュールを直接設定するには 2 つのオプションがあります。
+ **ピン留めされた Python モジュール**

  `"--additional-python-modules", "scikit-learn==0.21.3,ephem==4.1.6"`
+ **固定されていない Python モジュール: (本番稼働用ワークロードには推奨されません)**

  `"--additional-python-modules", "scikit-learn>==0.20.0,ephem>=4.0.0"`

  OR

  `"--additional-python-modules", "scikit-learn,ephem"`

**重要**  
このオプションは、特に本番環境のワークロードでは注意して使用してください。ランタイムに PyPI から依存関係をプルすることは、アーティファクト pip が解決されるかどうかがわからないため、非常にリスクが高くなります。ピン留めされていないライブラリバージョンを使用すると、Python モジュールの最新バージョンがプルされるため、特にリスクが高くなります。これにより、重大な変更が発生したり、互換性のない Python モジュールが取り込まれたりする可能性があります。これにより、AWS Glue ジョブ環境での Python のインストールエラーにより、ジョブが失敗する可能性があります。ライブラリバージョンを固定すると安定性が向上しますが、pip 解決はまだ完全には決定的ではないため、同様の問題が発生する可能性があります。ベストプラクティスとして、AWS Glue では、ホイールの zip や個々のホイールファイルなどの固定アーティファクトを使用することをお勧めします (詳細については「[(推奨) Zip of Wheels を使用して AWS Glue 5.0 以降に追加の Python ライブラリをインストールする](#glue-python-library-installing-zip-of-wheels)」を参照）。

**重要**  
推移的依存関係のバージョンを固定しない場合、プライマリ依存関係は互換性のない推移的依存関係バージョンをプルする可能性があります。ベストプラクティスとして、AWS Glue ジョブの一貫性を高めるために、すべてのライブラリバージョンを固定する必要があります。さらに、AWS Glue では、本番環境のワークロードの一貫性と信頼性を最大限に高めるために、依存関係をホイールの zip ファイルにパッケージ化することをお勧めします。

## PySpark のネイティブ機能を使用して Python ファイルを含める
<a name="extra-py-files-support"></a>

AWS Glue では、PySpark を使用して、AWS Glue ETL ジョブに Python ファイルを含めます。可能な場合には、依存関係を管理するために、`--additional-python-modules` を使用することが必要になります。Python ファイルをインクルードするには、`--extra-py-files` ジョブパラメータを使用します。依存関係は Amazon S3 でホストされている必要があり、引数の値は、スペースを含まない Amazon S3 パスのカンマ区切りリストである必要があります。この機能は、Spark で使用する Python の依存関係管理のように動作します。Spark での Python の依存関係管理の詳細については、Apache Spark ドキュメントの「[Using PySpark Native Features](https://spark.apache.org/docs/latest/api/python/tutorial/python_packaging.html#using-pyspark-native-features)」(PySpark のネイティブ機能を使う) ページを参照してください。追加のコードがパッケージ化されていない場合や、依存関係を管理するために既存のツールチェーンを使用して Spark プログラムを移行する場合には、`--extra-py-files` が便利です。依存関係ツールをメンテナンス可能にするには、送信する前に依存関係をバンドルする必要があります。

## ビジュアル変換を使用するプログラミングスクリプト
<a name="aws-glue-programming-with-cvt"></a>

 AWS Glue Studio のビジュアルインターフェイスを使用して AWS Glue ジョブを作成するとき、マネージドデータトランスフォームノードおよびカスタムビジュアル変換を使用してデータを変換できます。マネージドデータ変換ノードの詳細については、[AWS Glue マネージド変換によるデータの変換](edit-jobs-transforms.md) を参照してください。カスタムビジュアル変換の詳細については、[カスタムビジュアル変換によるデータの変換](custom-visual-transform.md) を参照してください。ビジュアル変換を使用するスクリプトは、ジョブの **[言語]** が Python を使用するように設定されている場合にのみ生成できます。

 ビジュアル変換を使用して AWS Glue ジョブを生成する場合、AWS Glue Studio はジョブ設定の `--extra-py-files` パラメータを使用し、これらの変換をランタイム環境に組み込みます。ジョブパラメータについては、[AWS Glue ジョブでジョブパラメータを使用する](aws-glue-programming-etl-glue-arguments.md) を参照してください。生成されたスクリプトまたはランタイム環境を変更するとき、スクリプトを正常に実行するためにこのジョブ設定を保存する必要があります。

## 取り込みのためのライブラリの圧縮
<a name="aws-glue-programming-python-libraries-zipping"></a>

ライブラリは、単一の `.py` ファイルに含まれていない限り、`.zip` アーカイブにパッケージ化される必要があります。パッケージディレクトリは、アーカイブのルートにあって、パッケージの `__init__.py` ファイルを含んでいる必要があります。そうすると、Python は通常の方法でパッケージをインポートできるようになります。

ライブラリが 1 つの `.py` ファイルにある単一の Python モジュールでのみ構成されている場合、`.zip` ファイルに入れる必要はありません。

## Glue Studio ノートブックでの Python AWS ライブラリのロード
<a name="aws-glue-programming-python-libraries-notebooks"></a>

 Glue Studio ノートブックで Python AWS ライブラリを指定するには、[追加 Python モジュールのインストール](https://docs.aws.amazon.com/glue/latest/dg/manage-notebook-sessions.html#specify-default-modules) を参照してください。

## AWS Glue 0.9/1.0 の開発エンドポイントへの Python ライブラリのロード
<a name="aws-glue-programming-python-libraries-dev-endpoint"></a>

異なる ETL スクリプトに異なるライブラリセットを使用している場合、各セットに別々の開発エンドポイントをセットアップするか、スクリプトを切り替えるたびに開発エンドポイントがロードするライブラリ `.zip` ファイルを上書きすることができます。

コンソールを使用して、作成時に開発エンドポイントに 1 つまたは複数のライブラリ .zip ファイルを指定できます。名前と IAM ロールを割り当てた後、[**Script Libraries and job parameters (optional)**] (スクリプトライブラリおよびジョブパラメータ (任意)) をクリックし、[**Python library path**] (Python ライブラリパス) ボックスに、ライブラリ `.zip` ファイルへの完全な Amazon S3 パスを入力します。例: 

```
s3://bucket/prefix/site-packages.zip
```

必要に応じてファイルへの複数のフルパスを指定できますが、以下のように、スペースなしでカンマで区切ります。

```
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
```

これらの `.zip` ファイルを後で更新する場合は、コンソールを使用して開発エンドポイントにそのファイルを再インポートできます。該当する開発エンドポイントに移動し、横にあるチェックボックスをオンにして、[**Action**] (アクション) メニューから [**Update ETL libraries**] (ETL ライブラリの更新) を選択します。

同様の方法で、AWS Glue API を使用してライブラリファイルを指定できます。[CreateDevEndpoint アクション (Python: create\$1dev\$1endpoint)](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-CreateDevEndpoint) を呼び出して開発エンドポイントを作成する場合、`ExtraPythonLibsS3Path` パラメータでライブラリへの 1 つ以上のフルパスを指定できます。以下のような呼び出しになります。

```
dep = glue.create_dev_endpoint(
             EndpointName="testDevEndpoint",
             RoleArn="arn:aws:iam::123456789012",
             SecurityGroupIds="sg-7f5ad1ff",
             SubnetId="subnet-c12fdba4",
             PublicKey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...",
             NumberOfNodes=3,
             ExtraPythonLibsS3Path="s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip")
```

開発エンドポイントを更新するときに、[DevEndpointCustomLibraries](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-DevEndpointCustomLibraries) オブジェクトを使用し [UpdateDevEndpoint (update\$1dev\$1endpoint)](aws-glue-api-dev-endpoint.md#aws-glue-api-dev-endpoint-UpdateDevEndpoint) の呼び出し時に `UpdateEtlLibraries ` パラメータを `True` に設定して、ロードするライブラリも更新できます。

## ジョブまたは JobRun での Python ライブラリの使用
<a name="aws-glue-programming-python-libraries-job"></a>

コンソールで新しいジョブを作成する際、[**Script Libraries and job parameters (optional)**] (スクリプトライブラリおよびジョブパラメータ (任意)) をクリックし、開発エンドポイント作成時と同じ方法で Amazon S3 ライブラリの完全なパスを入力することで、1 つ以上のライブラリ .zip ファイルを指定できます。

```
s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip
```

[CreateJob (create\$1job)](aws-glue-api-jobs-job.md#aws-glue-api-jobs-job-CreateJob) を呼び出している場合は、以下のようにデフォルトの `--extra-py-files` パラメータを使用してデフォルトのライブラリへの 1 つ以上のフルパスを指定できます。

```
job = glue.create_job(Name='sampleJob',
                      Role='Glue_DefaultRole',
                      Command={'Name': 'glueetl',
                               'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'},
                      DefaultArguments={'--extra-py-files': 's3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip'})
```

その後 JobRun を開始するときに、デフォルトのライブラリ設定を別のもので上書きできます。

```
runId = glue.start_job_run(JobName='sampleJob',
                           Arguments={'--extra-py-files': 's3://bucket/prefix/lib_B.zip'})
```

## Python の依存関係をプロアクティブに分析する
<a name="aws-glue-programming-analyzing-python-dependencies"></a>

 AWS Glue にデプロイする前に潜在的な依存関係の問題をプロアクティブに特定するには、依存関係分析ツールを使用して、ターゲット AWS Glue 環境に対して Python パッケージを検証できます。

 AWS は、AWS Glue 環境専用に設計されたオープンソースの Python 依存関係アナライザーツールを提供します。このツールは AWS Glue サンプルリポジトリで入手でき、デプロイ前にローカルで使用して依存関係を検証できます。

 この分析は、一貫した本番稼働用デプロイのためにすべてのライブラリバージョンを固定するという推奨プラクティスを依存関係が確実に遵守するのに役立ちます。詳細については、ツールの [ README ](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/glue_python_dependency_analyzer) を参照してください。

### AWS Glue Dependency Analyzer の使用
<a name="w2aac67c11c14c18c37c11b1"></a>

 AWS Glue Python Dependency Analyzer は、ターゲット AWS Glue 環境に一致するプラットフォーム固有の制約で pip のインストールをシミュレートすることで、固定されていない依存関係とバージョン競合を特定するのに役立ちます。

```
# Analyze a single Glue job
python glue_dependency_analyzer.py -j my-glue-job

# Analyze multiple jobs with specific AWS configuration
python glue_dependency_analyzer.py -j job1 -j job2 --aws-profile production --aws-region us-west-2
```

 このツールでは、次のフラグが付けられます。
+  ジョブ実行間で異なるバージョンをインストールできる固定されていない依存関係 
+  パッケージ間のバージョン競合 
+  ターゲット AWS Glue 環境で使用できない依存関係 

## Amazon Q Developer での Python 依存関係によるジョブの失敗の分析と修正
<a name="aws-glue-programming-analyze-job-failures-with-amazon-q"></a>

 Amazon Q Developer は、生成人工知能 (AI) を活用した会話型アシスタントであり、AWS アプリケーションの理解、構築、拡張、運用を支援します。Amazon Q の入門ガイドの手順に従ってダウンロードできます。

 Amazon Q Developer を使用して、Python の依存関係によるジョブの失敗を分析および修正できます。ジョブ <Job-Name> プレースホルダーを Glue ジョブの名前に置き換えて、次のプロンプトを使用することをお勧めします。

```
I have an AWS Glue job named <Job-Name> that has failed due to Python module installation conflicts. Please assist in diagnosing and resolving this issue using the following systematic approach. Proceed once sufficient information is available.

Objective: Implement a fix that addresses the root cause module while minimizing disruption to the existing working environment.

Step 1: Root Cause Analysis
• Retrieve the most recent failed job run ID for the specified Glue job
• Extract error logs from CloudWatch Logs using the job run ID as a log stream prefix
• Analyze the logs to identify:
  • The recently added or modified Python module that triggered the dependency conflict
  • The specific dependency chain causing the installation failure
  • Version compatibility conflicts between required and existing modules

Step 2: Baseline Configuration Identification
• Locate the last successful job run ID prior to the dependency failure
• Document the Python module versions that were functioning correctly in that baseline run
• Establish the compatible version constraints for conflicting dependencies

Step 3: Targeted Resolution Implementation
• Apply pinning by updating the job's additional_python_modules parameter
• Pin only the root cause module and its directly conflicting dependencies to compatible versions, and do not remove python modules unless necessary
• Preserve flexibility for non-conflicting modules by avoiding unnecessary version constraints
• Deploy the configuration changes with minimal changes to the existing configuration and execute a validation test run. Do not change the Glue versions.

Implementation Example:
Scenario: Recently added pandas==2.0.0 to additional_python_modules
Error: numpy version conflict (pandas 2.0.0 requires numpy>=1.21, but existing job code requires numpy<1.20)
Resolution: Update additional_python_modules to "pandas==1.5.3,numpy==1.19.5"
Rationale: Use pandas 1.5.3 (compatible with numpy 1.19.5) and pin numpy to last known working version

Expected Outcome: Restore job functionality with minimal configuration changes while maintaining system stability.
```

 プロンプトは Q に次のように指示します。

1. 最後に失敗したジョブ実行 ID を取得する

1. 関連するログと詳細を検索する

1. 変更された Python パッケージを検出するため、正常なジョブ実行を検索する

1. 設定を修正し、別のテストランをトリガーする

## AWS Glue で提供済みの Python モジュール
<a name="glue-modules-provided"></a>

これらの提供済みモジュールのバージョンを変更するには、`--additional-python-modules` ジョブパラメータにより新しいバージョンを指定します。

------
#### [ AWS Glue version 5.1 ]

AWS Glue バージョン 5.1 には、すぐに使用できる次の Python モジュールが含まれています。
+ aiobotocore==2.25.1
+ aiohappyeyeballs==2.6.1
+ aiohttp==3.13.2
+ aioitertools==0.12.0
+ aiosignal==1.4.0
+ appdirs==1.4.4
+ attrs==25.4.0
+ boto3==1.40.61
+ botocore==1.40.61
+ certifi==2025.10.5
+ charset-normalizer==3.4.4
+ choreographer==1.2.0
+ contourpy==1.3.3
+ cycler==0.12.1
+ distlib==0.4.0
+ filelock==3.20.0
+ fonttools==4.60.1
+ frozenlist==1.8.0
+ fsspec==2025.10.0
+ idna==3.11
+ iniconfig==2.3.0
+ jmespath==1.0.1
+ kaleido==1.2.0
+ kiwisolver==1.4.9
+ logistro==2.0.1
+ matplotlib==3.10.7
+ multidict==6.7.0
+ narwhals==2.10.2
+ numpy==2.3.4
+ orjson==3.11.4
+ packaging==25.0
+ pandas==2.3.3
+ pillow==12.0.0
+ pip==24.0
+ platformdirs==4.5.0
+ plotly==6.4.0
+ pluggy==1.6.0
+ propcache==0.4.1
+ pyarrow==22.0.0
+ Pygments==2.19.2
+ pyparsing==3.2.5
+ pytest-timeout==2.4.0
+ pytest==8.4.2
+ python-dateutil==2.9.0.post0
+ pytz==2025.2
+ requests==2.32.5
+ s3fs==2025.10.0
+ s3transfer==0.14.0
+ seaborn==0.13.2
+ setuptools==79.0.1
+ simplejson==3.20.2
+ six==1.17.0
+ tenacity==9.1.2
+ typing\$1extensions==4.15.0
+ tzdata==2025.2
+ urllib3==2.5.0
+ uv==0.9.7
+ virtualenv==20.35.4
+ wrapt==1.17.3
+ yarl==1.22.0

------
#### [ AWS Glue version 5.0 ]

AWS Glue バージョン 5.0 には、すぐに使用できる次の Python モジュールが含まれています。
+ aiobotocore==2.13.1
+ aiohappyeyeballs==2.3.5
+ aiohttp==3.10.1
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ appdirs==1.4.4
+ attrs==24.2.0
+ boto3==1.34.131
+ botocore==1.34.131
+ certifi==2024.7.4
+ charset-normalizer==3.3.2
+ contourpy==1.2.1
+ cycler==0.12.1
+ fonttools==4.53.1
+ frozenlist==1.4.1
+ fsspec==2024.6.1
+ idna==2.10
+ jmespath==0.10.0
+ kaleido==0.2.1
+ kiwisolver==1.4.5
+ matplotlib==3.9.0
+ multidict==6.0.5
+ numpy==1.26.4
+ packaging==24.1
+ pandas==2.2.2
+ pillow==10.4.0
+ pip==23.0.1
+ plotly==5.23.0
+ pyarrow==17.0.0
+ pyparsing==3.1.2
+ python-dateutil==2.9.0.post0
+ pytz==2024.1
+ requests==2.32.2
+ s3fs==2024.6.1
+ s3transfer==0.10.2
+ seaborn==0.13.2
+ setuptools==59.6.0
+ six==1.16.0
+ tenacity==9.0.0
+ tzdata==2024.1
+ urllib3==1.25.10
+ virtualenv==20.4.0
+ wrapt==1.16.0
+ yarl==1.9.4

------
#### [ AWS Glue version 4.0 ]

AWS Glue バージョン 4.0 には、すぐに使用できる次の Python モジュールが含まれています。
+ aiobotocore==2.4.1
+ aiohttp==3.8.3
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ async-timeout==4.0.2
+ asynctest==0.13.0
+ attrs==22.2.0
+ avro-python3==1.10.2
+ boto3==1.24.70
+ botocore==1.27.59
+ certifi==2021.5.30
+ chardet==3.0.4
+ charset-normalizer==2.1.1
+ click==8.1.3
+ cycler==0.10.0
+ Cython==0.29.32
+ fsspec==2021.8.1
+ idna==2.10
+ importlib-metadata==5.0.0
+ jmespath==0.10.0
+ joblib==1.0.1
+ kaleido==0.2.1
+ kiwisolver==1.4.4
+ matplotlib==3.4.3
+ mpmath==1.2.1
+ multidict==6.0.4
+ nltk==3.7
+ numpy==1.23.5
+ packaging==23.0
+ pandas==1.5.1
+ patsy==0.5.1
+ Pillow==9.4.0
+ pip==23.0.1
+ plotly==5.16.0
+ pmdarima==2.0.1
+ ptvsd==4.3.2
+ pyarrow==10.0.0
+ pydevd==2.5.0
+ pyhocon==0.3.58
+ PyMySQL==1.0.2
+ pyparsing==2.4.7
+ python-dateutil==2.8.2
+ pytz==2021.1
+ PyYAML==6.0.1
+ regex==2022.10.31
+ requests==2.23.0
+ s3fs==2022.11.0
+ s3transfer==0.6.0
+ scikit-learn==1.1.3
+ scipy==1.9.3
+ setuptools==49.1.3
+ six==1.16.0
+ statsmodels==0.13.5
+ subprocess32==3.5.4
+ sympy==1.8
+ tbats==1.1.0
+ threadpoolctl==3.1.0
+ tqdm==4.64.1
+ typing\$1extensions==4.4.0
+ urllib3==1.25.11
+ wheel==0.37.0
+ wrapt==1.14.1
+ yarl==1.8.2
+ zipp==3.10.0

------
#### [ AWS Glue version 3.0 ]

AWS Glue バージョン 3.0 には、すぐに使用できる次の Python モジュールが含まれています。
+ aiobotocore==1.4.2
+ aiohttp==3.8.3
+ aioitertools==0.11.0
+ aiosignal==1.3.1
+ async-timeout==4.0.2
+ asynctest==0.13.0
+ attrs==22.2.0
+ avro-python3==1.10.2
+ boto3==1.18.50
+ botocore==1.21.50
+ certifi==2021.5.30
+ chardet==3.0.4
+ charset-normalizer==2.1.1
+ click==8.1.3
+ cycler==0.10.0
+ Cython==0.29.4
+ docutils==0.17.1
+ enum34==1.1.10
+ frozenlist==1.3.3
+ fsspec==2021.8.1
+ idna==2.10
+ importlib-metadata==6.0.0
+ jmespath==0.10.0
+ joblib==1.0.1
+ kiwisolver==1.3.2
+ matplotlib==3.4.3
+ mpmath==1.2.1
+ multidict==6.0.4
+ nltk==3.6.3
+ numpy==1.19.5
+ packaging==23.0
+ pandas==1.3.2
+ patsy==0.5.1
+ Pillow==9.4.0
+ pip==23.0
+ pmdarima==1.8.2
+ ptvsd==4.3.2
+ pyarrow==5.0.0
+ pydevd==2.5.0
+ pyhocon==0.3.58
+ PyMySQL==1.0.2
+ pyparsing==2.4.7
+ python-dateutil==2.8.2
+ pytz==2021.1
+ PyYAML==5.4.1
+ regex==2022.10.31
+ requests==2.23.0
+ s3fs==2021.8.1
+ s3transfer==0.5.0
+ scikit-learn==0.24.2
+ scipy==1.7.1
+ six==1.16.0
+ Spark==1.0
+ statsmodels==0.12.2
+ subprocess32==3.5.4
+ sympy==1.8
+ tbats==1.1.0
+ threadpoolctl==3.1.0
+ tqdm==4.64.1
+ typing\$1extensions==4.4.0
+ urllib3==1.25.11
+ wheel==0.37.0
+ wrapt==1.14.1
+ yarl==1.8.2
+ zipp==3.12.0

------
#### [ AWS Glue version 2.0 ]

AWS Glue バージョン 2.0 には、すぐに使用できる次の Python モジュールが含まれています。
+ avro-python3==1.10.0
+ awscli==1.27.60
+ boto3==1.12.4
+ botocore==1.15.4
+ certifi==2019.11.28
+ chardet==3.0.4
+ click==8.1.3
+ colorama==0.4.4
+ cycler==0.10.0
+ Cython==0.29.15
+ docutils==0.15.2
+ enum34==1.1.9
+ fsspec==0.6.2
+ idna==2.9
+ importlib-metadata==6.0.0
+ jmespath==0.9.4
+ joblib==0.14.1
+ kiwisolver==1.1.0
+ matplotlib==3.1.3
+ mpmath==1.1.0
+ nltk==3.5
+ numpy==1.18.1
+ pandas==1.0.1
+ patsy==0.5.1
+ pmdarima==1.5.3
+ ptvsd==4.3.2
+ pyarrow==0.16.0
+ pyasn1==0.4.8
+ pydevd==1.9.0
+ pyhocon==0.3.54
+ PyMySQL==0.9.3
+ pyparsing==2.4.6
+ python-dateutil==2.8.1
+ pytz==2019.3
+ PyYAML==5.3.1
+ regex==2022.10.31
+ requests==2.23.0
+ rsa==4.7.2
+ s3fs==0.4.0
+ s3transfer==0.3.3
+ scikit-learn==0.22.1
+ scipy==1.4.1
+ setuptools==45.2.0
+ six==1.14.0
+ Spark==1.0
+ statsmodels==0.11.1
+ subprocess32==3.5.4
+ sympy==1.5.1
+ tbats==1.0.9
+ tqdm==4.64.1
+ typing-extensions==4.4.0
+ urllib3==1.25.8
+ wheel==0.35.1
+ zipp==3.12.0

------

## 付録 A: ホイールアーティファクトの Zip の作成
<a name="glue-python-library-zip-of-wheels-appendix"></a>

この例では、ホイールアーティファクトの zip を作成する方法を示します。次の例では、パッケージ `cryptography` と `scipy` をホイールアーティファクトの zip にダウンロードし、ホイールの zip を Amazon S3 の場所にコピーします。

1. コマンドを実行して、Glue の 環境と同様の Amazon Linux 環境でホイールの zip を作成する必要があります。「[付録 B: AWS Glue 環境の詳細](#glue-python-libraries-environment-details)」を参照してください。Glue 5.1 は、Python バージョン 3.11 で AL2023 を使用します。この環境を構築する Dockerfile を作成します。

   ```
   FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux:2023-minimal
   
   # Install Python 3.11, pip, and zip utility
   RUN dnf install -y python3.11 pip zip && \
       dnf clean all
   
   WORKDIR /build
   ```

1. requirements.txt ファイルを作成する

   ```
   cryptography
   scipy
   ```

1. Docker コンテナを構築してスピンアップする

   ```
   # Build docker image
   docker build --platform linux/amd64 -t glue-wheel-builder .
   
   # Spin up container
   docker run --platform linux/amd64 -v $(pwd)/requirements.txt:/input/requirements.txt:ro -v $(pwd):/output -it glue-wheel-builder bash
   ```

1. Docker イメージで次のコマンドを実行する

   ```
   # Create a directory for the wheels
   mkdir wheels
   
   # Copy requirements.txt into wheels directory
   cp /input/requirements.txt wheels/
   
   # Download the wheels with the correct platform and Python version
   pip3 download \
       -r wheels/requirements.txt \
       --dest wheels/ \
       --platform manylinux2014_x86_64 \
       --python-version 311 \
       --only-binary=:all:
   
   # Package the wheels into a zip archive with the .gluewheels.zip suffix
   zip -r mylibraries-1.0.0.gluewheels.zip wheels/
   
   # Copy zip to output
   cp mylibraries-1.0.0.gluewheels.zip /output/
   
   # Exit the container
   exit
   ```

1. ホイールの zip を Amazon S3 にアップロードする

   ```
   aws s3 cp mylibraries-1.0.0.gluewheels.zip s3://amzn-s3-demo-bucket/example-prefix/
   ```

1. オプションのクリーンアップ

   ```
   rm mylibraries-1.0.0.gluewheels.zip
   rm Dockerfile
   rm requirements.txt
   ```

1. 次のジョブ引数を使用して Glue ジョブを実行します。

   ```
   --additional-python-modules s3://amzn-s3-demo-bucket/example-prefix/mylibraries-1.0.0.gluewheels.zip
   --python-modules-installer-option --no-index
   ```

## 付録 B: AWS Glue 環境の詳細
<a name="glue-python-libraries-environment-details"></a>


**Glue のバージョン互換性とインストール方法**  

| AWS Glue のバージョン | Python バージョン | 基本のイメージ | glibc バージョン | 互換性のあるプラットフォームタグ | 
| --- | --- | --- | --- | --- | 
| 5.1 | 3.11 | [Amazon Linux 2023 (AL2023)](https://aws.amazon.com/linux/amazon-linux-2023/) | 2.34 |  manylinux\$12\$134\$1x86\$164 manylinux\$12\$128\$1x86\$164 manylinux2014\$1x86\$164  | 
| 5.0 | 3.11 | [Amazon Linux 2023 (AL2023)](https://aws.amazon.com/linux/amazon-linux-2023/) | 2.34 |  manylinux\$12\$134\$1x86\$164 manylinux\$12\$128\$1x86\$164 manylinux2014\$1x86\$164  | 
| 4.0 | 3.10 | [Amazon Linux 2 (AL2)](https://aws.amazon.com/amazon-linux-2/) | 2.26 | manylinux2014\$1x86\$164 | 
| 3.0 | 37 | [Amazon Linux 2 (AL2)](https://aws.amazon.com/amazon-linux-2/) | 2.26 | manylinux2014\$1x86\$164 | 
| 2.0 | 37 | [Amazon Linux AMI (AL1)](https://aws.amazon.com/amazon-linux-ami/) | 2.17 | manylinux2014\$1x86\$164 | 

 [AWS 責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/) では、お客様が AWS Glue ETL ジョブで使用する追加の Python モジュール、ライブラリ、およびそれらの依存関係を管理する責任があります。これには、更新とセキュリティパッチの適用が含まれます。

 AWS Glue は、ジョブ環境でのネイティブコードのコンパイルをサポートしていません。ただし、AWS Glue のジョブは、Amazon マネージド Linux 環境内での実行が可能です。Python Wheel ファイルを通じて、ネイティブの依存関係をコンパイルされた形式で提供できる場合があります。AWS Glue のバージョンの互換性の詳細については、上記の表を参照してください。

**重要**  
 互換性のない依存関係を使用すると、ターゲット環境のアーキテクチャとシステムライブラリと一致する必要があるネイティブ拡張機能を持つライブラリの場合は特に、ランタイムの問題が発生する可能性があります。各 AWS Glue バージョンは、ライブラリとシステム設定がプリインストールされた特定の Python バージョンで実行します。