AWS Lambda 関数を使用して、クローラーの実行が完了したときに AWS Glue ジョブを自動的に開始したいと考えています。
簡単な説明
クローラーの実行が完了したときにジョブを開始するには、AWS Lambda 関数と Amazon EventBridge ルールを作成します。このメソッドを変更して、他の AWS Glue 機能を自動化できます。
注:AWS Glue ワークフローを使用して、クローラーの実行が完了したときに自動的にジョブを開始することもできます。この方法では、AWS Glueコンソールのワークフローページからクローラーを起動する必要があります。詳細については、「クローラーの実行が完了したときに AWS Glue ワークフローを使用してジョブを自動的に開始する方法を教えてください」を参照してください。
解決策
次の手順を実行する前に、次のものが揃っていることを確認してください:
- AWS Glue の抽出、変換、ロード (ETL) ジョブ。
- AWS Glue クローラー。
- AWS Glue ジョブを実行する権限を持つ Lambda の AWS アイデンティティおよびアクセス管理 (IAM) ロール。たとえば、AWSGlueServiceRole ポリシーがアタッチされた Lambda のサービスにリンクされたロールを設定します。
Lambda 関数を作成します
1. Lambda コンソールを開きます。
2. [関数を作成] を選択します。
注:Lambda 関数がない場合は、[はじめに] ページが表示されます。[関数を作成] を選択し、次のステップに進みます。
3. [最初から作成] が選択されていることを確認し、次のオプションを設定します:
[名前] に、関数の名前を入力します。
[ランタイム] で、Python オプションのいずれかを選択します。
アーキテクチャには、デフォルトオプションの x86_64 を使用します。
[ロール] で、[既定の実行ロールの変更] のドロップダウンを選択し、[既存のロールを使用する] を選択します。
**[既存のロール **で、AWS Glue ジョブを実行する権限がある IAM ロールを選択します。
4. [関数を作成] を選択します。
5. [関数コード] セクションに、次のようなコードを貼り付けます。MyTestJob は必ず AWS Glue ETL ジョブの名前に置き換えてください。
# Set up logging
import 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
6. コード編集 UI の上部で [デプロイ] を選択し、次に [テスト] を選択します。
7. AWS Glue コンソールを開き、ジョブが開始されたことを確認します。
EventBridge ルールを作成する
1. Amazon EventBridge コンソールを開きます。
2. ナビゲーションペインで、[ルール]、[ルールの作成] の順に選択します。
3. ルールの名前と説明を入力し、[次へ] を選択します。
4. [イベントソース] と [サンプルイベントt] にはデフォルト値を使用します。[イベントパターン] セクションで、[カスタムパターン (JSON エディター)] を選択します。
5. 次のコードをコピーして [イベントパターン] ボックスに貼り付けます。MyTestCrawl は必ず AWS Glueクローラーの名前に置き換えてください。
{
"detail-type": [
"Glue Crawler State Change"
],
"source": [
"aws.glue"
],
"detail": {
"crawlerName": [
"MyTestCrawl"
],
"state": [
"Succeeded"
]
}
}
6. [ターゲットの選択] セクションで、次の操作を行います:
[ターゲット] で [Lambda 関数] を選択します。
[関数] で、Lambda 関数の名前を選択します。
7. [作成] を選択します。
Lambda 関数と EventBridge ルールをテストするには、AWS Glue クローラーを実行します。次に、AWS Glue ETL ジョブの [履歴] タブを確認します。実行ステータスには、[開始中] または [実行中] と表示されます。
関連情報
イベントに反応する Amazon EventBridge ルールの作成