代码之家  ›  专栏  ›  技术社区  ›  Ray Toal

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

  •  0
  • Ray Toal  · 技术社区  · 7 年前

    我在Flask中编写了一个多端点Web服务,并在API Gateway和Lambda上运行,这要归功于 Zappa .

    我还有第二个非常小的lambda,写在Node中,它周期性地访问一个webservice端点。我通过配置小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 SDK调用API端点。我看到过其他S.O.关于从lambdas调用lambdas的问题,但我没有看到任何目标lambda是多端点Web服务的例子。我发现的所有例子都被使用了 new AWS.Lambda({...}) 然后打电话 invokeFunction 和情妇在一起。

    有没有方法将一个事件传递给目标lambda,其中包含我要调用的特定端点的路径?(还有auth头等等。)****或者****考虑到我已经有了工作代码,这真的是个愚蠢的想法吗?我的想法是直接调用SDK lambda可能(这是真的吗?)绕过API网关可以更便宜,但是,通过API网关直接命中端点更有利于日志记录。由于周期性的lambda每天运行一次,它可能是免费的。

    如果我现在所拥有的是最好的,那就是一个很好的答案。lambda调用答案也很酷,因为我还没有找到一个目标lambda有多个https端点的好例子。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ashan    7 年前

    可以使用AWS SDK中的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 方法获取更多详细信息。