AWS Glue
開発者ガイド

AWS Glue での Python ライブラリの使用

純粋な Python で書かれていれば、AWS Glue ETL スクリプトで Python 拡張モジュールおよびライブラリを使用できます。pandas などの C ライブラリは現在のところサポート外です。他の言語で書かれた拡張機能も同様です。

取り込みのためのライブラリの圧縮

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

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

開発エンドポイントへの 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 に設定して、ロードするライブラリも更新できます。

開発エンドポイントで Zeppelin ノートブックを使用している場合、.zip ファイルから 1 つ以上のパッケージをインポートする前に、以下の PySpark 関数を呼び出す必要があります。

sc.addPyFile(“/home/glue/downloads/python/yourZipFileName.zip”)

ジョブまたは 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'})