2017-05-15 13 views
0

Amazon Simple Email Service(Amazon SES)awsラムダ関数内のses.sendMail()コールバックを返さない

私は以下のコードを持っています。それは私がaws ec2インスタンスまたは私のワークステーションからそれを使用する場合、完全に動作します。しかし、私がAWS VPCの内部で作業しているラムダ関数に追加するとすぐに、私のses.sendEmail()へのコールバックは呼び出されません。私は、 "sendEmail関数エラー"、または "sendEmail関数成功" console.log()を見ることはありません。私のタイムアウト期間の終わりに私のCloudWatchログに関数と私のラムダ関数がタイムアウトします。私は何ができるのか分からない。

追加する可能性のあるIAMの役割やポリシー、必要とされた言及が見つからなかったり、追加する必要のあるものがないか調べました。

「AmazonSESFullAccess」というポリシーを自分のIAMロールに追加しようとしました。まだタイムアウト。

let aws = require('aws-sdk') 
    , ses = new aws.SES({ apiVersion: '2010-12-01', region: 'us-west-2' }) 
    ; 

sendEmail({ 
    To : [ '[email protected]' , '[email protected]'], 
    From: '[email protected]', 
    Subject: 'Sending An Email Out', 
    Body: `<html> A Buch of HTML Here</html>` 
}, function(err, result){ 
    if(err){ 
     console.error('SendEmail Error', err); 
    } else { 
     console.log('SendEmail Result', result); 
    } 
}); 


function sendEmail(emailObj, cb){ 
    emailObj.To.push('[email protected]'); 

    let mailData = { 
     Source: emailObj.From, 
     Destination: { ToAddresses: emailObj.To }, 
     Message: { 
      Subject: { 
       Data: emailObj.Subject 
      }, 
      Body: { 
       Html: { 
        Data: emailObj.Body 
       } 
      } 
     } 
    } 

    console.log('sending Email', JSON.stringify(mailData)); //see in Cloudwatch Logs! YEAH!!! 
    ses.sendEmail(mailData, function(err, data){ 
     if(err){ 
      console.log('sendEmail Function Error', JSON.stringify(err)); // never see in cloudwatch logs, WHAT?? 
      cb(err); 
     } else { 
      console.log('sendEmail Function Success', JSON.stringify(data)); // never see in cloudwatch logs, WHAT?? 
      cb(null, data); 
     } 
    }); 
} 

答えて

2

あなたはラムダがVPC内に設定されています。この場合、インターネットにアクセスできず、AWS APIにもアクセスできません。

ラムダを十分長く実行させると、コールバックはconnection timeoutエラーで呼び出されます。

私の詳細な回答はhereに従ってください。

+0

VPCには、N.0ゲートウェイとインターネットゲートウェイの両方が0.0.0.0.0を指していますが、まだタイムアウトしています。しかし、私はプライベートサブネットの内部にNat Gatewayを置くことがわかりました。これをパブリックサブネットに切り替えると、関数は正常に完了しました。 – shaun

関連する問題