【问题标题】:call an external api using apigateway使用 apigateway 调用外部 api
【发布时间】:2018-05-11 13:15:54
【问题描述】:

我正在 node.js 中编写一个 lambda,它将调用一个 api(post) 并返回结果正文,代码如下。

const AWS = require('aws-sdk');
const request = require('request');

exports.handle = function(e, ctx, callback) {
    var bodyDetails = {
        uri: "myURL",
        json: {
            "requestChannel": "web1" },
        "method": "POST"
    };

    callback = ctx.done;
    var data = e.bodyJson || {};
    request(bodyDetails, function(error, response, body) {
        if (!error && response.statusCode === 200) {
            console.log(JSON.parse(JSON.stringify(body)));
            jsonBody = JSON.parse(JSON.stringify(body));
            console.log(body + "\t from suvccess") // Print the json response
            callback(null, jsonBody); // Return the JSON object back to our API call
        } else {
            callback(error);
        }
    });
}

我正在我的 lambda 控制台中进行相同的测试。通过传递一个空白 json {} 我得到了正确的响应。

现在我的下一个计划是将这部分与 API Gateway 集成。所以我在apigateway 中为此创建了一个api,并在其中创建了一个名为home 的资源。在家里,我创建了一个GET 方法。有以下详细信息。

Integration type: Lambda Function
Use Lambda Proxy integration : checked
Lambda Region: us-east-1 
Lambda Function: myWorkingLambdaName

当我使用 apigateway 提供的 test 选项对此进行测试时。我得到的回应是

Request: /home
Status: 502
Latency: 2942 ms
Response Body
{
  "message": "Internal server error"
}

当我看到我的控制台时,我看到打印成功块的值,但状态码是 502。这非常令人困惑,请让我知道我哪里出错了,我该如何解决这个问题。

谢谢

【问题讨论】:

标签: amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

API Gateway 期望您的 Lambda 返回以下属性:

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}

因此,您应该像这样调用callback,而不是callback(null, jsonBody)

callback(null, {
    isBase64Encoded: false,
    statusCode: 200,
    headers: {
        "Access-Control-Allow-Origin" : "*", 
    },
    body: JSON.stringify(jsonBody),
})

【讨论】:

  • 嗨,这对我不起作用。通过 api 网关的 Lambda 似乎根本没有执行或等待它执行外部“请求”。因为,当 lambda 尝试进行外部 api 调用时,我的请求块中的控制台语句没有被执行,或者打印任何东西仍然得到 502。任何帮助都会非常感激。在我的本地机器上工作正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 2018-06-26
  • 1970-01-01
  • 2019-08-13
相关资源
最近更新 更多