Glueのスケジュールではなくて、S3の終了ファイルをトリガにクローラを実行したい場合のために作りました。
S3データをパーティションに分けている場合、クローラを実行してパーティションを読み込ます必要があります。
Lambda関数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import sys import boto3 import json import logging import os import datetime import calendar from base64 import b64decode from urllib.request import Request, urlopen from urllib.error import URLError, HTTPError logger = logging.getLogger() logger.setLevel(logging.INFO) glue = boto3.client('glue') def lambda_handler(event, context): if 'eventSource' in event['Records'][0]: if event['Records'][0]['eventSource'] == 'aws:s3': reason = event['Records'][0]['s3'] bucket = event['Records'][0]['s3']['bucket']['name'] key = event['Records'][0]['s3']['object']['key'] if ('_SUCCESS' in key): logger.info("bucket: " + str(bucket) + " key: " + str(key)) response = glue.start_crawler(Name='glue クローラ名') |
S3イベントの設定
S3バケットのプロパティを選びます。
見逃しやすいですが、プロパティの下のほうにあるイベントを選びます。
イベントの「すべてのオブジェクト作成イベント」をチェックします。
送信先を「Lambda関数」にして
Lambdaに上で作った関数名を指定します。