2016-09-08 25 views
0

SES受信ルールを使ってS3バケットにアップロードしたメールを解析するラムダ関数を作成したいと思います。SES受信ルールでS3にアップロードしたメールを解析するLambda関数を作成します

SES受信ルールによるS3バケットへのアップロードは正常に動作します。したがって、すでにテストされており、ファイルが正しくアップロードされていることが確認されています。

マイアマゾンラムダ関数:

var AWS = require('aws-sdk'); 
var s3 = new AWS.S3(); 

var bucketName = 'bucket_name/folder/destination'; 

exports.handler = function(event, context, callback) { 
console.log('Process email'); 

var sesNotification = event.Records[0].ses; 
console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2)); 

// Retrieve the email from your bucket 
s3.getObject({ 
     Bucket: bucketName, 
     Key: sesNotification.mail.messageId 
    }, function(err, data) { 
     if (err) { 
      console.log(err, err.stack); 
      callback(err); 
     } else { 
      console.log("Raw email:\n" + data.Body); 

      // Custom email processing goes here 

      callback(null, null); 
     } 
    }); 
}; 

ファイルには、ラムダをトリガーするが、私は[SignatureDoesNotMatch]エラーが出るがアップロードされている場合:誰もこれに近づくために私を助けることができる場合

{ "errorMessage": "The request signature we calculated does not match the signature you provided. Check your key and signing method.", "errorType": "SignatureDoesNotMatch", "stackTrace": [ "Request.extractError (/var/runtime/node_modules/aws-sdk/lib/services/s3.js:524:35)", "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)", "Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)", "Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:615:14)", "Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)", "AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)", "/var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10", "Request. (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)", "Request. (/var/runtime/node_modules/aws-sdk/lib/request.js:617:12)", "Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)" ] }

を問題は、それは素晴らしいだろう! ありがとう

+0

。 "destination"は "bucket_name/folder/destination"で何を参照していますか? @KhalidT。 –

+0

実際には、bucketName変数はオブジェクトを取得する場所を表します。 –

答えて

0

私はそれを解決しました。 bucketNameには、バケットの名前のみを含める必要があります。しかし、キーにはファイルの正確な "ディレクトリ"へのルートの残りを含めることができます。

したがって、基本的にbucketNameはサブフォルダを含むべきではありません。参考のため

おかげ

AWS Lambda S3 GET/POST - SignatureDoesNotMatch errorあなたbucketName変数におそらく関連

+0

あなたの「サブフォルダ」は実際にはフォルダではなく、オブジェクトキーの一部にすぎないからです。 –

関連する問題