You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CLI创建Lambda S3触发器遇未知选项错误,求语法修正

解决Windows批处理中AWS CLI配置S3触发Lambda的错误问题

你的问题根源是用错了AWS CLI命令:aws lambda create-event-source-mapping仅适用于Kinesis、DynamoDB流、SQS等流式事件源,并不支持S3触发器。S3桶的事件通知需要通过S3的API命令aws s3api put-bucket-notification-configuration来配置。

以下是修正后的完整Windows批处理脚本,实现指定后缀文件上传S3时触发Lambda:

步骤1:提前准备

  • 确保AWS CLI已配置好凭证(aws configure完成)
  • 已打包好Lambda函数代码为lambda_function.zip
  • 记录好你的S3桶名、Lambda函数名、AWS区域

步骤2:修正后的批处理脚本

@echo off
setlocal enabledelayedexpansion

:: 配置参数
set "REGION=us-east-1"
set "BUCKET_NAME=your-s3-bucket-name"
set "LAMBDA_FUNCTION_NAME=your-lambda-function-name"
set "LAMBDA_ROLE_ARN=arn:aws:iam::123456789012:role/lambda-execution-role"

:: 1. 创建Lambda函数(如果已创建可跳过此步)
aws lambda create-function ^
    --region %REGION% ^
    --function-name %LAMBDA_FUNCTION_NAME% ^
    --runtime python3.11 ^
    --role %LAMBDA_ROLE_ARN% ^
    --handler lambda_function.lambda_handler ^
    --zip-file fileb://lambda_function.zip

:: 2. 获取Lambda函数的ARN(用于S3事件配置)
for /f "delims=" %%i in ('aws lambda get-function --region %REGION% --function-name %LAMBDA_FUNCTION_NAME% --query "Configuration.FunctionArn" --output text') do (
    set "LAMBDA_ARN=%%i"
)

:: 3. 配置S3桶事件通知(触发指定后缀文件上传)
:: 注意:Windows批处理中JSON双引号需要转义为\"
aws s3api put-bucket-notification-configuration ^
    --region %REGION% ^
    --bucket %BUCKET_NAME% ^
    --notification-configuration "{
        \"LambdaFunctionConfigurations\": [
            {
                \"LambdaFunctionArn\": \"%LAMBDA_ARN%\",
                \"Events\": [\"s3:ObjectCreated:*\"],
                \"Filter\": {
                    \"Key\": {
                        \"FilterRules\": [
                            {
                                \"Name\": \"suffix\",
                                \"Value\": \".MF4\"
                            },
                            {
                                \"Name\": \"suffix\",
                                \"Value\": \".MFC\"
                            },
                            {
                                \"Name\": \"suffix\",
                                \"Value\": \".MFE\"
                            },
                            {
                                \"Name\": \"suffix\",
                                \"Value\": \".MFM\"
                            }
                        ]
                    }
                }
            }
        ]
    }"

:: 4. 验证配置是否生效
aws s3api get-bucket-notification-configuration --region %REGION% --bucket %BUCKET_NAME%

echo S3触发器配置完成!
endlocal

关键说明

  1. 权限配置:确保你的Lambda执行角色拥有s3:GetObject权限,同时S3服务拥有lambda:InvokeFunction权限(可通过Lambda控制台的「配置-触发器」自动添加,或手动添加IAM策略)。
  2. JSON转义:Windows批处理中,JSON里的双引号必须用\"转义,否则会导致命令解析错误。
  3. 事件类型:s3:ObjectCreated:*会匹配所有文件创建动作(上传、复制等),如果仅需上传触发,可改为s3:ObjectCreated:Put。
  4. 多后缀过滤:通过多个suffix规则实现同时匹配.MF4/.MFC/.MFE/.MFM后缀的文件。

常见问题排查

  • 如果出现「权限不足」错误:检查Lambda角色和S3的权限策略是否正确配置。
  • 如果事件未触发:验证S3桶的事件通知配置是否正确,以及Lambda函数的触发器列表是否显示该S3事件。

内容的提问来源于stack exchange,提问作者mfcss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:45:33