AWS lambda invoquer ne pas appeler un autre lambda fonction - noeud.js
  après avoir donné tous les droits d'invoquer la fonction. Ma fonction Lambda n'est pas capable d'invoquer une autre fonction . Chaque fois que je reçois timeout avoir  30 seconds timeout  question.  Il ressemble lambda n'est pas en mesure d'obtenir une autre fonction lambda  
mes lambdas sont dans la même région, même politique, même groupe de sécurité .. Aussi VPC sont les mêmes dans les deux lambdas. La seule chose est différente maintenant est fonctions lambda
Voici le rôle des droits de l'
  1) Créé  AWSLambdaExecute  et  AWSLambdaBasicExecutionRole   
2) créé une fonction lambda qui doit être appelé Lambda_TEST
exports.handler = function(event, context) {
  console.log('Lambda TEST Received event:', JSON.stringify(event, null, 2));
  context.succeed(event);
};
3) Voici une autre fonction d'où elle est appelée .
var AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';
var lambda = new AWS.Lambda();
exports.handler = function(event, context) {
 var params = {
   FunctionName: 'Lambda_TEST', // the lambda function we are going to invoke
   InvocationType: 'RequestResponse',
   LogType: 'Tail',
   Payload: '{ "name" : "Arpit" }'
 };
  lambda.invoke(params, function(err, data) {
   if (err) {
    context.fail(err);
   } else {
   context.succeed('Lambda_TEST said '+ data.Payload);
  }
 })
};
référence tirée de: ce lien
2 réponses
Note
  je désigne par    exécuteur testamentaire    le  lambda  qui exécute la deuxième  lambda  .  
Pourquoi Délai D'Attente?
  depuis que    exécuteur testamentaire    est "verrouillé" derrière un  VPC  - toutes les communications internet sont bloquées.  
  qui résulte en n'importe quel appel  http(s)  à être chronométré comme ils demandent le paquet jamais il arrive à destination.  
 C'est pourquoi toutes les actions effectuées par aws-sdk  donnent lieu à un temps mort.  
Solution Simple
 si le  exécuteur testamentaire  n'a pas  avoir  à être dans un VPC - il suffit de le sortir, un lambda peut fonctionner aussi bien sans un VPC .   
  Localisation  lambda  dans un  VPC  est requis lorsque le  lambda appelle des ressources à l'intérieur du VPC .  
Vraie Solution
 de ce qui précède, il s'ensuit que toute ressource située à l'intérieur d'un VPC ne peut pas accéder à l'internet -  qui n'est pas correct   - seulement quelques configurations doivent être faites.  
-  créer un VPC.
- créer 2 sous-réseaux , que l'on soit désigné comme privé et le deuxième public (ces termes sont expliqués plus loin, continuez à lire).
-  créer un  passerelle Internet  - il s'agit d'un routeur virtuel qui connecte un VPCà l'internet.
-   créez un  NAT Gateway  - choisissez le  public    sous-réseau et créez un nouveau  elastic IPpour lui (cette IP est locale à votreVPC) - ce composant achemine les communications vers leinternet-gateway.
-   créer 2 tables D'acheminement - une nommée publique et la seconde privée . - dans la table d'acheminement public , passez à Routes et ajoutez une nouvelle route:
 Destination: 0.0.0 / 0 cible: L'ID du internet-gateway- dans la table d'acheminement privé , passez à Routes et ajoutez une nouvelle route:
 Destination: 0.0.0.0 / 0 cible: L'ID du nat-gateway-     Un privé sous-réseau est un sous-réseau dans sa table de routage - là , pas de itinéraire d'un internet-gateway.
-    Un public sous-réseau est un sous-réseau dans sa table de routage - là existe un itinéraire à un internet-gateway
 
ce que nous avait ici?
nous avons créé quelque chose comme ceci:
ce, ce qui permet aux ressources dans privé sous-réseaux d'appeler l'internet. Vous pouvez trouver plus de documentation ici .
j'ai connu ce même problème où les Lambdas qui sont" épinglés " à un VPC ne sont pas en mesure d'invoquer D'autres Lambdas. J'ai fait face à ce problème, sans utiliser NAT, en remaniant la structure de ma solution.
disons que j'ai plusieurs lambdas, A, B, C, D,... et je voudrais que ces Lambdas aient chacun accès à une base de données RDS. Pour avoir cet accès DB, je dois mettre les lambdas dans la même VPC que la base de données. Mais j'aimerais aussi des lambdas parmi A, B, C, D,... pour appeler l'un de l'autre. Je tombe donc sur le problème décrit par L'Arpit.
j'ai eu affaire à cette question en divisant chaque Lambda en deux Lambdas: l'un qui se concentre sur le déroulement du processus (c.-à-d. invoquer d'autres lambdas et être invoqué par un autre lambda); et l'autre qui se concentre sur faire du" vrai " travail, comme interroger la base de données. Donc j'ai maintenant les fonctions A_flow, B_flow, C_flow, D_flow, ... et fonctions A_worker, B_worker, C_worker, D_worker, ... Le divers lambdas de flux ne sont pas "épinglés" à un VPC spécifique, et peuvent donc invoquer d'autres lambdas. Les différents travailleurs Lambdas sont dans le même VPC que la base de données, et peut interroger le DB.
chaque flux lambda "délègue" le travail d'interaction avec DB à l'ouvrier lambda correspondant. Il fait cette délégation en effectuant une invocation synchrone de l'ouvrier lambda. L'ouvrier lambdas n'invoquent pas d'autres lambdas. (En termes de flux de processus graphique, le travailleur lambdas sont terminal de nœuds.) Dans mon propre système, les invocations de lambdas de flux par d'autres lambdas de flux ont généralement été asynchrones; mais je suppose qu'elles pourraient être synchrones si désiré.
même si j'ai conçu cette approche comme une solution de rechange, il a une belle caractéristique de séparer clairement la conception de la fonction de haut niveau en (a) flux de processus et (b) effectuer des travaux plus détaillés, y compris l'interaction avec des ressources DB.
