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

2 分钟阅读
0

我配置了一个 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 不会发送通知。

例如,Amazon S3 事件通知配置为使用 s3:ObjectCreated:Put 事件调用 Lambda。如果您上传的是大文件,则该文件使用分段上传进行上传。选择 s3:ObjectCreated:CompleteMultipartUpload 事件的同时也必须选择 s3:ObjectCreated:Put 事件。您还可以使用 s3:ObjectCreated:* 事件类型为用于创建对象的任何 API 请求通知。

确认您的对象键名称筛选条件包含上传的文件名

如果您的事件通知被配置为使用对象键名称筛选,则仅针对具有特定前缀或后缀的对象发布通知。通配符(“*”)不能在筛选条件中用作前缀或后缀来表示任何字符。确保事件通知中指定的前缀或后缀筛选条件包含上传的对象键名称。

确认您的对象键名称筛选条件采用 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 会限制这些请求。

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


相关信息

如何使用 Systems Manager Automation 解决通过 Amazon S3 事件通知调用 Lambda 函数时出现的问题?

将 AWS Lambda 与 Amazon S3 事件结合使用

演练:为通知配置存储桶(SNS 主题或 SQS 队列)

教程:使用 Amazon S3 触发器调用 Lambda 函数

创建 Amazon S3 事件通知以调用 Lambda 函数时,为什么会出现 “Unable to validate the following destination configurations”(无法验证以下目标配置)错误?

AWS 官方
AWS 官方已更新 1 年前