将文件上传到 S3 存储桶后,AWS Glue Crawler 的基于事件的触发器?

Posted

技术标签:

【中文标题】将文件上传到 S3 存储桶后,AWS Glue Crawler 的基于事件的触发器?【英文标题】:Event based trigger of AWS Glue Crawler after a file is uploaded into a S3 Bucket? 【发布时间】:2018-07-27 10:43:17 【问题描述】:

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

【问题讨论】:

【参考方案1】:

作为一个快速入门,这里详细介绍了如何在 Python 中创建 Lambda 来执行此操作。这是我第一次创建 Lambda 所以 YMMV。

    要节省时间,请选择“创建函数”,然后单击“蓝图”。选择名为“s3-get-object-python”的示例并单击“配置” 填写 Lambda 名称并创建一个新角色,除非您已有角色。 向导将同时设置 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 触发器并确保它已启用(进行此更改后您可能需要保存 lambda)

就是这样,但请注意,如果爬虫已在运行,则会引发异常,因此如果您需要频繁上传或长时间爬取,则需要处理该异常。见: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

【讨论】:

【参考方案2】:

不,目前没有直接调用 AWS Glue 爬虫来响应上传到 S3 存储桶的方法。 S3 事件通知只能发送到:

社交网络 SQS 拉姆达

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

【讨论】:

您能否详细说明在哪里可以找到有用的教程/代码 sn-ps 以使用 Lambda 调用胶水爬虫? 每个语言 SDK 都应该支持 Glue。您可以从 javascript 调用 startCrawler(),例如:docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Glue.html【参考方案3】:

这里是类似架构的分步指南(下面的链接)。 (架构参考上图)

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

【讨论】:

谢谢。你用什么来做你的流程图?这是 AWS 中的工具还是其他工具? 我在浏览器中使用 Draw.io

以上是关于将文件上传到 S3 存储桶后,AWS Glue Crawler 的基于事件的触发器?的主要内容,如果未能解决你的问题,请参考以下文章

将静态文件上传到 aws s3 存储桶后,css 中的 URL 不起作用

AWS S3 文件上传但存储桶中的文件没有大小?

Ruby v2 的 aws-sdk:在我将对象放入 S3 存储桶后检查成功状态

从 s3 存储桶获取 2 个文件,并在使用 lambda 节点 js 将其上传到 s3 存储桶后制作 1 个 zip 文件

从上传到 S3 的文件触发的无服务器框架和 AWS Step Functions(AWS 状态机)

AWS Glue 输出文件名