跳至内容

如何解决我在尝试创建 Amazon S3 事件通知以触发 Lambda 函数时出现的“Configuration is ambiguously defined”(配置定义不明确)错误?

2 分钟阅读
0

我尝试创建 Amazon Simple Storage Service (Amazon S3) 存储桶事件通知来触发我的 AWS Lambda 函数,但收到了一个错误。

简短描述

当通知的事件信息及其前缀或后缀与 S3 存储桶的通知配置重叠时,将发生“Configuration is ambiguously defined”(配置定义不明确)错误。

要解决此问题,请执行以下操作之一:

  • 删除重叠的事件,并创建一个新事件。
  • 为多个具有重叠前缀或后缀的重叠事件创建 S3 事件通知。
  • 重新设计您的架构。

**注意:**Amazon S3 事件通知配置允许具有非重叠前缀或后缀的重叠事件。这些配置还允许具有重叠前缀或后缀的非重叠事件。

有关更多信息,请参阅使用对象键名筛选配置事件通知

解决方法

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

删除重叠的事件并创建一个新事件

要删除重叠的事件通知,请使用 Amazon S3 控制台或 AWS CLI。

**注意:**当您删除 Lambda 函数触发器时,不会自动删除关联的 S3 事件通知。在创建没有后缀限制的新触发器之前,您还必须删除 Amazon S3 中的通知。

Amazon S3 控制台

完成以下步骤:

  1. 打开 Amazon S3 控制台,然后选择您的存储桶。
  2. 选择 Properties(属性)选项卡。
  3. Event notifications(事件通知)中,选择与您尝试创建的新通知重叠的事件通知。
  4. 选择 Delete(删除)。
  5. 选择 Create event notification(创建事件通知)。
  6. Lambda function(Lambda 函数)下拉列表中,选择您的函数,然后选择 Save changes(保存更改)。

AWS CLI

使用 AWS CLI 更新您的 S3 存储桶上的通知配置 JSON 文件。要获取 S3 存储桶上的所有事件通知的列表,请运行 AWS CLI 命令 get-bucket-notification-configuration。要删除所有 S3 事件通知,请运行 AWS CLI 命令 put-bucket-notification-configuration

aws s3api put-bucket-notification-configuration --bucket=your-bucket-name --notification-configuration="{}"

**注意:**请将 your-bucket-name 替换为您的存储桶名称。

删除重叠的事件通知后,您可以运行 AWS CLI 命令 put-bucket-notification-configuration 来添加新通知。

为多个具有重叠前缀或后缀的重叠事件创建 S3 事件通知

完成以下步骤:

  1. 打开 Amazon S3 控制台,然后选择您的存储桶。
  2. 选择 Properties(属性)选项卡。
  3. Event notifications(事件通知)中,选择 Create event notification(创建事件通知)。
  4. Event name(事件名称)中,输入事件的名称,例如 your-event-name
  5. 对于 Prefix(前缀),输入前缀,例如 images/
  6. 对于 Suffix(后缀),输入后缀,例如 .jpg
  7. 对于 Event types(事件类型),选择 All objects create events(所有对象创建事件)。
  8. Lambda function(Lambda 函数)下拉列表中,选择您的 Lambda 函数。
  9. 选择 Save changes(保存更改)。

重新设计您的架构

如果您无法重新配置您的 S3 事件通知来避免重叠,请重新设计您的架构来解决此问题。

例如,配置事件通知以触发 Lambda 函数,以便基于 S3 事件触发其他 Lambda 函数。或者,配置事件通知以将事件发布到 Amazon Simple Notification Service (Amazon SNS) 主题或 Amazon Simple Queue Service (Amazon SQS) 队列。

**注意:**确保主题或队列将事件推送到多个已订阅的 Lambda 函数。使用逻辑设计订阅的函数,以决定是否处理这些函数收到的事件。有关详细信息,请参阅 Fanout S3 event notifications to multiple endpoints

您还可以在 AWS CloudTrail 上启用 Amazon S3 操作的对象级日志记录。然后,使用 Amazon EventBridge 规则,根据 Amazon S3 事件模式触发您的 Lambda 函数。有关详细信息,请参阅教程: 使用 EventBridge 记录 Amazon S3 对象级操作

对于更复杂的架构和流程,请使用 AWS Step Functions 状态机来设计和管理您的工作流。有关详细信息,请参阅 AWS Step Functions 应用场景Step Functions 学习教程

相关信息

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

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

使用 Lambda 处理 Amazon S3 事件通知

教程: Using an Amazon S3 trigger to invoke a Lambda function

AWS 官方已更新 10 个月前