【问题标题】:Retrieving Function parameters values in aws lambda using node.js使用 node.js 在 aws lambda 中检索函数参数值
【发布时间】:2018-06-01 19:25:00
【问题描述】:

我有 2 个 aws lambda 函数,即“LambdaChain1”和“LambdaChain2” 我正在从 aws lambda 函数“LambdaChain1”调用 aws lambda 函数“LambdaChain2”,如下所示:

enter code here var start=new Date(); enter code hereconsole.log('加载函数');

exports.handler = function(event, context) {
    //console.log('Received event:', JSON.stringify(event, null, 2));
    event.Records.forEach(function(record) {
        // Kinesis data is base64 encoded so decode here
        var payload = new Buffer(record.kinesis.data, 'base64').toString('ascii');
        console.log('Decoded payload:', payload);
    });
    context.succeed("Successfully processed " + event.Records.length + " records.");
    var params = {
  FunctionName: 'LambdaChain2', /* required */
  InvokeArgs: start.getTime() /* required */
};
lambda.invokeAsync(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
};

现在我们可以从代码中看到,我已将“start.getTime()”作为参数传递给 aws lambda 函数“LambdaChain2”......

我想知道在 aws lambda 函数 LambdaChain2 中如何检索或使用我从 lambda 函数“LambdaChain1”传递给函数“LambdaChain2”的参数.....您能否提供一个示例

【问题讨论】:

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


    【解决方案1】:

    看起来invokeAsync 已被弃用,所以我在此示例中使用了invoke,但它非常相似。

    invoke 参数中的Payload 参数成为 ChainFunc2 中的event 参数。

    ChainFunc1

    var AWS = require("aws-sdk");
    
    exports.handler = function(event, context) {
        console.log('Received event:', JSON.stringify(event, null, 2));
        var params = {
            FunctionName: "ChainFunc2",
            InvocationType: "RequestResponse",
            Payload: JSON.stringify({"greeting": "Hello, Lambda"})
        };
        var lambdaClient = new AWS.Lambda();
        lambdaClient.invoke(params, function(err, data) {
            if (err) {
                console.log("invoke failed:" + err, err.stack);
                context.fail(err);
            } else {
                console.log("invoke succeeded", data);
                context.succeed(data);
            }
        });
    };
    

    ChainFunc2

    exports.handler = function(event, context) {
        console.log("Received event:", JSON.stringify(event, null, 2));
        console.log("Greeting:", event.greeting);
        context.succeed({"message": "ChainFunc2 processed this", "payload": event});
    };
    

    【讨论】:

    • 当我在 ChainFunc2 中使用 ChainFunc1 的参数时,您的解决方案正在工作......但是现在我无法在 ChainFunc3,4,5 中使用相同的参数......基本上我想使用在其他函数中具有相同值的相同参数也......我可以从日志中看到 JSON.stringify(event,null,2) 从 ChainFunc3 返回 null 并且在 1 和 2 中返回不为 null .....怎么能我可以在另一个 lambda 函数中使用参数 greeting 吗?如果我在节点 js 中使用 Long 或 Integer 值,我是否必须采取单独的方法
    • 如何将参数从 ChainFunc2 传递到 ChainFunc3、4 等?您将不得不继续传递相同的值。
    • 我想在我的 lambda 函数中传递毫秒。这是我的 ChainFunc1 :: var AWS = require("aws-sdk"); 代码var starttime=new Date().getTime(); exports.handler=function(event,context) { var payload=new Buffer(record.kinesis.data, 'base64').toString('ascii'); var params = { FunctionName: "ChainFunc2", InvocationType: "RequestResponse", Payload: JSON.stringify({"starttime": start.getTime()}) }; var lambdaClient = new AWS.Lambda();
    • lambdaClient.invoke(params, function(err, data) { if (err) { console.log("invoke failed:" + err, err.stack); context.fail(err); } else { console.log("调用成功", data); context.succeed(data); } }); }); };
    • 现在这是我的 lambda 函数 ChainFunc2 :: var AWS = require("aws-sdk"); console.log("收到事件:", JSON.stringify(event, null, 2)); export.handler = function(event, context) { console.log("收到事件:", JSON.stringify(event, null, 2)); var startTime = event.starttime; var params = { FunctionName: "ChainFunc3", InvocationType: "RequestResponse", Payload: JSON.stringify({"starttime": starttime}) }; var lambdaClient = new AWS.Lambda();
    猜你喜欢
    • 2021-09-19
    • 2019-05-27
    • 1970-01-01
    • 2018-08-02
    • 2019-01-19
    • 2021-06-25
    • 2022-12-03
    • 2020-03-29
    • 2021-06-26
    相关资源
    最近更新 更多