感谢Zappa,我有一个用Flask编写并在API Gateway和Lambda上运行的多端点Web服务。
我有一个用Node编写的第二个非常小的lambda,它定期命中Web服务端点之一。为此,我将小lambda配置为可以访问Internet,然后将Node的https.request
与以下选项一起使用:
const options = {
hostname: 'XXXXXXXXXX.execute-api.us-east-1.amazonaws.com',
port: 443,
path: '/path/to/my/endpoint',
method: 'POST',
headers: {
'Authorization': `Bearer ${s3cretN0tSt0r3d1nTheC0de}`,
}
};
,效果很好。但是现在我想知道是否应该使小lambda直接使用AWS开发工具包调用API终端节点。我看过其他的书关于从lambda调用lambda的问题,但我没有看到目标lambda是多端点Web服务的任何示例。我发现的所有示例都使用new AWS.Lambda({...})
,然后使用参数调用invokeFunction
。
是否有一种方法可以将事件传递给目标lambda,该事件包含要调用的特定端点的路径? (以及auth标头等)* * * * *或* * * *鉴于我已经有了有效的代码,这真的是一个愚蠢的想法吗?我的想法是,直接进行SDK lambda调用可能会(是真的吗?)绕过API网关,而且更便宜,但是通过API网关直接访问端点更适合记录日志。而且由于定期的lambda每天运行一次,因此它可能还是免费的。
如果我现在拥有的最好,那是一个很好的答案。 Lambda调用答案也很酷,因为我无法找到一个很好的示例,其中目标Lambda具有多个https端点。
答案 0 :(得分:0)
您可以使用AWS开发工具包中的invoke方法直接调用Lambda函数。
var params = {
ClientContext: "MyApp",
FunctionName: "MyFunction",
InvocationType: "Event",
LogType: "Tail",
Payload: <Binary String>,
Qualifier: "1"
};
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
/*
data = {
FunctionError: "",
LogResult: "",
Payload: <Binary String>,
StatusCode: 123
}
*/
});
有关更多详细信息,请参考AWS JavaScript SDK lambda.invoke方法。