跳至内容

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

1 分钟阅读
0

我想对未调用我的 AWS Lambda 函数的 Amazon Simple Storage Service (Amazon S3) 事件通知进行故障排除。

解决方法

要对 Lambda 函数的 Amazon S3 事件通知进行故障排除,请完成以下步骤以验证您的权限和配置设置:

  1. 打开 Amazon S3 控制台,然后导航到您的 S3 存储桶。
  2. 选择 Properties(属性)选项卡。
  3. Event notifications(事件通知)中,选择您的事件通知,然后选择 Edit(编辑)。
  4. General configuration(常规配置)中,查看 Prefix(前缀)和 Suffix(后缀)设置。
  5. (可选)如果您使用前缀或后缀,请确认以下内容:
    存储桶中的对象键与对象键命名指南相匹配。
    任何特殊字符均采用 URL 编码(百分比编码)格式
  6. Destination(目标)中,确认 Lambda 函数的 ARN 与有效函数相匹配。
  7. 选择 Save changes(保存更改)。
  8. 打开 Lambda 控制台,然后选择 Functions(函数)。
  9. Function name(函数名称)中,选择您的 Lambda 函数。
  10. 选择 Configuration(配置)选项卡,然后选择 Permissions(权限)。
  11. Resource-based policy statements(基于资源的策略声明)中,选择您的策略,然后选择 View policy(查看策略)。
  12. 确保基于资源的策略允许 Amazon S3 调用 Lambda 函数:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "ACCOUNT_ID"
        },
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:s3:::BUCKET_NAME"
        }
      }
    }
  ]
}

**注意:**将 REGIONACCOUNT_IDFUNCTION_NAMEBUCKET_NAME 替换为您的 AWS 区域、AWS 账户、函数名称和存储桶名称。AWS:SourceAccount 是拥有存储桶的账户,ArnLike 是存储桶的 ARN。

在前面的基于资源的策略中,主体 s3.amazonaws.com 有权对资源 ARN 执行 lambda:InvokeFunction API 操作。

**重要事项:**Amazon S3 通常在几秒钟内发送事件通知,但有时可能需要 1 分钟或更长时间。有关详细信息,请参阅 Amazon S3 事件通知

相关信息

如何允许我的 Lambda 函数访问我的 Amazon S3 存储桶?

当我使用 Lambda 函数将文件上传到另一个 AWS 账户的 Amazon S3 存储桶时,为什么会出现“访问被拒绝”错误?

AWS 官方已更新 1 年前