我想对未调用我的 AWS Lambda 函数的 Amazon Simple Storage Service (Amazon S3) 事件通知进行故障排除。
解决方法
要对 Lambda 函数的 Amazon S3 事件通知进行故障排除,请完成以下步骤以验证您的权限和配置设置:
- 打开 Amazon S3 控制台,然后导航到您的 S3 存储桶。
- 选择 Properties(属性)选项卡。
- 在 Event notifications(事件通知)中,选择您的事件通知,然后选择 Edit(编辑)。
- 在 General configuration(常规配置)中,查看 Prefix(前缀)和 Suffix(后缀)设置。
- (可选)如果您使用前缀或后缀,请确认以下内容:
存储桶中的对象键与对象键命名指南相匹配。
任何特殊字符均采用 URL 编码(百分比编码)格式。
- 在 Destination(目标)中,确认 Lambda 函数的 ARN 与有效函数相匹配。
- 选择 Save changes(保存更改)。
- 打开 Lambda 控制台,然后选择 Functions(函数)。
- 在 Function name(函数名称)中,选择您的 Lambda 函数。
- 选择 Configuration(配置)选项卡,然后选择 Permissions(权限)。
- 在 Resource-based policy statements(基于资源的策略声明)中,选择您的策略,然后选择 View policy(查看策略)。
- 确保基于资源的策略允许 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"
}
}
}
]
}
**注意:**将 REGION、ACCOUNT_ID、FUNCTION_NAME 和 BUCKET_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 存储桶时,为什么会出现“访问被拒绝”错误?