AWS API Gateway OPTIONS请求返回500错误

Dou*_*hes 7 amazon-web-services node.js aws-lambda aws-api-gateway

我是API网关和Lambda的新手。我正在尝试将基于Node.js Express的API部署到lambda。我正在使用awslabs中的aws- serverless -express示例。这样,我的许多AWS配置都是为我自动创建的。

看来我的API通过API网关正常工作。我的帖子和获取方法工作正常。但是,我需要支持CORS。我的应用程序应该对OPTIONS请求返回正确的CORS响应,但是在AWS上不起作用。

最终,无论我做什么,我都会收到500份关于期权要求的回复。我还无法弄清楚如何获得有关这500个错误的任何信息。我不确定是什么原因造成的。

这就是500响应的主体{"message": "Internal server error"}

这些是响应头:

内容长度:36

内容类型:application / json

日期:2017年7月9日星期日17:56:24 GMT

状态:500

通过:1.1 9af17e5a616bfc9ac07fc7e415ade9e6.cloudfront.net(CloudFront)

x-amz-cf-id:1_AZmkLqf1rjkog2MRtvcBAe54aIZdPWmNApBTwG48Af-v_g9WHkZw ==

x-amzn-requestid:ec216a62-64cf-11e7-ad2b-4f1e96508dba

x-cache:来自Cloudfront的错误

我很确定我的OPTIONS请求甚至没有到达Lambda上的应用程序。

我尝试使用API​​网关(和我的应用程序)配置CORS。我正在尝试将其配置为允许所有来源。

如果有什么可以寻找或调试的问题?

编辑:

为了调试此问题,我尝试为API网关启用CloudWatch登录。

API网关的CloudWatch配置

之后,我在CloudWatch中看到了这两个网关查找日志:

在此处输入图片说明

我一直在使用产品,所以我单击该链接并看到以下内容:

在此处输入图片说明

我认为这是一长串的日志条目。我不确定在这种情况下“流”是什么意思。这些条目有数百个。因此,我选择一个带有最新时间戳的时间戳,然后单击它。现在我看到了:

在此处输入图片说明

看来我所有的网关日志都像这样。IE:显然是空的。

因此,我是否可以正确设置日志记录?我在找对地方了吗?

Hen*_*wan 7

我有与 @scopchanov 类似的问题。

在我的 AWS Lambda + API Gateway + Serverless Framework 1.42.3 + Express.js 项目中有效的是:

  1. 我必须从 Express 启用 CORS/发送标头:

    // AWS API Gateway CORS (OPTIONS) 支持有问题?app.use(cors({credentials: true})); app.options("*", cors());

  2. 不要在 API Gateway 中启用 CORS,即不要在serverless.yml

    • http: method: ANY path: '{proxy+}' # 会导致 {"message": "Internal server error"} # cors: true

没有cors: true,所有请求都可以正常工作。

使用cors: trueOPTIONS请求将响应{"message": "Internal server error"}(不管 Lambda 函数做什么,这似乎是由 API 网关直接发送的,或者有问题的 MOCK 集成)。


Ben*_*rds 2

我刚刚经历过这个...隐藏在有关启用 CORS 的 AWS lambda 文档中的是,您必须在 lambda 中设置 CORS 标头。那么如何做到这一点如下:

let payload = {
    statusCode: 400,
    body: JSON.stringify('body'),
    headers: {"Access-Control-Allow-Origin": "*"} // NEED this for API CORS access
};
callback(null, payload);
Run Code Online (Sandbox Code Playgroud)

您必须返回有效的 statusCode 和正文以及标头,否则 API 将无法将您的 lambda 响应转换为 API 响应。