設計図レイアウトスクリプトを作成する
設計図のレイアウトスクリプトには、ワークフロー内のエンティティを生成するための関数を含む必要があります。この関数には好きな名前を付けることができます。AWS Glue は構成ファイルを使用して、関数の完全修飾名を決定します。
レイアウト関数は以下を実行します。
-
(オプション)
Job
オブジェクトを作成するJob
クラスをインスタンス化し、Command
およびRole
の引数を渡します。これらは、AWS Glue コンソールまたは API を使用しながらジョブを作成する際に指定する、ジョブのプロパティです。 -
(オプション)
Crawler
オブジェクトを作成するCrawler
クラスをインスタンス化し、名前、ロール、ターゲット引数を渡します。 -
オブジェクト (ワークフローエンティティ) 間の依存関係を示すために、追加の引数
DependsOn
およびWaitForDependencies
をJob()
およびCrawler()
に渡します。これらの引数については、このセクションの後半で説明します。 -
Workflow
に返すためのワークフローオブジェクトを作成する AWS Glue クラスをインスタンス化し、Name
引数 、Entities
引数 、およびオプションのOnSchedule
引数を渡します。引数Entities
では、ワークフローに含めるすべてのジョブとクローラを指定します。Entities
オブジェクトを構築する方法については、このセクションで後述するプロジェクト例をご覧ください。 -
Workflow
オブジェクトを返します。
Job
、Crawler
、および Workflow
クラスの定義については、「AWS Glue ブループリントクラスリファレンス」を参照してください。
レイアウト関数は、以下の引数を受け取る必要があります。
引数 | 説明 |
---|---|
user_params |
設計図パラメータの名前と値に関する Python ディクショナリ。詳細については、設計図パラメータを指定する を参照してください。 |
system_params |
2 つのプロパティ (region および accountId ) を含む Python ディクショナリ。 |
次に、Layout.py
ファイルに記述された、レイアウトジェネレータスクリプトの例を示します。
import argparse import sys import os import json from awsglue.blueprint.workflow import * from awsglue.blueprint.job import * from awsglue.blueprint.crawler import * def generate_layout(user_params, system_params): etl_job = Job(Name="{}_etl_job".format(user_params['WorkflowName']), Command={ "Name": "glueetl", "ScriptLocation": user_params['ScriptLocation'], "PythonVersion": "2" }, Role=user_params['PassRole']) post_process_job = Job(Name="{}_post_process".format(user_params['WorkflowName']), Command={ "Name": "pythonshell", "ScriptLocation": user_params['ScriptLocation'], "PythonVersion": "2" }, Role=user_params['PassRole'], DependsOn={ etl_job: "SUCCEEDED" }, WaitForDependencies="AND") sample_workflow = Workflow(Name=user_params['WorkflowName'], Entities=Entities(Jobs=[etl_job, post_process_job])) return sample_workflow
このサンプルスクリプトは、必要な設計図ライブラリをインポートし、2 つのジョブを含むワークフローを生成する generate_layout
関数をインクルードします。これは非常にシンプルなスクリプトです。より複雑なスクリプトでは、追加のロジックとパラメータを使用して、多数のジョブとクローラを含むワークフローを生成できます。さらに、ジョブとクローラの数を可変にすることも可能です
DependsOn 引数を使用する
引数 DependsOn
は、このエンティティがワークフロー内の他のエンティティに対し維持する依存関係を、ディクショナリ向けに表現したものです。これには、以下の形式が使用されます。
DependsOn = {dependency1 : state, dependency2 : state, ...}
このディクショナリーのキーはエンティティの名前ではなく、オブジェクトリファレンスを表し、値は監視すべき状態に対応する文字列です。AWS Glue 適切なトリガーを推測します。有効な状態については、「Condition Structure」を参照してください。
例えば、ジョブは、クローラの正常な完了に依存する場合があります。crawler2
という名前のクローラオブジェクトを以下のように定義したとします。
crawler2 = Crawler(Name="my_crawler", ...)
この時、crawler2
に依存するオブジェクトには、次のようなコンストラクタ引数が含まれます。
DependsOn = {crawler2 : "SUCCEEDED"}
例:
job1 = Job(Name="Job1",
...
, DependsOn = {crawler2 : "SUCCEEDED", ...})
仮にエンティティで DependsOn
が省略されている場合には、そのエンティティはワークフローの開始トリガーに依存します。
WaitForDependencies 引数を使用する
WaitForDependencies
引数は、ジョブまたはクローラエンティティが、依存するすべてのエンティティが完了するまで待機するのか、あるいは、いずれかのエンティティが完了するまで待機するのかを決定します。
許容される値は「AND
」または「ANY
」です。
OnSchedule 引数を使用する
Workflow
クラスコンストラクタの引数 OnSchedule
は、ワークフローの開始トリガーを定義する cron
式です。
この引数を指定した場合、AWS Glue はスケジュールと対応付けながら、スケジュールトリガーを作成します。特に指定されていない場合は、ワークフローの開始トリガーはオンデマンドトリガーになります。