跳至內容

Amazon S3 事件通知未調用 Lambda 函式時,如何對問題進行疑難排解?

2 分的閱讀內容
0

我已設定 Amazon Simple Storage Service (Amazon S3) 事件通知調用 AWS Lambda 函式。但是,Amazon S3 事件發生時卻並未調用函式。

簡短說明

若要進行疑難排解,請使用 AWS Systems Manager Automation 執行手冊的 AWSSupport-TroubleshootLambdaS3Event。或者,對 Lambda 函式進行手動疑難排解。

解決方法

執行 Systems Manager Automation 執行手冊

先決條件: 在啟動執行手冊之前,請確定您的 AWS Identity and Access Management (IAM) 使用者或角色具有所需的權限。如需更多資訊,請參閱 AWSSupport-TroubleshootLambdaS3EventRequired IAM permissions (必要 IAM 權限) 一節。

請完成以下步驟:

  1. 開啟 Systems Manager console (Systems Manager 主控台)。

  2. 在導覽窗格中,選擇 Documents (文件)。

  3. 在搜尋列中,輸入 AWSSupport-TroubleshootLambdaS3Event

  4. 選取 AWSSupport-TroubleshootLambdaS3Event

  5. 選擇 Execute automation (執行自動化)。

  6. 選擇 Execute (執行)。

    注意: 測試最多可能需要 15 分鐘才能完成。如需執行手冊進行的步驟清單,請參閱 AWSSupport-TroubleshootLambdaS3EventDocument Steps (文件步驟) 一節。

對 Lambda 函式進行手動疑難排解

注意: 如果您執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱 Troubleshooting errors for the 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 僅會針對具有特定字首或字尾的物件發佈通知。請確保事件通知中指定的字首或字尾篩選條件包含上傳的物件金鑰名稱。請確保您的 Lambda 函式與 S3 儲存貯體位於相同的 AWS 區域。

注意: 您無法在篩選條件中將萬用字元 (*) 當作字首或字尾來代表單一字元。

對於物件金鑰名稱篩選,字首或字尾中的某些特殊字元必須採用網址編碼或百分比編碼。例如,若要將字首的值定義為 test=abc/,請輸入 test%3Dabc/ 網址編碼值。

如需物件金鑰名稱中特定字元處理方式的詳細資訊,請參閱物件金鑰命名準則

確認 Lambda 函式的 IAM 資源型政策是否具有 Amazon S3 用於調用函式所需的權限

檢查 Lambda 函式的 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 函式設定為能夠處理來自 S3 事件通知的並行調用。如果調用請求到達的速度超過函式可擴展的速度,或者您的函式達到並行數上限,則 Lambda 會對請求限流。

如需詳細資訊,請參閱非同步調用 Lambda 函式

相關資訊

我的 Amazon S3 事件通知未調用 Lambda 函式時,如何使用 AWS Systems Manager Automation 對問題進行疑難排解?

使用 Lambda 處理 Amazon S3 事件通知

教學課程: 使用 Amazon S3 觸發程序來調用 Lambda 函式

搭配一般用途儲存貯體使用 Amazon S3 事件通知時,為什麼會收到「Unable to validate the following destination configurations」(無法驗證以下目的地組態) 錯誤?

如何設定 Amazon S3 事件通知,以調用其他 AWS 帳戶中的 Lambda 函式?

AWS 官方已更新 14 天前