AWS Glue Python Shellにて外部ライブラリの導入方法と環境変数の扱い方

記事タイトルとURLをコピーする

こんにちは、アプリケーションサービス部ディベロップメントサービス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(抽出、変換、ロード)サービスです。

AWS Glueとは

Pythonシェルジョブの位置付け

AWS GlueにおけるPythonシェルジョブは、ETLジョブの一種です。以下のように位置付けることができます。

  1. AWS Glue

    • フルマネージドのETLサービス
    • データカタログ、クローラー、ETLジョブなどのコンポーネントから構成される
  2. ETLジョブ

    • データの抽出、変換、ロードを行うためのジョブ
    • Sparkジョブ、Rayジョブ、Pythonシェルジョブに分類される
  3. Pythonシェルジョブ

    • Pythonスクリプトを実行するためのETLジョブ
    • Python 3.6 または Python 3.9 と互換性のあるスクリプトを実行することができる

インポート済みのライブラリの種類

AWS Glue Pythonシェルジョブでは、以下のライブラリがデフォルトでインポートされています。

サポートされている Python シェルジョブのライブラリ

Boto3やPandas、Numpyなど、頻出のライブラリのバージョンが指定されているので開発環境側にてpipenvなどを利用してバージョンを合わせるか、後述のモジュール追加や更新を実施してすることをお勧めします。

独自ライブラリの使用方法

AWS Glue Pythonシェルジョブでは、標準で用意されているライブラリだけでなく、独自モジュールを追加したり、既存モジュールのバージョンを変更したりすることができます。

コンソールでの指定方法

ジョブパラメータにて、--additional-python-modulesを設定することで、外部ライブラリをインストールすることができます。

ジョブパラメータ参考

CLIでの指定方法

--additional-python-modulesを指定して、外部ライブラリをインストールすることができます。

参考:create-job

例: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コード側の読み込み方法についてご紹介しました。是非、参考にしてみてください。

外崎 隼斗 (記事一覧)

アプリケーションサービス部ディベロップサービス1課

雑食系