【问题标题】:Pass Value from one Lambda to another Lambda将值从一个 Lambda 传递到另一个 Lambda
【发布时间】:2021-01-17 16:16:10
【问题描述】:

拉姆达 A:

var aws = require('aws-sdk');
var ses = new aws.SES({region: 'us-east-2'});
var lambda = new aws.Lambda({region: 'us-east-2'});


const mysql = require('mysql'); 
const connection = mysql.createConnection({ 
  host: process.env.host1,  
  user: process.env.user, 
  password: process.env.password, 
  port: process.env.port1, 
  connectionLimit: 10,   
  multipleStatements: true,
  connectionLimit: 1000,   
  connectTimeout: 60 * 60 * 1000, 
  acquireTimeout: 60 * 60 * 1000, 
  timeout: 60 * 60 * 1000, 
  debug: true 
});


exports.handler = (event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;
  var rand = function() {return Math.random().toString(36).substr(2); };
  var token = function() {return rand() + rand(); };
  
  const t=token();
  const e=JSON.stringify(t);
    
  var params = {
    FunctionName: 'LambdaB',
    InvocationType:'RequestResponse',
    Payload: '{"name" : '+e+'}'
  };

  lambda.invoke(params, function(err, data) {
    if (err) {
      context.fail(err);}
    else {
      context.succeed('Lambda_B said '+ data.Payload);}
  });
  
  var query1= connection.query("SELECT * FROM users WHERE email=?",[event.email],function(error, results){
    if(results && results.length !== 0){
     var params = {
      Destination: {
        ToAddresses: [event.email]},
      Message: {
        Body: {
          Text: {Data:t}
        },
        Subject: { Data: "RESET PASSWORD TOKEN"}
      },
      Source: "Source Email"
      };

      ses.sendEmail(params, function (err, data) {
        callback(null, {err: err, data: data});
        if (err) {
          console.log(err);
          context.fail(err);}
        else{
          console.log(data);
          context.succeed(event);
        }
      });
  }});
};

拉姆达乙:

exports.handler = function(event, context) {
  console.log('Lambda B Received event:', JSON.stringify(event, null, 2));
  context.succeed(event.name);
  
};

测试 Lambda A 时的响应:

"Lambda_B said \"550n1hbz2zwq2xln4n2cd\""

测试 Lambda B 时的响应:

null

我不确定我这样做是否正确,但我正在传递作为随机生成令牌的有效负载,从 Lambda A 到 Lambda B。基本上我正在创建一个 android 应用程序,我想要做的是处理令牌(在有效负载中)在 Lambda B 中,因此我可以验证用户在控制台上输入的令牌是否与已生成并发送到他们的电子邮件的令牌匹配。如果匹配,他们可以被发送到应用程序的下一页,他们可以在其中重置他们的帐户密码。但正如您可以从下面的响应中看到的那样,当测试输出 null 时,Lambda A 会返回字符串令牌和 Lambda B。我希望 Lambda B 检索传递给它的令牌并对其进行逻辑操作,但不幸的是我不知道如何检索令牌,所以你能帮我弄清楚吗?

【问题讨论】:

  • 你没有从你的 lambda B 返回任何东西。所以你得到 null 作为返回值。
  • 那么如何在 lambda B 中返回传递的有效载荷?例如,如果在 Lambda A 中生成的令牌是 123abc,那么当它传递给 lambda B 时,我想 console.log 123abc 到 LambdaB 的日志。
  • nodejs 的例子是in aws docs
  • 不,我想要有效负载,而不仅仅是事件输出
  • 没有人知道如何做到这一点?

标签: node.js json amazon-web-services aws-lambda


【解决方案1】:

我认为你的代码需要改变

InvocationType: RequestResponse

进入

InvocationType: Event

请找到这个供您参考:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多