如果你是一名数据工程师,负责基于 S3 对象创建事件来编排 Glue 数据管道,你肯定遇到许多触发 Glue 作业的选择。你可以使用基于 S3 事件的 Lambda 进行编排,也可以使用 Airflow 进行编排,还可以使用 Glue 触发器,甚至是使用 Step Functions 工作流。你会选择哪一个呢?
不过,没有绝对的对错方法,但推荐的做法是使用Amazon EventBridge进行基于事件的Glue作业的编排。
EventTypeAmazon EventBridge 是什么?为什么你应该使用它呢?按照 AWS 文档:
EventBridge 是一项无服务器服务,它使用 事件 将应用程序组件 连接在一起,使您更容易构建可扩展的事件驱动应用程序。
使用 EventBridge 将 来自各种来源的事件,例如自建应用程序、AWS 服务和第三方软件 路由到组织内的应用程序。EventBridge 提供了简单且一致的方法来获取、过滤、转换和传递事件,帮助您快速构建应用程序。
你看,Eventbridge 提供了一个可扩展的事件总线,用于管理事件驱动的应用程序,它与各种 AWS 服务紧密集成。与使用 Lambda 方法相比,你不必担心将 S3 事件通过 SQS 排队,处理 Lambda 并发,甚至不需要编写 Lambda 代码来与目标集成。Eventbridge 会帮你搞定这一切!
建筑设计整个编排过程的架构如下。
基于 EventBridge 的 Glue 工作流的编排
如图所示,最佳实践是使用名为 /manifest 的前缀名称,并将其作为您的 Glue 作业的事件触发器使用。有两点推荐理由。
- 清单文件充当您上游和应用之间的确认,表明所有数据文件已成功发送,并且您可以使用清单文件来验证文件的接收。通常,清单文件会包括前缀 /data 下的文件的详细信息,包括文件大小、文件的任何附加元数据,如校验和、数据分布的一些统计信息等。
- 这将确保您只发送与清单相关的事件,而不是单独的数据文件创建事件,从而显著减少您需要监视以触发 Glue 工作流的事件数量。
步骤 1: 首先,你需要配置你的桶设置,让它开始发送 S3 事件到 Eventbridge。这包括两步:
为你的 S3 存储桶创建一个 CloudTrail,以记录所有针对 /manifest 前缀的 S3 写操作。
b. 更改桶属性,以便将事件发送到 Amazon EventBridge。
这是你在AWS控制台中看到的桶的属性设置如下所示
在我的 CloudTrail 控制台中,s3-event-bridge 的追踪记录看起来像这样。
注意:大多数情况下我使用了默认设置,但在实际项目中,你可能需要使用更安全的设置,例如对你的CloudTrail日志使用基于KMS的加密方式。
步骤2: 接下来,我们需要创建一个由Eventbridge触发器触发的Glue工作流程。Glue工作流程内部运行Glue作业。
首先,我们需要在AWS Glue的控制台中创建一个Glue工作流程。
保存工作流的名字,接下来你需要用到它。
接下来,我们将使用 AWS CLI 来为我们的工作流程创建一个触发器。这个命令会为我们的工作流程设置一个 Eventbridge 触发器。
aws glue create-trigger --workflow-name s3_event_bridge_workflow --type EVENT --name s3_glue_trigger --actions JobName=sample_glue_job
创建Glue触发器,用于启动工作流中的Glue作业。
注意: 请更新上面步骤中的流程名称,并将其命名为你喜欢的名字。另外,需要注意的是,我已使用现有的Glue作业,并将作业名称传递给JobName参数。
创建触发器后,我的工作流是这样的。
第三步: 最后,我们需要配置 Eventbridge 来接收并把 S3 事件路由到 Glue。
要做到这一点,我们需要在 AWS Eventbridge 控制面板中创建一个新规则。更多关于如何创建 Eventbridge 规则的信息,请参阅这里: https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html
在下一个页面中,向下滚动到“创建方法”部分,选择“自定义模式”。以下是一个适用于我的桶的示例模式。请根据您的桶名称进行相应的修改。
{
"detail-type": ["通过 CloudTrail 的 AWS API 调用"],
"source": ["aws.s3"],
"detail": {
"eventSource": ["s3.amazonaws.com"],
"requestParameters": {
"bucketName": ["event-bridge-test-pke"],
"key": [{
"prefix": "manifest/"
}]
},
"eventName": ["上传对象"]
}
}
在接下来的页面中,选择 Glue 工作流 作为目标,然后从下拉菜单中选择我们在上一步中创建的 Glue 工作流名称。对于执行角色选项,选择 为该特定资源创建新角色 选项。这将创建一个新的 IAM 角色,Eventbridge 将使用该角色来路由 S3 事件到 Glue。
跳过这些标签,然后转到下一页创建规则。
就这样!现在,触发我们的Glue工作流的设置已经完成了。让我们通过上传一个样本文件到清单前缀来测试一下设置。我将使用AWS CLI上传文件到我的存储桶。
aws s3 cp test.csv s3://event-bridge-test-pke:/manifest/ # 将test.csv文件复制到S3存储桶的manifest目录
一上传文件,你应该就能看到那个Glue工作流在运行。
恭喜!你成功设置了Glue任务的可扩展事件驱动编排。
总结
简而言之,我们已经了解了如何利用S3事件驱动Glue工作流,以及为什么使用Eventbridge来驱动Glue工作流比使用Lambda方法更合适。
感谢阅读 :)。如果你喜欢我的文章,请给我点赞。如果你想和我预约一对一交流,聊聊最新的数据和机器学习工程动态,可以点击这里: https://topmate.io/pavan_k_emani
共同學習,寫下你的評論
評論加載中...
作者其他優質文章