似乎无法传递在另一个AWS lambda函数中作为AWS lambda函数调用的某些代码(包含数据和函数)。
例如,请使用此customConfigLambda
:
var callbackPayload = {};
callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };
exports.handler = (event, context, callback) => {
callback(null, callbackPayload);
};
当我在另一个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));
}
});
};
然后,我只能看到callbackPayload.fooData
而不是callbackPayload.fooFunction
。
如何在多个其他AWS lambda函数之间共享一些callbackPayload.fooFunction(s)
?
答案 0 :(得分:1)
请参阅有关使用回调参数的文档:
它说明了callbackPayload
(代码中的JSON.stringify
):
result - 是一个可选参数,可用于提供 功能执行成功的结果。提供的结果必须是
JSON.stringify
兼容。如果提供了错误,则此参数为 忽略。
要true
兼容,你不能拥有任何功能。请参阅http://json.org/以了解哪些是有效的JSON(仅限字符串,数字,对象,数组,false
,null
和require
。)
如果您希望在广义上在AWS Lambda函数之间共享代码,则必须在JSON.stringify
中同时使用相同的Node模块,以便您可以为所有这些功能提供一组通用功能。您的AWS Lamda处理程序。但是你不能在它们之间传递任意代码,因为它们不会在var callbackPayload = {};
callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };
alert(JSON.stringify(callbackPayload));
之后存在。
作为测试,您可以尝试在浏览器中运行它:
var callbackPayload = {};
callbackPayload.fooData = 'fooFromData';
callbackPayload.fooFunction = function() {return 'fooFromFunction'; };
console.log(JSON.stringify(callbackPayload));
(见DEMO) 或节点中的这个:
{"fooData":"fooFromData"}
并查看结果:
callbackPayload.fooFunction
= function() {return 'fooFromFunction'; }.toString();
在序列化过程中删除了这些函数。
当然你可以这样做:
{"fooData":"fooFromData","fooFunction":"function () {return 'fooFromFunction'; }"}
并获得JSON结果:
eval
你理论上可以global $user;
$items = array();
$sql = 'SELECT nid FROM {node} WHERE uid = :uid';
$result = db_query($sql, array(':uid' => $user->uid));
foreach ($result as $row) {
$items[] = $row->nid;
}
dsm($items);
在另一端,但我不会真的推荐它。
答案 1 :(得分:0)
从AWS Reinvent 2018开始,Amazon引入了Lambda Layers。
Lambda层,一种集中管理跨多个功能共享的代码和数据的方法。
这个想法是,现在您可以将常用组件放在ZIP文件中,并将其作为Lambda图层上传。您的功能代码无需更改,可以照常引用层中的库,而不必单独打包。