AWS Glue では、AWS Glue ETL で使用する追加の Python モジュールとライブラリをインストールできます。
requirements.txt を使用して AWS Glue 5.0 に追加の Python ライブラリをインストールする
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
pip を使用して追加の Python モジュールを AWS Glue 2.0 以降にインストールする
AWS Glue は Python パッケージインストーラー (pip3) を使用して、AWS Glue の ETL で使用する追加モジュールをインストールします。--additional-python-modules
パラメータでコンマ区切りの Python モジュールのリストを指定することで、新しいモジュールを追加したり、既存のモジュールのバージョンを変更したりできます。Amazon S3 にディストリビューションをアップロードすることでライブラリのカスタムディストリビューションをインストールできます。その後で、モジュールのリストに Amazon S3 オブジェクトへのパスを含めます。
--python-modules-installer-option
パラメータを使用すると、pip3 に追加オプションを渡すことができます。例えば "--upgrade"
を渡すことで、"--additional-python-modules"
で指定されたパッケージをアップグレードできます。その他の例については、「AWS Glue 2.0 を使用して Spark ETL ワークロード用のホイールから Python モジュールを構築する
Python の依存関係が、ネイティブのコンパイル済みコードに過渡的に依存している場合、AWS Glue がジョブ環境でのネイティブコードのコンパイルをサポートしていない、という制限による影響を受ける場合があります。ただし、AWS Glue のジョブは、Amazon Linux 2 環境内での実行が可能です。ディストリビューション版 Wheel を通じて、ネイティブの依存関係をコンパイルされた形式で提供できる場合があります。
例えば、更新したり新しい scikit-learn
モジュールを追加したりするには、"--additional-python-modules", "scikit-learn==0.21.3"
のキー/値を使用します。
また、--additional-python-modules
オプションの中で、Python ホイールモジュールへの Amazon S3 パスを指定できます。以下に例を示します。
--additional-python-modules s3://aws-glue-native-spark/tests/j4.2/ephem-3.7.7.1-cp37-cp37m-linux_x86_64.whl,s3://aws-glue-native-spark/tests/j4.2/fbprophet-0.6-py3-none-any.whl,scikit-learn==0.21.3
--additional-python-modules
は、AWS Glue コンソールの [ジョブパラメータ] フィールドを使用して指定するか、AWS SDK でジョブの引数を変更して指定します。ジョブパラメータの設定については、「AWS Glue ジョブでジョブパラメータを使用する」を参照してください。
PySpark のネイティブ機能を使用して Python ファイルを含める
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--extra-py-files
が便利です。依存関係ツールをメンテナンス可能にするには、送信する前に依存関係をバンドルする必要があります。
ビジュアル変換を使用するプログラミングスクリプト
AWS Glue Studio のビジュアルインターフェイスを使用して AWS Glue ジョブを作成するとき、マネージドデータトランスフォームノードおよびカスタムビジュアル変換を使用してデータを変換できます。マネージドデータ変換ノードの詳細については、「AWS Glue マネージド変換によるデータの変換」を参照してください。カスタムビジュアル変換の詳細については、「 カスタムビジュアル変換によるデータの変換 」を参照してください。ビジュアル変換を使用するスクリプトは、ジョブの [言語] が Python を使用するように設定されている場合にのみ生成できます。
ビジュアル変換を使用して AWS Glue ジョブを生成する場合、AWS Glue Studio はジョブ設定の --extra-py-files
パラメータを使用し、これらの変換をランタイム環境に組み込みます。ジョブパラメータについては、「AWS Glue ジョブでジョブパラメータを使用する」を参照してください。生成されたスクリプトまたはランタイム環境を変更するとき、スクリプトを正常に実行するためにこのジョブ設定を保存する必要があります。
AWS Glue で提供済みの Python モジュール
これらの提供済みモジュールのバージョンを変更するには、--additional-python-modules
ジョブパラメータにより新しいバージョンを指定します。
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==22.3.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
取り込みのためのライブラリの圧縮
ライブラリは、単一の .py
ファイルに含まれていない限り、.zip
アーカイブにパッケージ化される必要があります。パッケージディレクトリは、アーカイブのルートにあって、パッケージの __init__.py
ファイルを含んでいる必要があります。そうすると、Python は通常の方法でパッケージをインポートできるようになります。
ライブラリが 1 つの .py
ファイルにある単一の Python モジュールでのみ構成されている場合、.zip
ファイルに入れる必要はありません。
Glue Studio ノートブックでの Python AWS ライブラリのロード
Glue Studio ノートブックで Python AWS ライブラリを指定するには、「追加の Python モジュールのインストール」を参照してください。
開発エンドポイントへの Python ライブラリのロード
異なる 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_dev_endpoint) を呼び出して開発エンドポイントを作成する場合、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 オブジェクトを使用し UpdateDevEndpoint (update_dev_endpoint) の呼び出し時に UpdateEtlLibraries
パラメータを True
に設定して、ロードするライブラリも更新できます。
ジョブまたは JobRun での Python ライブラリの使用
コンソールで新しいジョブを作成する際、[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_job) を呼び出している場合は、以下のようにデフォルトの --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
'})