前説
そんな訳?で、前回に引き続きStepFunctionから利用するLambdaシリーズ?という事で、Glue Crawlerの状態取得のLambdaサンプルを掲載します。
前回のLambdaと併せて、「Crawlerの実行」→「Crawlerが実行完了するまで?秒毎にループ」といったStepFunctionの定義が可能となります。
githubにて公開
Lambda+Glue(Crawlerステータス取得)のサンプルソースです。ダウンロードは下記より。
https://github.com/SyoAwsBlog/ShoLambdaSample09
- 環境変数で対象のCrawlerが指定可能
- GlueのCrawlerのステータスを返却する
などの仕様を盛り込んでいます。
StepFunctionsで判定する時は、「Choices」で判定するイメージです。
{
"Choices":[{
"Variable":"$.response",
"StringEquals":"FAILED",
"Next": "エラーで終了のタスクへ"
},
{
"Variable":"$.response",
"StringEquals":"READY",
"Next": "正常終了の後続タスクへ"
}
]
}
利用可能な環境変数
変数名 | 変数値 |
---|---|
LogLevel | ログの出力レベルを(0~4)までの間で設定する |
TargetCrawlerName | 対象のCrawler名 |
概要
今回も、サンプル1のソースを雛形としています。
特に難しい事もなく、
- 環境変数から対象のCrawler名を取得してパラメータを生成する
- 対象Crawlerのステータスを取得してきて、Lambdaの戻り値にマッピングする
ただ、それだけです。
主要な基底処理
今回は、getTasksをオーバーライドせずに利用していますが、処理の流れを説明します。
AbstractBizCommon.prototype.getTasks = function (event, context) {
var base = AbstractBizCommon.prototype;
try {
base.writeLogTrace("AbstractBizCommon# getTasks :start");
return [
this.beforeMainExecute,
this.businessMainExecute,
this.afterMainExecute,
];
} catch (err) {
base.printStackTrace(err);
throw err;
} finally {
base.writeLogTrace("AbstractBizCommon# getTasks :end");
}
};
- beforeMainExecute ・・・ 起動引数の返却
- businessMainExecute ・・・ パラメータの生成&Crawlerのステータス取得
- afterMainExecute ・・・ 戻値の整形
という処理の流れになっています。また今回は処理結果をLambdaのプログラムとしての戻り値を制御する必要があるので、GlueCrawlerStatusModule.jsで「afterAllTasksExecute」の実装を行っています。
あとがき
StepFunctions × Lambda × Glue × Athena の組み合わせを使いこなせると、大量データ(今風に言うとビックデータ?)の編集・集計バッチの在り方が劇的に変化するので、簡単に利用できると良いな、、、と思ってサンプルソースをあげてます。
お手元のAWS環境で、サクっと実証実験する時にでも使ってください。