如何在AWS Glue任务结束后触发AWS Lambda执行数据清洗?
如何在AWS Glue任务结束时触发Lambda函数
当然可以!这里给你两种靠谱的实现方式,其中一种正好能用上你提到的SNS服务:
方案一:通过Amazon EventBridge(原CloudWatch Events)直接触发Lambda
这是最省心的方式,完全不用修改Glue任务代码,靠云服务的事件联动就能实现:
- 打开EventBridge控制台,创建一条规则
- 选择事件源为「AWS服务」,指定服务为「Glue」,事件类型选「Glue Job State Change」
- 设置触发条件:选中你的目标Glue任务,同时过滤任务状态为SUCCEEDED(如果需要在任务失败时也触发,可以额外添加
FAILED状态) - 选择目标为「Lambda函数」,直接指定你用来做数据清洗的Lambda函数
这样一来,只要你的Glue任务成功完成,EventBridge就会自动触发对应的Lambda,全程零代码改动。
方案二:在Glue任务代码中主动调用SNS发消息,再触发Lambda
如果你更倾向于用SNS做中间层(比如需要给多个服务同时发通知),可以在Glue任务的代码末尾加上调用SNS API的逻辑:
Python示例代码
import boto3 # 初始化SNS客户端,替换成你的AWS区域 sns_client = boto3.client('sns', region_name='us-east-1') # 替换成你的SNS主题ARN SNS_TOPIC_ARN = 'arn:aws:sns:us-east-1:123456789012:your-glue-completion-topic' def send_completion_notification(): try: sns_client.publish( TopicArn=SNS_TOPIC_ARN, Subject='Glue任务执行完成', Message='你的Glue数据加载任务已成功结束,请触发数据清洗流程' ) print("SNS通知发送成功") except Exception as e: print(f"发送SNS通知失败:{str(e)}") # 在Glue任务的核心数据加载逻辑完成后,调用这个函数 if __name__ == '__main__': # 这里是你的Glue数据加载主逻辑 print("Glue数据加载任务执行完成") send_completion_notification()
接下来需要做两件事:
- 给Glue任务的IAM角色添加
SNS:Publish的权限,确保它能往指定主题发消息 - 把你的数据清洗Lambda函数订阅到这个SNS主题上
这样就能实现「Glue任务结束→SNS发送通知→Lambda触发执行」的完整流程了。
额外小提示
- 如果你需要区分任务成功/失败的场景,可以在EventBridge规则里添加多状态过滤,或者在SNS消息里携带任务状态信息,让Lambda根据不同状态执行不同逻辑
- 一定要检查IAM权限配置,避免出现权限不足导致的触发失败问题
内容的提问来源于stack exchange,提问作者dd.
相关产品推荐
相关产品推荐

