以下のawsラムダ関数を作成し、ターゲットバケット上のすべてのS3アップロードイベントに対してトリガーを設定しました。この関数は、2000000バイトを超えるファイルアップロードを拒否しようとします。エラーメッセージは記録されましたが、context.fail( 'アップロード拒否')またはcontext.fail(新しいエラー( 'アップロード拒否'))のいずれも、失敗したアップロードを妨げませんでした。ファイルのアップロードを拒否する方法、または一般的にaws lambdaでイベントを「拒否/停止」する方法はありますか?aws lambdaはファイルアップロードを拒否します
//// nodejs AWSラムダコード://///
exports.handler = (event, context, callback) => {
var MAX_FILE_SIZE = 2000000;
var msg = '';
console.log('Received event:', JSON.stringify(event, null, 2));
if (event.Records && event.Records.length && event.Records.length>0 && event.Records[0].s3 && event.Records[0].s3.object
&& event.Records[0].s3.object.size && event.Records[0].s3.object.size > MAX_FILE_SIZE) {
msg = 'File ' + event.Records[0].s3.object.key + ' rejected, file size ' + event.Records[0].s3.object.size
+ ' is greater than ' + MAX_FILE_SIZE + ' bytes.';
console.log(msg);
var err = new Error(msg);
callback(err, {'disposition':'STOP_RULE'});
context.fail(err);
} else {
msg = 'Upload succeeded.';
console.log(msg);
callback(null, msg);
context.succeed(msg);
}
};
答えはありましたが、それ以上のコメントです。あなたのラムダ関数またはコールバック関数は、実際にアップロードを行う必要があります。あなたのラムダ関数がアップロード時にトリガーするのではなく、既に起こった後に、apiゲートウェイでそれを使用して、それを呼び出してから、検証に合格すれば、サーバにアップロードして返すか、ラムダアップロードのサイズをs3に制限することが目標であれば、アップロードする(それは私が示唆している) –
です。その後、バケットポリシーを使用してそれを行うことができます。 https://aws.amazon.com/articles/1434を参照してください。 –