こんにちは、アプリケーションサービス部ディベロップメントサービス1課の外崎です。
今回は、AWS Glue Python Shellジョブについて、独自ライブラリの使用方法、環境変数の指定方法とPythonコード側の読み込み方法についてご紹介します。
AWS Glue Python Shellジョブについて
AWS Glue Pythonシェルジョブは、サーバーレスのETL(抽出、変換、ロード)サービスであるAWS Glueの一部です。Pythonシェルジョブを使用することで、Pythonスクリプトを実行し、データの変換や分析、処理を行うことができます。
※AWS Glueは、Amazon Web Services (AWS) が提供するサーバーレスのETL(抽出、変換、ロード)サービスです。
Pythonシェルジョブの位置付け
AWS GlueにおけるPythonシェルジョブは、ETLジョブの一種です。以下のように位置付けることができます。
AWS Glue
- フルマネージドのETLサービス
- データカタログ、クローラー、ETLジョブなどのコンポーネントから構成される
ETLジョブ
- データの抽出、変換、ロードを行うためのジョブ
- Sparkジョブ、Rayジョブ、Pythonシェルジョブに分類される
Pythonシェルジョブ
- Pythonスクリプトを実行するためのETLジョブ
- Python 3.6 または Python 3.9 と互換性のあるスクリプトを実行することができる
インポート済みのライブラリの種類
AWS Glue Pythonシェルジョブでは、以下のライブラリがデフォルトでインポートされています。
Boto3やPandas、Numpyなど、頻出のライブラリのバージョンが指定されているので開発環境側にてpipenvなどを利用してバージョンを合わせるか、後述のモジュール追加や更新を実施してすることをお勧めします。
独自ライブラリの使用方法
AWS Glue Pythonシェルジョブでは、標準で用意されているライブラリだけでなく、独自モジュールを追加したり、既存モジュールのバージョンを変更したりすることができます。
コンソールでの指定方法
ジョブパラメータにて、--additional-python-modules
を設定することで、外部ライブラリをインストールすることができます。
CLIでの指定方法
--additional-python-modules
を指定して、外部ライブラリをインストールすることができます。
例:pandasを追加する場合 aws glue create-job --name [ジョブ名] --role [ロール名] \ --command '{"Name" : "pythonshell", "PythonVersion": "3.9", "ScriptLocation" : "s3://[バケット名]/[ソースコード名].py"}' \ --max-capacity 0.0625 \ --region ap-northeast-1 \ --default-arguments '{ "--additional-python-modules":"pandas==2.2.2", "--ENV_VAL_1":"val1", "--ENV_VAL_2":"val2" }'
環境変数の指定方法とPythonコード側の読み込み方法
コンソールでの指定方法
ジョブパラメータにて、ハイフンを二つつけて、環境変数を指定します。
CLIでの指定方法
独自ライブラリの使用方法についてのCLIコマンドを参考にしてください。
~省略 --default-arguments '{ "--additional-python-modules":"pandas==2.2.2", "--ENV_VAL_1":"val1", "--ENV_VAL_2":"val2" }'
コード側での読み込み方法
環境変数は、標準ライブラリではos.environ.get('ENV_VAL')
で取得することが多いと思いますが、AWS Glue Pythonシェルジョブでは、getResolvedOptions
を使用して取得します。
import sys from awsglue.utils import getResolvedOptions args = getResolvedOptions(sys.argv, ["ENV_VAL1", "ENV_VAL2"]) env_val1 = args["ENV_VAL1"] env_val2 = args["ENV_VAL2"]
参考:getResolvedOptions を使用して、パラメータにアクセスする
恐らくpipにawsglue.utils
は存在しないため、AWS Glue Pythonシェルジョブの環境でのみ使用可能なモジュールと思われます。awsglue-localが使えるとか聞いたことありますが試してません。
わかったら追記します。
まとめ
今回はAWS Glue Python Shellジョブについての独自ライブラリの使用方法、環境変数の指定方法とPythonコード側の読み込み方法についてご紹介しました。是非、参考にしてみてください。