AWS Lambda 関数を使用して、クローラーの実行が完了したときに AWS Glue ジョブを自動的に開始したいと考えています。
簡単な説明
クローラーの実行が完了したときにジョブを開始するには、AWS Lambda 関数と Amazon EventBridge ルールを作成します。
注: AWS Glue ワークフローを使用しても、クローラーの実行が完了したときに自動的にジョブを開始できます。詳細については、「AWS Glue ワークフローを使用して、クローラーの実行が完了したときにジョブを自動的に開始する方法を教えてください」を参照してください。
解決策
前提条件:
必要なものを次に示します。
- AWS Glue の抽出、変換、ロード (ETL) ジョブ
- AWS Glue クローラー
- Lambda による AWS Glue ジョブの実行を許可する AWS Identity and Access Management (IAM) ロールたとえば、Lambda に対し、ロールにアタッチされた AWSGlueServiceRole ポリシーを含むサービスリンクロールを設定します。
Lambda 関数を作成する
次の手順を実行します。
- Lambda コンソールを開きます。
- [関数の作成] を選択します。
- [関数の作成] ページに次の情報を入力します。
[最初から作成] を選択します。
[関数名] に、関数の名前を入力します。
[ランタイム] で Python のオプションを選択します。
アーキテクチャには、デフォルトオプションの x86_64 を使用します。
[デフォルトの実行ロールの変更] の [実行ロール] で [既存のロールを使用する] を選択します。
[既存のロール] では、AWS Glue ジョブの実行を許可された IAM ロールを選択します。
- [関数の作成] を選択します。
- [関数の詳細] ページの [コードソース] に次のコードを入力します。
# Set up loggingimport json
import os
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Import Boto 3 for AWS Glue
import boto3
client = boto3.client('glue')
# Variables for the job:
glueJobName = "MyTestJob"
# Define Lambda function
def lambda_handler(event, context):
logger.info('## INITIATED BY EVENT: ')
logger.info(event['detail'])
response = client.start_job_run(JobName = glueJobName)
logger.info('## STARTED GLUE JOB: ' + glueJobName)
logger.info('## GLUE JOB RUN ID: ' + response['JobRunId'])
return response
注: MyTestJob を AWS Glue ETL ジョブの名前に置き換えてください。
- [コードソース] で [テスト] を選択します。
- AWS Glue コンソールを開き、ジョブが開始されたことを確認します。
Lambda 関数をテストするには、AWS Glue クローラーを実行します。次に、AWS Glue ETL ジョブの [実行されたジョブ] リソースリストを確認します。[実行ステータス] には、Starting または Running と表示されます。
EventBridge ルールを作成する
次の手順を実行します。
- EventBridge コンソールを開きます。
- ナビゲーションペインで [ルール] を選択し、[ルールを作成] を選択します。
- ルールの名前と説明を入力し、[次へ] を選択します。
- [イベントソース] と [サンプルイベント] にはデフォルト値を使用します。
- [イベントパターン] セクションで [カスタムパターン ] (JSON エディタ) を選択します。
- [イベントパターン] フィールドに次のコードを入力します。
{
"detail-type": [
"Glue Crawler State Change"
],
"source": [
"aws.glue"
],
"detail": {
"crawlerName": [
"MyTestCrawl"
],
"state": [
"Succeeded"
]
}
}
注: MyTestCrawl を AWS Glueクローラーの名前に置き換えてください。
- [ターゲットの選択] に次の情報を入力します。
[ターゲット] で [Lambda 関数] を選択します。
[関数] で使用する関数を選択します。
- [作成] を選択します。
Lambda 関数と EventBridge ルールをテストするには、AWS Glue クローラーを実行します。次に、AWS Glue ETL ジョブの [実行されたジョブ] リソースリストを確認します。[実行ステータス] には、Starting または Running と表示されます。
関連情報
Amazon EventBridge でイベントに反応するルールを作成する