如何对 Amazon S3 事件通知未调用我的 Lambda 函数问题进行故障排除?

2 分钟阅读
0

我将 Amazon Simple Storage Service (Amazon S3) 事件通知配置为调用我的 AWS Lambda 函数。但是,当 Amazon S3 事件发生时,并未调用该函数。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

验证您的 Amazon S3 事件类型是否配置正确

配置 S3 事件通知时,您必须指定会导致 Amazon S3 发送通知的每种事件类型。如果 Amazon S3 存储桶中出现了未指定的事件类型,则 Amazon S3 不会发送通知。

例如,您将事件通知配置为使用 s3:ObjectCreated:Put 事件类型调用 Lambda。如果您上传的是大文件,则 Amazon S3 会自动使用分段上传流程将文件上传到存储桶。要调用 Lambda 函数进行上传,您还必须配置 s3:ObjectCreated:CompleteMultipartUpload 事件类型。或者,使用 s3:ObjectCreated:* 事件类型为 Amazon S3 用于创建对象的每个 API 请求通知。

验证您的对象键名称筛选条件中是否包含上传的文件名

如果您的 S3 事件通知使用对象键名称筛选,则 Amazon S3 仅会针对具有特定前缀或后缀的对象发布通知。确保事件通知中指定的前缀或后缀筛选条件中包含上传的对象键名称。

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

对于对象键名称筛选,前缀或后缀中的某些特殊字符必须采用 URL 编码(百分比编码)格式。例如,要将前缀的值定义为 test=abc/,请输入 URL 编码格式的值 test%3Dabc/

有关对象键名称中特定字符处理的详细信息,请参阅对象键命名指南

验证您的 Lambda 函数的基于 IAM 资源的策略是否具有允许 Amazon S3 调用该函数所需的权限

检查您的 Lambda 函数基于 AWS Identity and Access Management (IAM) 资源的策略,以验证该策略是否允许您的存储桶调用该函数。如果存储桶无法调用该函数,请添加所需的策略

策略示例:

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "lambda-allow-s3-my-function",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket"
        }
      }
    }
  ]
}

有关详细信息,请参阅在 AWS Lambda 中管理权限

**注意:**当您使用 Amazon S3 控制台添加新的事件通知时,Amazon S3 会自动向您的函数基于资源的策略中添加所需权限。但是,如果您使用 put-bucket-notification-configuration AWS CLI 命令来添加事件通知,函数的策略将不会自动更新。

验证您的 Lambda 函数是否配置为处理来自 S3 事件通知的并发调用

您必须将 Lambda 函数配置为处理](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html)来自 S3 事件通知的[并发调用。如果调用请求的到达速度比您的函数扩展速度快,或者如果您的函数处于最大并发性,则 Lambda 会限制这些请求。

有关详细信息,请参阅异步调用 Lambda 函数

相关信息

如何使用 AWS Systems Manager Automation 解决 Amazon S3 事件通知未调用 Lambda 函数的问题?

使用 Lambda 处理 Amazon S3 事件通知

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

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

如何设置 Amazon S3 事件通知来调用另一个 AWS 账户中的 Lambda 函数?

AWS 官方已更新 8 个月前