AWS Lambda 中的异步 HTTP 请求

Bob*_*uce 6 lambda amazon-web-services aws-lambda aws-api-gateway

我想在 API 网关调用的 lambda 函数内执行 http 请求。问题是,请求需要一些时间来完成(<20 秒)并且不希望客户端等待响应。在我对异步请求的研究中,我了解到我可以通过X-Amz-Invocation-Type:Event标头以使请求异步执行,但是这不起作用并且代码仍然“等待”http 请求完成。

下面是我的 lambda 代码:

'use strict';

const https = require('https');

exports.handler = function (event, context, callback) {
    let requestUrl;
    requestUrl = event.queryStringParameters.url;

    https.get(requestUrl, (res) => {
        console.log('statusCode:', res.statusCode);
        console.log('headers:', res.headers);

        res.on('data', (d) => {
            process.stdout.write(d);
        });
    }).on('error', (e) => {
        console.error(e);
    });

    let response = {
        "statusCode": 200,
        "body": JSON.stringify(event.queryStringParameters)
    };
    callback(null, response);
};
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

das*_*mug 3

您可以使用两个 Lambda 函数。

Lambda 1 由 API Gateway 触发,然后异步调用 Lambda 2 ( InvocationType= Event),然后向用户返回响应。

Lambda 2 一旦被调用,将触发 HTTP 请求。

  • 您可以在 [AWS JavaScript SDK 文档](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#invoke-property) 中找到该信息。确保您使用“InitationType”“Event”,不要使用回调并在请求对象上调用“AWS.Request.send()”。 (2认同)