在AWS Lambda / Pulumi中等待http请求

时间:2019-01-21 09:47:52

标签: node.js amazon-web-services aws-lambda pulumi

我有一个AWS Lambda函数,可触发对Google API的https请求。我希望该函数可以等待,以便它不会立即结束,而只是在收到Google API的响应后才结束。 是的,我知道我为执行支付费用,但这不会经常被调用,所以很好。

问题是http请求似乎无法正确触发。回调永远不会执行。

我通过在Promise中使用setTimeout来确保异步/等待工作正常。因此问题出在https.request中。

还要注意,我正在使用Pulumi部署到AWS,所以那里可能存在一些隐藏的问题。我只是不知道在哪里。


相关代码:

调用Google API的AWS Lambda

window[name](params)

1 个答案:

答案 0 :(得分:0)

  

问题是http请求似乎无法正确触发。回调永远不会执行。

我认为问题的这一部分与以下几种组合有关:(a)可能实际上未发送https请求,以及(b)没有为https.request使用正确的回调签名。有关这两个方面的详细信息,请参见https://nodejs.org/api/https.html#https_https_request_options_callback上的文档。

  

使用节点获取包

以下示例使用node-fetch对我有用:

import * as aws from "@pulumi/aws";
import fetch from "node-fetch";

const api = new aws.apigateway.x.API("api", {
    routes: [{
        method: "GET", path: "/", eventHandler: async (ev) => {
            const resp = await fetch("https://www.google.com");
            const body = await resp.text();
            return {
                statusCode: resp.status,
                body: body,
            }
        },
    }],
})

export const url = api.url;
  

Pulumi抱怨说,诸如“无法序列化本机功能”之类的东西。有问题的部分是,节点获取依赖于Symbol.iterator

如评论中所述,可能导致此情况的某些条件记录在https://pulumi.io/reference/serializing-functions.html中。但是,我看不出有任何清楚的原因说明此代码会遇到哪些限制。在上面共享的代码段上下文之外,可能会有关于如何使用它的详细信息。