为什么我的 Amazon S3 事件通知不调用 Lambda 函数?

上次更新时间:2021 年 6 月 15 日

配置了一个 Amazon Simple Storage Service (Amazon S3) 事件通知调用我的 AWS Lambda 函数。当 Amazon S3 事件发生时,该函数未被调用。我该如何排查此问题?

解决方法

注意:如果您在运行 AWS Command Line Interface (AWS CLI) 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

确认您的 Amazon S3 事件类型配置正确

配置 Amazon S3 事件通知时,您必须指定哪些受支持的 Amazon S3 事件类型会导致 Amazon S3 发送通知。如果 S3 存储桶中发生了您未指定的事件类型,则 Amazon S3 不会发送通知。

确认您的对象键名称筛选条件采用 URL 编码(百分比编码)格式

如果您的事件通知被配置为使用对象键名称筛选,则仅针对具有特定前缀或后缀的对象发布通知。

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

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

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

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

有关更多信息,请参阅使用对象元数据

确认您的 Lambda 函数的 AWS Identity and Access Management (IAM) 策略具有所需的权限

检查您的 Lambda 函数基于资源的策略,确保其允许您的 Amazon S3 存储桶调用函数。如果不允许,请按照授予 AWS 服务的函数访问权限中的说明添加所需的权限。

有关更多信息,请参阅 AWS Lambda 权限

注意:当您使用 Amazon S3 控制台添加新的事件通知时,所需权限将自动添加到函数的策略中。如果您在 AWS CLI 中使用 put-bucket-notification-configuration 操作添加事件通知,则函数的策略不会自动更新。

确认您的 Lambda 函数已配置为处理来自 Amazon S3 事件通知的并发调用

您的 Lambda 函数必须配置为处理来自 Amazon S3 事件通知的并发调用。如果调用请求的到达速度比您的函数扩展速度快,或者如果您的函数处于最大并发性,则 Lambda 会限制这些请求。

有关更多信息,请参阅异步调用AWS Lambda 函数扩展