Запуск AWS Glue Crawler на основе событий после загрузки файла в S3 Bucket?

Можно ли запустить поисковый робот AWS Glue для новых файлов, которые загружаются в корзину S3, при условии, что поисковый робот «указывает» на эту корзину? Другими словами: загрузка файла генерирует событие, которое заставляет сканер AWS Glue его проанализировать. Я знаю, что есть сканирование по расписанию, но никогда не обнаружил, что он основан на событиях.


person BoIde    schedule 16.02.2018    source источник


Ответы (3)


Нет, в настоящее время нет прямого способа вызвать сканер AWS Glue в ответ на загрузку в корзину S3. Уведомления о событиях S3 можно отправлять только по адресу:

  • SNS
  • SQS
  • Лямбда

Однако было бы тривиально написать небольшой фрагмент кода Lambda для программного вызова искателя Glue с использованием SDK соответствующего языка.

person jarmod    schedule 16.02.2018
comment
не могли бы вы подробнее рассказать, где найти полезные руководства / фрагменты кода для вызова склеивающего робота с Lambda? - person BoIde; 17.02.2018
comment
SDK каждого языка должен поддерживать Glue. Вы можете вызвать startCrawler () из JavaScript, например: docs.aws. amazon.com/AWSJavaScriptSDK/latest/AWS/Glue.html - person jarmod; 17.02.2018

В качестве быстрого начала, вот подробное описание того, как создать лямбду в Python для этого. Это первый раз, когда я создал Lambda в формате YMMV.

  1. Чтобы сэкономить время, выберите «Создать функцию», а затем нажмите «Чертежи». Выберите образец под названием 's3-get-object-python' и нажмите 'Настроить'.
  2. Введите имя лямбда-выражения и создайте новую роль, если у вас ее еще нет.
  3. Мастер одновременно настроит триггер S3.
  4. После того, как вы создадите его, вам нужно будет найти созданную роль и добавить новое разрешение через политику, содержащую:

"Action": "glue:StartCrawler", "Resource": "*"

  1. Измените код на что-то вроде:
    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

person Patrick Herrera    schedule 06.12.2018