設計図レイアウトスクリプトを作成する - AWS Glue

設計図レイアウトスクリプトを作成する

設計図のレイアウトスクリプトには、ワークフロー内のエンティティを生成するための関数を含む必要があります。この関数には好きな名前を付けることができます。AWS Glue は構成ファイルを使用して、関数の完全修飾名を決定します。

レイアウト関数は以下を実行します。

  • (オプション) Job オブジェクトを作成する Job クラスをインスタンス化し、Command および Role の引数を渡します。これらは、AWS Glue コンソールまたは API を使用しながらジョブを作成する際に指定する、ジョブのプロパティです。

  • (オプション) Crawler オブジェクトを作成する Crawler クラスをインスタンス化し、名前、ロール、ターゲット引数を渡します。

  • オブジェクト (ワークフローエンティティ) 間の依存関係を示すために、追加の引数 DependsOn および WaitForDependenciesJob() および Crawler() に渡します。これらの引数については、このセクションの後半で説明します。

  • Workflow に返すためのワークフローオブジェクトを作成する AWS Glue クラスをインスタンス化し、Name 引数 、Entities 引数 、およびオプションの OnSchedule 引数を渡します。引数 Entities では、ワークフローに含めるすべてのジョブとクローラを指定します。Entities オブジェクトを構築する方法については、このセクションで後述するプロジェクト例をご覧ください。

  • Workflow オブジェクトを返します。

JobCrawler、および 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 はスケジュールと対応付けながら、スケジュールトリガーを作成します。特に指定されていない場合は、ワークフローの開始トリガーはオンデマンドトリガーになります。