API 网关响应状态为 0,集成延迟 10000 毫秒

Posted

技术标签:

【中文标题】API 网关响应状态为 0,集成延迟 10000 毫秒【英文标题】:API Gateway responding with a status of 0, Integration latency 10000ms 【发布时间】:2018-07-07 02:53:12 【问题描述】:

这是我从 API Gateway 自动生成的 javascript SDK 返回的错误。


    "data": "",
    "status": 0,
    "statusText": "",
    "headers": 

    ,
    "config": 
        "method": "POST",
        "headers": 
            "Content-Type": "application/json",
            "Accept": "application/json",
            "x-amz-date": "20180127T231842Z",
            "Authorization": "AWS4-HMAC-SHA256 Credential=.....",
            "x-amz-security-token": "....."
        ,
        "timeout": 0,
        "transformRequest": [null],
        "transformResponse": [null],
        "url": "https://somevalues.execute-api.us-west-2.amazonaws.com/env/some/path",
        "data": "\"startDay\":0,\"endDay\":1"
    

我查看了我的 cloudwatch 日志,调用成功了。我将 API 网关绑定到 AWS lambda 作为无服务器功能设置。

我从未见过这些类型的错误,但今天我遇到了其中的 5 个。随后的调用都奏效了。

编辑:这可能与 CORS 设置有关吗?每隔一段时间,API 网关似乎就会打嗝并且没有发回适当的 CORS。可能是当功能很冷的时候?我不确定...

编辑 2:我刚刚验证过——我的所有 OPTIONS 端点(用于 CORS)都不需要 auth 或 api 密钥。所以我认为不是这样。

编辑 4:编辑 3 错误,我打错了端点。使用 curl 访问我的 API OPTIONS 端点可以正常工作。

编辑 5:查看 cloudwatch 中的 API 网关日志,它们看起来是这样的……此时完全迷失了。

