文件上传到S3 Bucket后,基于事件的AWS Glue Crawler触发器?

时间:2018-02-16 13:47:26

标签: amazon-web-services amazon-s3 aws-glue

是否可以在新文件上触发AWS Glue抓取工具,并将其上传到S3存储桶,因为抓取工具“指向”该存储桶?换句话说:文件上传会生成一个事件,导致AWS Glue抓取工具对其进行分析。我知道有基于计划的爬行,但从未找到基于事件的爬行。

3 个答案:

答案 0 :(得分:6)

不,目前还没有直接的方法可以调用AWS Glue抓取工具来响应上传到S3存储桶。 S3事件通知只能发送到:

  • SNS
  • SQS
  • LAMBDA

但是,编写一小段Lambda代码以使用相关语言SDK以编程方式调用Glue抓取工具是微不足道的。

答案 1 :(得分:2)

作为快速入门,这里有一个详尽的说明,介绍了如何在Python中创建Lambda来做到这一点。这是我第一次为YMMV创建Lambda。

  1. 要节省时间,请选择“创建功能”,然后单击“蓝图”。选择名为“ s3-get-object-python”的示例,然后单击“配置”
  2. 填写Lambda名称并创建一个新角色,除非您已经拥有一个角色。
  3. 该向导将同时设置S3触发器
  4. 创建后,您将需要找到它创建的角色并通过包含以下内容的策略添加新的权限:

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

  1. 将代码更改为以下内容:

来自未来导入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触发器并确保已启用(进行此更改后,您可能需要保存lambda)

就是这样,但是请注意,如果搜寻器已经在运行,则将引发异常,因此,如果您频繁上传或进行长时间的搜寻,则需要处理该异常。参见:https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-crawling.html#aws-glue-api-crawler-crawling-StartCrawler

(抱歉,如果代码格式不正确-到处都是SO预览)

答案 2 :(得分:0)

enter image description here此处是有关类似体系结构的分步指南(下面的链接)。 (有关架构,请参见上图)

https://wellarchitectedlabs.com/Cost/Cost_and_Usage_Analysis/300_Automated_CUR_Updates_and_Ingestion/Lab_Guide.html