跳至內容

如何解決在建立 Amazon S3 事件通知以觸發 Lambda 函數時,收到「組態定義不明確」錯誤?

2 分的閱讀內容
0

我嘗試建立 Amazon Simple Storage Service (Amazon S3) 儲存貯體事件通知,以觸發 AWS Lambda 函數,但收到錯誤。

簡短描述

當通知的事件資訊及其首碼或尾碼與 S3 儲存貯體的通知組態重疊時,就會發生「組態定義不明確錯誤」。

若要解決此錯誤,請執行下列其中一個動作:

  • 移除重疊事件,然後建立新事件。
  • 為具有重疊首碼或尾碼的多個重疊事件建立 S3 事件通知。
  • 重新設計您的架構。

**注意:**Amazon S3 事件通知組態允許具有非重疊字首或字尾的重疊事件。該組態還允許具有重疊前綴或後綴的非重疊事件。

如需詳細資訊和範例,請參閱使用物件金鑰名稱篩選設定事件通知

解決方法

注意: 如果您在執行 AWS Command Line Interface (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 儲存貯體上設定的所有事件通知清單,請執行 get-bucket-notification-configuration AWS CLI 命令。若要移除所有 S3 事件通知,請執行 put-bucket-notification-configuration AWS CLI 命令:

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

注意:your-bucket-name 替換為您的儲存貯體名稱。

移除重疊事件通知後,您可以執行 put-bucket-notification-configuration AWS CLI 命令來新增通知。

為具有重疊首碼或尾碼的多個重疊事件建立 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 函數。使用邏輯設計訂閱的函數,以決定是否處理函數接收到的事件。如需詳細資訊,請參閱將 S3 事件通知扇出至多個端點

您也可以將 Amazon S3 動作的物件層級日誌記錄開啟至 AWS CloudTrail。然後,使用 Amazon EventBridge 規則,根據 Amazon S3 事件模式觸發 Lambda 函數。如需詳細資訊,請參閱教學課程: 使用 EventBridge 記錄 Amazon S3 物件層級作業

對於更複雜的架構和流程,請使用 AWS Step Functions 狀態機器來設計和管理工作流程。如需詳細資訊,請參閱 AWS Step Functions 使用案例Step Functions 教學課程

相關資訊

為什麼我在使用 Amazon S3 Event Notifications 時會收到「無法驗證下列目的地組態」的錯誤?

如何疑難排解 Amazon S3 事件通知未調用 Lambda 函數的問題?

使用 Lambda 處理 Amazon S3 事件通知

教學課程: 使用 Amazon S3 觸發條件調用 Lambda 函數

AWS 官方已更新 10 個月前