在node.js中的AWS lambda函数之间共享代码

TPP*_*PPZ 6 callback amazon-web-services node.js aws-lambda

似乎不可能在另一个AWS lambda函数中传递作为AWS lambda函数调用的某些代码(包含数据和函数)。

举个例子customConfigLambda

var callbackPayload = {};

callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };

exports.handler = (event, context, callback) => {
    callback(null, callbackPayload);
};
Run Code Online (Sandbox Code Playgroud)

当我在另一个AWS lambda函数中调用之前的AWS lambda函数时,如下所示:

var AWS = require('aws-sdk');
AWS.config.update({accessKey: '123', secretAccessKey: 'abc', region: 'us-east-1' });
var lambda = new AWS.Lambda({region: 'us-east-1'});

exports.handler = (event, context, callback) => {
    var params = {FunctionName: 'customConfigLambda'};
    lambda.invoke(params, function(err, callbackPayload) {
        if (err) {
            // do nothing
        }
        else {
            console.log('callbackPayload:', JSON.stringify(callbackPayload, null, 2));
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

然后我只能看到callbackPayload.fooData但看不到callbackPayload.fooFunction

如何callbackPayload.fooFunction(s)在其他多个AWS Lambda函数之间共享一些内容?

rsp*_*rsp 1

请参阅有关使用回调参数的文档:

\n\n\n\n

它是关于resultcallbackPayload代码中的)的:

\n\n
\n

result \xe2\x80\x93 是一个可选参数,可用于提供函数成功执行的\n 结果。提供的结果必须 JSON.stringify兼容。 \n 如果提供错误,则忽略此参数。

\n
\n\n

为了JSON.stringify兼容,你不能在那里拥有任何功能。请参阅http://json.org/以了解什么是有效的 JSON(仅限字符串、数字、对象、数组、truefalsenull

\n\n

如果您希望在广义上在 AWS Lambda 函数之间共享代码,则必须require在这两个函数中使用相同的 Node 模块,以便您可以为所有 AWS Lambda 处理程序提供一组通用的函数。但是您不能在它们之间传递任意代码,因为这些代码将无法在JSON.stringify.

\n\n

作为测试,您可以尝试在浏览器中运行此命令:

\n\n
var callbackPayload = {};\n\ncallbackPayload.fooData = \'fooFromData\';\ncallbackPayload.fooFunction = function() {return \'fooFromFunction\'; };\n\nalert(JSON.stringify(callbackPayload));\n
Run Code Online (Sandbox Code Playgroud)\n\n

(请参阅DEMO)\也不是 Node 中的这个:

\n\n
var callbackPayload = {};\n\ncallbackPayload.fooData = \'fooFromData\';\ncallbackPayload.fooFunction = function() {return \'fooFromFunction\'; };\n\nconsole.log(JSON.stringify(callbackPayload));\n
Run Code Online (Sandbox Code Playgroud)\n\n

并查看结果:

\n\n
{"fooData":"fooFromData"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这些功能在序列化过程中被剥离。

\n\n

当然你可以这样做:

\n\n
callbackPayload.fooFunction\n    = function() {return \'fooFromFunction\'; }.toString();\n
Run Code Online (Sandbox Code Playgroud)\n\n

并得到 JSON 结果:

\n\n
{"fooData":"fooFromData","fooFunction":"function () {return \'fooFromFunction\'; }"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

理论上你可以eval在另一端,但我不会真正推荐它。

\n