2017-03-31 7 views
0

以下の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); 
    } 

}; 
+0

答えはありましたが、それ以上のコメントです。あなたのラムダ関数またはコールバック関数は、実際にアップロードを行う必要があります。あなたのラムダ関数がアップロード時にトリガーするのではなく、既に起こった後に、apiゲートウェイでそれを使用して、それを呼び出してから、検証に合格すれば、サーバにアップロードして返すか、ラムダアップロードのサイズをs3に制限することが目標であれば、アップロードする(それは私が示唆している) –

+0

です。その後、バケットポリシーを使用してそれを行うことができます。 https://aws.amazon.com/articles/1434を参照してください。 –

答えて

1

あなたはその場合には、それは制御されていないという理由だけで、あなたのラムダは、S3の通知によってトリガーされた場合にそれを行うことはできませんファイルのアップロードこれは単にファイルのアップロードに基づいていくつかの処理を行うために呼び出されます。ファイルのアップロードを制御する場合は、ラムダ関数を使用してアップロードを実行する必要があります

現在の状況で実際にできることは、サイズが必要な制限を超えている場合はファイルを削除でき、ファイルがアップロードされるのを防ぐことはできません。

関連する問題