我想要對 Amazon Simple Storage Service (Amazon S3) 事件通知未調用 AWS Lambda 函數的問題進行疑難排解。
解決方法
若要對 Lambda 函數的 Amazon S3 事件通知進行疑難排解,請完成下列步驟以確認您的權限和組態設定:
- 開啟 Amazon S3 console (Amazon S3 主控台),然後瀏覽至您的儲存貯體。
- 選擇 Properties (屬性) 索引標籤。
- 在 Event notifications (事件通知) 中,選取您的事件通知,然後選擇 Edit (編輯)。
- 在 General configuration (一般組態) 中,檢閱 Prefix (首碼) 和 Suffix (尾碼) 設定。
- (選用) 如果您使用首碼或尾碼,請確認下列項目:
儲存貯體中的物件金鑰符合物件金鑰命名準則。
任何特殊字元都採用 URL 編碼 (百分比編碼) 格式。
- 在 Destination (目的地) 中,確認 Lambda 函數的 ARN 是否與有效函數相符。
- 選擇 Save changes (儲存變更)。
- 開啟 Lambda console (Lambda 主控台),然後選擇 Functions (函數)。
- 在 Function name (函數名稱) 中,選擇您的 Lambda 函數。
- 選擇 Configuration (組態) 索引標籤,然後選擇 Permissions (權限)。
- 在資源型政策陳述式中,選擇您的政策,然後選擇 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 有權對 Resource (資源) ARN 執行 lambda:InvokeFunction API 動作。
**重要:**Amazon S3 通常會在幾秒鐘內傳送事件通知,但有時可能需要 1 分鐘或更長時間。如需詳細資訊,請參閱 Amazon S3 事件通知。
相關資訊
如何允許 Lambda 函數存取 Amazon S3 儲存貯體?
當我使用 Lambda 函數將檔案上傳到另一個 AWS 帳戶的 Amazon S3 儲存貯體時,為什麼會出現拒絕存取錯誤?