Можно ли запустить поисковый робот AWS Glue для новых файлов, которые загружаются в корзину S3, при условии, что поисковый робот «указывает» на эту корзину? Другими словами: загрузка файла генерирует событие, которое заставляет сканер AWS Glue его проанализировать. Я знаю, что есть сканирование по расписанию, но никогда не обнаружил, что он основан на событиях.
Запуск AWS Glue Crawler на основе событий после загрузки файла в S3 Bucket?
Ответы (3)
Нет, в настоящее время нет прямого способа вызвать сканер AWS Glue в ответ на загрузку в корзину S3. Уведомления о событиях S3 можно отправлять только по адресу:
- SNS
- SQS
- Лямбда
Однако было бы тривиально написать небольшой фрагмент кода Lambda для программного вызова искателя Glue с использованием SDK соответствующего языка.
В качестве быстрого начала, вот подробное описание того, как создать лямбду в Python для этого. Это первый раз, когда я создал Lambda в формате YMMV.
- Чтобы сэкономить время, выберите «Создать функцию», а затем нажмите «Чертежи». Выберите образец под названием 's3-get-object-python' и нажмите 'Настроить'.
- Введите имя лямбда-выражения и создайте новую роль, если у вас ее еще нет.
- Мастер одновременно настроит триггер S3.
- После того, как вы создадите его, вам нужно будет найти созданную роль и добавить новое разрешение через политику, содержащую:
"Action": "glue:StartCrawler", "Resource": "*"
- Измените код на что-то вроде:
from __future__ import print_function
import json
import boto3
print('Loading function')
glue = boto3.client(service_name='glue', region_name='ap-southeast-2',
endpoint_url='https://glue.ap-southeast-2.amazonaws.com')
def lambda_handler(event, context):
#print("Received event: " + json.dumps(event, indent=2))
try:
glue.start_crawler(Name='my-glue-crawler')
except Exception as e:
print(e)
print('Error starting crawler')
raise e
Наконец, предполагая, что вы выбрали отключение триггера во время разработки, щелкните триггер S3 на панели дизайнера и убедитесь, что он включен (возможно, вам потребуется сохранить лямбду после внесения этого изменения).
Вот и все, но обратите внимание, что исключение будет выдано, если сканер уже запущен, поэтому вы захотите обработать это, если у вас частые загрузки или длинные обходы. См.: https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-crawling.html#aws-glue-api-crawler-crawling-StartCrawler
Редактировать:
Это помогло мне с обработкой исключений (из AWS Glue): https://github.com/boto/boto3/issues/1606#issuecomment-401423567
Вот пошаговое руководство (ссылка ниже) для подобной архитектуры. (Обратитесь к изображению выше, чтобы узнать об архитектуре)