我已設定 Amazon Simple Storage Service (Amazon S3) 事件通知功能,以調用 AWS Lambda 函數。但是,在發生 Amazon S3 事件時,系統不會調用此函數。
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱對 AWS CLI 進行錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
設定 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 僅會針對具有特定字首或字尾的物件發佈通知。請確保事件通知中指定的字首或字尾篩選條件包含上傳的物件金鑰名稱。
**注意:**您不可在篩選條件中將萬用字元 (*) 作為字首或字尾來表示任何字元
對於物件金鑰名稱篩選,字首或字尾中的某些特殊字元必須採用 URL 編碼 (百分比編碼)。例如,若要將字首的值定義為 test=abc/,請輸入 test%3Dabc/ URL 編碼值。
如需物件金鑰名稱中特定字元處理方式的詳細資訊,請參閱物件金鑰命名準則。
請檢查 Lambda 函數的 AWS Identity and Access Management (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 會對請求限流。
如需詳細資訊,請參閱非同步調用 Lambda 函數。
我的 Amazon S3 事件通知未調用 Lambda 函數時,如何使用 AWS Systems Manager Automation 來對問題進行疑難排解?
使用 Lambda 處理 Amazon S3 事件通知
教學課程: 使用 Amazon S3 觸發程序來調用 Lambda 函數
為什麼我在建立 Amazon S3 事件通知時會收到「無法驗證下列目的地組態」的錯誤?
如何設定 Amazon S3 事件通知,以調用其他 AWS 帳戶中的 Lambda 函數?