2017-05-15 1 views
0

Amazon Simple Email Service (Amazon SES)ses.sendMail() innerhalb einer aws Lambda-Funktion nicht Rückruf Rückkehr

Ich habe den Code unten. Es funktioniert perfekt, wenn ich es von einer aws ec2-Instanz oder von meinem Arbeitsplatz aus verwende. Aber sobald ich es zu einer Lambda-Funktion hinzufüge, an der ich in einer AWS VPC arbeite, wird der Callback zu meiner ses.sendEmail() nie aufgerufen. Ich sehe nie einen "sendEmail Funktionsfehler" oder eine "sendEmail Funktionserfolg" console.log() in meinen CloudWatch Logs für die Funktion und meine Lambda Funktion läuft am Ende meiner Zeitlimitüberschreitung ab. Ich weiß nicht, was ich noch tun kann.

Ich habe nach IAM-Rollen oder -Richtlinien gesucht, die ich hinzufügen könnte, finde keine Erwähnung von ihnen benötigt oder welche hinzuzufügen.

Versucht, die Richtlinie 'AmazonSESFullAccess' zu meiner IAM-Rolle für die Funktion hinzuzufügen. Immer noch Zeiten.

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); 
     } 
    }); 
} 

Antwort

2

Sie sind Lambda ist in einem VPC, die in diesem Fall einrichten - keinen Zugang zum Internet hat, damit auch keinen Zugriff auf AWS-APIs.

Wenn Sie Ihr Lambda lange genug laufen lassen - der Callback wird mit einem connection timeout Fehler aufgerufen.

Bitte folgen Sie meiner detaillierten Antwort here.

+0

VPC hat sowohl ein Nat-Gateway als auch ein Internet-Gateway, die beide auf 0.0.0.0/0 zeigen, die immer noch Zeitlimit aufweisen. Ich stellte jedoch fest, dass ich das Nat-Gateway in ein privates Subnetz legte. Switched dies zu einem öffentlichen Subnetz und die Funktion erfolgreich abgeschlossen. – shaun

Verwandte Themen