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
关键说明
- 权限配置:确保你的Lambda执行角色拥有
s3:GetObject权限,同时S3服务拥有lambda:InvokeFunction权限(可通过Lambda控制台的「配置-触发器」自动添加,或手动添加IAM策略)。 - JSON转义:Windows批处理中,JSON里的双引号必须用
\"转义,否则会导致命令解析错误。 - 事件类型:
s3:ObjectCreated:*会匹配所有文件创建动作(上传、复制等),如果仅需上传触发,可改为s3:ObjectCreated:Put。 - 多后缀过滤:通过多个
suffix规则实现同时匹配.MF4/.MFC/.MFE/.MFM后缀的文件。
常见问题排查
- 如果出现「权限不足」错误:检查Lambda角色和S3的权限策略是否正确配置。
- 如果事件未触发:验证S3桶的事件通知配置是否正确,以及Lambda函数的触发器列表是否显示该S3事件。
内容的提问来源于stack exchange,提问作者mfcss
相关产品推荐
相关产品推荐