[32m/aws/lambda/supercoolsoftware-prod-createInviteCode[0m [36m2018/02/26/[$LATEST]8578bb59ab0538558fabef7bd1f484a2[0m START RequestId: e3g4f130-1b35-11e8-b0cf-e7f75f2e4dc1 Version: $LATEST
[32m/aws/lambda/supercoolsoftware-prod-createInviteCode[0m [36m2018/02/26/[$LATEST]8578bb59ab0538558fabef7bd1f484a2[0m END RequestId: e3g4f130-1b35-11e8-b0cf-e7f75f2e4dc1
[32m/aws/lambda/supercoolsoftware-prod-createInviteCode[0m [36m2018/02/26/[$LATEST]8578bb59ab0538558fabef7bd1f484a2[0m REPORT RequestId: e3g4f130-1b35-11e8-b0cf-e7f75f2e4dc1   Duration: 10007.96 ms   Billed Duration: 10000 ms   Memory Size: 128 MB Max Memory Used: 51 MB
[32m/aws/lambda/supercoolsoftware-prod-createInviteCode[0m [36m2018/02/26/[$LATEST]8578bb59ab0538558fabef7bd1f484a2[0m 2018-02-26T20:44:58.994Z e3g4f130-1b35-11e8-b0cf-e7f75f2e4dc1 Task timed out after 10.01 seconds

编辑 6: 它还显示出 10000 毫秒的集成延迟......

[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Verifying Usage Plan for request: e2f406ec-1b35-11e8-bce8-e3c6368e1bfc. API Key:  API Stage: xxxxxxxxxx/prod
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) API Key  authorized because method 'POST /accounts/inviteCode' does not require API Key. Request will not contribute to throttle or quota limits
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Usage Plan check succeeded for API Key  and API Stage xxxxxxxxxx/prod
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Starting execution for request: e2f406ec-1b35-11e8-bce8-e3c6368e1bfc
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) HTTP Method: POST, Resource Path: /accounts/inviteCode
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Method request path: 
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Method request query string: 
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Method request headers: Accept=application/json, x-amz-date=20180226T204447Z, CloudFront-Viewer-Country=US, CloudFront-Forwarded-Proto=https, CloudFront-Is-Tablet-Viewer=false, origin=https://app.supercoolsoftware.io, CloudFront-Is-Mobile-Viewer=false, Referer=https://app.supercoolsoftware.io/devices, User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/64.0.3282.167 Safari/537.36, X-Forwarded-Proto=https, CloudFront-Is-SmartTV-Viewer=false, Host=xxxxxxxxxx.execute-api.us-west-2.amazonaws.com, Accept-Encoding=gzip, deflate, br, dnt=1, x-amz-security-token=FQoDYXdzEK7//////////wEaDFrfZM8Y6J3xvLiS2iKTBF5YIv8VFsraozz/AxRzj10S9RzrOoJTswlhoOfX/gfGYPWP5PNQ1ue7IHEUeUpm+ewB5wANsbydmqGQzVCCvIZkYq+/1X0Iqr74rFuUWBO8ATrKtXBz7zJzpmLtXaOaIzwlFwq/6cKvh4r8HLvSjxBAG4H+ayyUU1IDKmUKAVtpCDvk9FUJM7D5zm4Wlt/yu8/dc3F4a8ID0it93GTQSSi/1YaDmGrkEJ3ySxxE0O0TAZzV50Yprj2gkOX4zNuPsQfWGenILaAog6FLw4asv1J+lE6zKgJtpSiYXyASf54jWnUT4VSiuHL2zU0p1B3tn/wkLF14dCS/IhzAtBgxpqGcRiqy6S05l3MsXJl3WHxMt1iSu5yNLLy2wjlg9j2BoEs18ravB [TRUNCATED]
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Method request body before transformations: "deviceType":"USER","deviceName":"Me"
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Endpoint request URI: https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:122312312312:function:supercoolsoftware-prod-createInviteCode/invocations
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Endpoint request headers: x-amzn-lambda-integration-tag=e2f406ec-1b35-11e8-bce8-e3c6368e1bfc, Authorization=*******************************************************************************************************************************************************************************************************************************************************************************************************e57bd5, X-Amz-Date=20180226T204448Z, x-amzn-apigateway-api-id=xxxxxxxxxx, Accept=application/json, User-Agent=AmazonAPIGateway_xxxxxxxxxx, X-Amz-Security-Token=FQoDYXdzEK7//////////wEaDHJUDFmtbGGy6Q/bcyKOBn+NX/e9T3+kv8LYDm//MnuArciU8olgca3VHeUDpqmrYaD7w+RQtnmSVQvZ8VqZw0G13UUxen8Ppageped//Yq3QPOEAjLLPICkaplSQh//iDYHYcjEOcrSY/IdeNelF+npPONj/+8Yfg7CGjYa+CCIdTwlrygtAzucAkzn0VxmmAsnmbcXbw6OMJJKd9Ujz7xIsTGOo3RaBsgGfkxHVA/OtMTNEACCWu2KAus1cFxf+gJxVCS2lb0QxcA7dCqc4NyB9cwJXopG5oQSx1sZ8EbJvNcvvHNgumrxpr2qk5hmIJVVhmdqJ3HdZUd+xePNpwtY/pd84Iy7hyjucVX6RIsxfQOd+TYGrgJMIb4hdpAFXGKXlRLfl7E8Dpp5jpOpVW4uRXOvMGVzncUMfJH6ph/YAVPsKn6F [TRUNCATED]
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Endpoint request body after transformations: "resource":"/accounts/inviteCode","path":"/accounts/inviteCode","httpMethod":"POST","headers":"Accept":"application/json","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-Country":"US","content-type":"application/json","dnt":"1","Host":"xxxxxxxxxx.execute-api.us-west-2.amazonaws.com","origin":"https://app.supercoolsoftware.io","Referer":"https://app.supercoolsoftware.io/devices","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36","Via":"2.0 cbec82431a010799f206b43dbd0489c3.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"zM1gObCVuZ9UXh_beuWr-o9XomlnGGyYFWEn5HJNGk8cBQOMOSCMEw==","x-amz-date":"20180226T204447Z","x-amz-security-token":"FQoDYXdzEK7//////////wEaDFrfZM8Y6J3xvLiS2iKTBF5YIv8 [TRUNCATED]
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Sending request to https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-west-2:122312312312:function:supercoolsoftware-prod-createInviteCode/invocations
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Received response. Integration latency: 10026 ms
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Endpoint response body before transformations: "errorMessage":"2018-02-26T20:44:58.994Z e2f4f130-1b35-11e8-b0cf-e7f75f2e4dc1 Task timed out after 10.01 seconds"
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Endpoint response headers: X-Amz-Executed-Version=$LATEST, x-amzn-Remapped-Content-Length=0, Connection=keep-alive, x-amzn-RequestId=e2f4f130-1b35-11e8-b0cf-e7f75f2e4dc1, Content-Length=115, X-Amz-Function-Error=Unhandled, Date=Mon, 26 Feb 2018 20:44:58 GMT, X-Amzn-Trace-Id=root=1-5a9471c0-0b361380a48e2bc0743673a5;sampled=0, Content-Type=application/json
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Execution failed due to configuration error: Malformed Lambda proxy response
[32mAPI-Gateway-Execution-Logs_xxxxxxxxxx/prod[0m [36m69adc1e107f7f7d035d7baf04342e1ca[0m (e2f406ec-1b35-11e8-bce8-e3c6368e1bfc) Method completed with status: 502

编辑 7: 以下是我编写的每个函数的开头...

module.exports.unsubscribeFromDailyEmails = function(event, context, cb) 
  logRequest(event, context);
//more logic

function logRequest(event, context) 
  console.log('event: ' + JSON.stringify(event));
  console.log('context: ' + JSON.stringify(context));

我想强调一下,在我所说的情况下,永远不会达到 logRequest 功能——没有写入云手表的日志。是的,logRequest 是我在每个函数中做的第一件事。

编辑 8:我在过去一周左右没有看到这种情况发生......所以它可能是在 AWS 方面并且它已修复?如果我发现其他情况,我会更新。

编辑 9:我现在已经看到在其他一些端点上发生了这种情况,因为异常被抛出并且没有被处理。但是,这与 10000 集成延迟错误的情况不同。

【问题讨论】:

您使用自定义授权人吗? 确实很奇怪。你的 Lambda 之外有什么代码? 你能确认你的 lambda 回调总是被调用来结束执行吗?例如您的实现中是否存在可能导致没有 cb() 的随机元素? @NicholasSizer 是的,我可以确认该调用始终调用 cb,但可能存在未处理的异常。但是,由于我没有看到 logRequest 日志,我怀疑这甚至可能是问题......除非你明白我不明白的东西? 是的,未处理的异常会冒出并最终登录 Cloudwatch。我的想法是,如果不调用 cb,则 lambda 执行将继续,直到超时;听起来这不是原因 【参考方案1】:

我认为你在正确的轨道上,请与 cors 一起阅读它,它将为你很好地布置它。 Click here

【讨论】:

我只是查看了 API 网关(用于 CORS)中的所有“选项”端点,它们都不需要身份验证。它看起来确实与那个帖子非常相似,但是我没有为选项设置任何身份验证。 嗯,当我点击我的 OPTIONS 端点时,我确实得到了一个丢失的身份验证令牌...... 我怀疑没有身份验证可能是您的问题【参考方案2】:

希望您指的是自定义状态代码而不是 http 状态代码。如果连接成功,API 网关将只返回一个非零状态码。要隔离问题,您可以删除此设置中的任何自定义授权人。大多数情况下,来自自定义授权者的拒绝状态将是 403 禁止状态,但这里似乎有所不同。还要删除可能根据日志设置的任何基于配额的使用情况。在我看来,绝对数量 10000 是 API 网关中的配置。

【讨论】:

即是通过自动生成的api网关javascript SDK返回的确切响应对象。我可以进一步深入研究它,我想看看发生了什么......它看起来像自动生成的 sdk 在引擎盖下使用 axios......问题是我无法成功复制问题......它只是随机发生而且我' m 每天处理数千个请求。最近,我在过去一周没有看到它发生......这让我认为这是 AWS 的问题。

以上是关于API 网关响应状态为 0,集成延迟 10000 毫秒的主要内容,如果未能解决你的问题,请参考以下文章

azure api 网关与 AKS 502 集成 - Web 服务器在充当网关或代理服务器时收到无效响应

无法将JSON从API网关传递到SQS

AWS API Gateway 集成响应

api网关中的响应模板不以美化格式返回json

请求api网关cors错误

技术派:谁说API网关只能集成REST APIs?