【AWS】AWS Glue ~ Workflows / パラメータ渡し ~

■ はじめに

https://dk521123.hatenablog.com/entry/2019/10/10/223018

の続き。
今回は、Glueでのパラメータの受け渡しについて、考える。

ジョブ間の値の受け渡し

【1】実行プロパティ
【2】ジョブ パラメータ ... 渡すだけ(受け取れない)

【1】実行プロパティ

実行プロパティ (Run property)が使えそう。

公式サイトより
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/workflows_overview.html

より抜粋
~~~~
ワークフローの実行全体の状態を共有して管理するには、
ワークフローのデフォルトの実行プロパティを定義できます。
これらのプロパティ (名前と値のペア) は、ワークフローのすべてのジョブで使用できます。
AWS Glue API を使用すると、ジョブはワークフローの実行プロパティを取得し、
これらのプロパティを変更してワークフローの以降のジョブで使用できます。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/workflow-run-properties-code.html

ワークフローの実行プロパティを使用して、
AWS Glue ワークフローのジョブ間の状態を共有して管理します。
デフォルトの実行プロパティは、ワークフローの作成時に設定できます。
次に、ジョブの実行時に、ジョブは実行プロパティの値を取得して必要に応じて変更し、
ワークフローの以降のジョブに対する入力として使用できます。
ジョブが実行プロパティを変更した場合、新しい値が有効なのは
ワークフローの実行中に限られるため、デフォルトの実行プロパティは影響を受けません。

API
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.get_workflow_run_properties

使用上の注意

* 公式にはないが、制限があり、「64KB」を超えると例外が発生する
 => 設計するに重要だから、ちゃんと明記したほうがいいと思うが、、、

サンプル

実行プロパティを設定するプログラム例

import sys
import boto3
from awsglue.utils import getResolvedOptions

glue_client = boto3.client("glue")
args = getResolvedOptions(sys.argv, ['WORKFLOW_NAME', 'WORKFLOW_RUN_ID'])
workflow_name = args['WORKFLOW_NAME']
workflow_run_id = args['WORKFLOW_RUN_ID']
workflow_params = glue_client.get_workflow_run_properties(Name=workflow_name,
                                        RunId=workflow_run_id)["RunProperties"]

# 設定
workflow_params = { 'key_1', 'hello_world' }
glue_client.put_workflow_run_properties(Name=workflow_name, RunId=workflow_run_id, RunProperties=workflow_params)

実行プロパティを設定するプログラム例

import sys
import boto3
from awsglue.utils import getResolvedOptions

glue_client = boto3.client("glue")
args = getResolvedOptions(sys.argv, ['WORKFLOW_NAME', 'WORKFLOW_RUN_ID'])
workflow_name = args['WORKFLOW_NAME']
workflow_run_id = args['WORKFLOW_RUN_ID']
workflow_params = glue_client.get_workflow_run_properties(Name=workflow_name,
                                        RunId=workflow_run_id)["RunProperties"]

# 設定
result_value = workflow_params['key_1']
print('Result : ' + result_value)

【2】ジョブ パラメータ

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-get-resolved-options.html

サンプル:Python shell

ジョブ パラメータ「--a1 : Hello_World」を設定しておく

import sys
from awsglue.utils import getResolvedOptions

def main():
    args = getResolvedOptions(sys.argv, ['a1'])
    print("Result is: " + args['a1'])

if __name__ == '__main__':
    main()

関連記事

AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ Workflows / 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/10/223018
AWS Glue ~ 基本編 / ジョブ ~
https://dk521123.hatenablog.com/entry/2019/11/17/231505