以编程方式调用AWS Lambda上托管的Web服务的特定终端节点

时间:2018-12-27 20:16:07

标签: amazon-web-services aws-lambda

感谢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端点。

1 个答案:

答案 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方法。