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

上次更新时间:2020 年 12 月 28 日

我配置了一个 Amazon Simple Storage Service (Amazon S3) 事件通知触发我的 AWS Lambda 函数。为什么事件发生时函数不触发?

简短描述

确认以下所有内容均已正确配置:

Amazon S3 事件类型 对象键名称筛选条件 Lambda 权限 Lambda 并发性 解决方法

注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。

Amazon S3 事件类型

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

对象键名称筛选条件

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

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

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

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

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

有关详细信息,请参阅对象密钥命名指南。

Lambda 权限

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

注意:在 AWS CLI 中使用 put-bucket-notification-configuration 添加新的事件通知不会更新 Lambda 函数策略。但是,如果您在某个时间点删除了权限,Amazon S3 事件通知以后仍可能无法调用函数。

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

Lambda 并发性

必须将您的 Lambda 函数配置为处理传入的 Amazon S3 事件通知的并发执行数。如果请求的到达速度比您的函数扩展速度快,或者如果您的函数处于最大并发性,则 Lambda 会在重试之前限制这些请求并后退。

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