2017-10-08 3 views
0

J'essaye d'invoquer une fonction aws lamda basée sur un déclencheur d'email. Je reçois le trigger de l'email et il frappe la déclaration if je m'attends mais alors il ne parvient pas à faire le lambda.invoke.comment invoquer une fonction aws lamda d'un autre

Que manque-t-il? j'arrive à la plupart des déclarations de journal, mais ne semble pas

exports.handler = function(event, context) { 
    var aws = require('aws-sdk'); 

    var lambda = new aws.Lambda({ 
     region: 'us-east-1' 
    }); 

    var sesNotification = event.Records[0].ses; 
    //console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2)); 
    var sub=sesNotification.mail.commonHeaders.subject; 
     if(sub){ 
      if(sub.toLowerCase()=="startpipeline"){ 
       console.log("Starting Pipeline"); 
       lambda.invoke({ 
           FunctionName: 'StartDevOpsServers', 
           Payload: JSON.stringify(event, null, 2), // pass params 
           InvocationType: 'Event' 
          }, function(error, data) { 
           if (error) { 

           console.log("error",error,data); 
           context.done('error', error); 
           } 
           if(data.Payload){ 

           console.log("succeed",data.Payload); 
           context.succeed(data.Payload) 
           } 
          }); 

      }else if(sub.toLowerCase()=="stoppipeline"){ 
       console.log("Stopping Pipeline"); 
           lambda.invoke({ 
           FunctionName: 'StopDevOpsServers', 
           Payload: JSON.stringify(event, null, 2) // pass params 
          }, function(error, data) { 
           if (error) { 
           context.done('error', error); 
           } 
           if(data.Payload){ 

           context.succeed(data.Payload) 
           } 
          }); 
        context.succeed(); 

      }else{ 
       console.log('subjectnotRecognized') 
      } 
     }else{ 
      console.log("noSubJect") 
     } 

}; 
+0

Ce poste probablement utile [https://stackoverflow.com/questions/31714788/can-an-aws-lambda-function-call-another](https://stackoverflow. com/questions/31714788/can-an-aws-lambda-function-call-another) – KKK

+0

Avez-vous eu à placer votre fonction Lambda à l'intérieur de votre VPC? Si c'est le cas, vous aurez besoin d'une passerelle NAT pour que la fonction Lambda accède à l'API AWS (afin d'appeler l'autre fonction). Ou simplement le retirer du VPC. Si ce n'est pas le cas, essayez d'afficher le journal complet. –

Répondre

-2

Il semble que vous voulez des fonctions d'étape. Ils vous permettront d'enchaîner les différentes fonctions lambda ensemble, faire des choses en parallèle, etc.

0
  1. garder votre fichier aws-sdk sur le dessus de votre code

    `var SSFE = require ('aws -sdk ');

    exports.handler = function(event, context) 
    { 
    
        var lambda = new aws.Lambda({ 
         region: 'us-east-1' 
        }); 
    
        var sesNotification = event.Records[0].ses; 
        //console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2)); 
        var sub=sesNotification.mail.commonHeaders.subject; 
         if(sub){ 
          if(sub.toLowerCase()=="startpipeline"){ 
           console.log("Starting Pipeline"); 
           lambda.invoke({ 
               FunctionName: 'StartDevOpsServers', 
               Payload: JSON.stringify(event, null, 2), // pass params 
               InvocationType: 'Event' 
              }, function(error, data) { 
               if (error) { 
    
               console.log("error",error,data); 
               context.done('error', error); 
               } 
               if(data.Payload){ 
    
               console.log("succeed",data.Payload); 
               context.succeed(data.Payload) 
               } 
              }); 
    
          }else if(sub.toLowerCase()=="stoppipeline"){ 
           console.log("Stopping Pipeline"); 
               lambda.invoke({ 
               FunctionName: 'StopDevOpsServers', 
               Payload: JSON.stringify(event, null, 2) // pass params 
              }, function(error, data) { 
               if (error) { 
               context.done('error', error); 
               } 
               if(data.Payload){ 
    
               context.succeed(data.Payload) 
               } 
              }); 
            context.succeed(); 
    
          }else{ 
           console.log('subjectnotRecognized') 
          } 
         }else{ 
          console.log("noSubJect") 
         } 
    
        };