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