为什么我的 Amazon S3 事件通知不会触发我的 Lambda 函数?

上次更新时间:2020 年 2 月 7 日

简短描述

解决方法

Amazon S3 事件类型

当您配置 Amazon S3 事件通知时,您可以指定哪个支持的 Amazon S3 事件类型(如 PUT、POST、COPY 和 CompleteMultipartUpload)导致 Amazon S3 发送通知。如果 S3 存储桶中发生了您未指定的事件类型,Amazon S3 不会发送通知(且不会触发您的 Lambda 函数)。

例如,如果您 COPY 一个对象到 S3 存储桶,但仅针对 POST 事件配置了事件通知,COPY 事件将不会触发您的函数。

对象键名称筛选条件

您可以将 Amazon S3 事件通知配置为使用对象键名称筛选。配置后,Amazon S3 将仅针对具有特定键名称前缀或后缀的对象发布通知(并触发您的 Lambda 函数)。

如果您在前缀或后缀值中使用这些特殊字符中的任何一个,您必须以 URL 编码(百分比编码)格式输入它们:

  • ASCII 字符范围介于 00–1F 十六进制(0–31 十进制)和 7F(127 十进制)
  • 美元 ("$")
  • 表示和的符号 (“&”)
  • 加号 (“+”)
  • 逗号 (“,”)
  • 冒号 (“:”)
  • 分号 (“;”)
  • 等号 (“=”)
  • 问号 (“?”)
  • @ 符号 ("@")
  • 空格 (" ")

例如,要将前缀值定义为 "test=abc/",则需将其值输入为 "test%3Dabc/"。

注意:通配符 ("*") 不能在筛选条件中用作前缀或后缀来表示任何字符。

有关更多信息,包括要避免的字符列表,请参阅对象键命名指南

Lambda 权限

您的 Lambda 函数基于资源的策略必须允许特定 Amazon S3 存储桶调用函数。当您使用 Amazon S3 控制台添加新的事件通知时,这些权限将自动添加到该策略中。

注意:与使用控制台不同的是,通过 AWS 命令行界面 (AWS CLI) 使用 put-bucket-notification-configuration 添加新的事件通知不会更新 Lambda 函数策略。

但是,如果您在某个时间点删除了权限,Amazon S3 事件通知以后仍可能无法按预期调用函数。

检查策略以确认它具有所需的权限,并根据需要添加权限。有关如何添加所需的权限,请参阅我为什么在创建 Amazon S3 事件通知以触发我的 Lambda 函数时收到错误“无法验证以下目标配置”?

Lambda 并发性

应将您的 Lambda 函数配置为处理传入的 Amazon S3 事件通知的并发执行数。如果请求的到达速度比您的函数扩展速度快,或者如果您的函数处于最大并发性,Lambda 会在自动重试之前限制这些请求并后退。有关更多信息,请参阅异步调用AWS Lambda 函数扩展


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?