AWS Lambda随机返回502作为状态

时间:2018-04-13 06:40:44

标签: amazon-web-services aws-lambda aws-api-gateway serverless-framework graphql-js

我有一个lambda函数,它利用Graphql和webscraping将一些数据作为响应返回。有时它可以在没有像502这样的错误的情况下工作,有时它不会。对我而言,502错误看起来完全是随机的,因为我一直用相同的数据发送相同的请求。

我的超时在AWS控制台中设置为5分钟。

这些是我得到的错误(在浏览器中):

  

无法加载[BIG URL] No' Access-Control-Allow-Origin'标题是   出现在请求的资源上。起源' [mydomainurl]'因此   不允许访问。响应具有HTTP状态代码502.

     

spread.js:25 GET   [大网址] 502()

但是,当我转到Chrome中的“网络”标签并在浏览器中查看复制的链接地址时,我会收到一封带有我想要的数据的JSON响应。我在CloudWatch中找不到错误。

接头

回复标题

content-length: 36
content-type: application/json
date: Fri, 13 Apr 2018 06:17:06 GMT
status: 502
via: 1.1 67284fcf464f6f1529cc1e521669622c.cloudfront.net (CloudFront)
x-amz-apigw-id: FRC2oEiuDoEF_YQ=
x-amz-cf-id: O1VfzIVPySw657r6WV34EvcPMTyeT7eFUBnM3P30NXBmdjTeWHfryw==
x-amzn-requestid: 4766f279-3ee2-11e8-9e72-bdddab0f02d6
x-cache: Error from cloudfront

请求标题

:authority: wqbgu8c3ql.execute-api.eu-west-1.amazonaws.com
:method: GET
:scheme: https
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7
origin: [url]
referer: [url]
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36

响应: {" message":"内部服务器错误"}

我的handler.js

'use strict'

const {
  graphql,
  GraphQLSchema,
  GraphQLObjectType,
  GraphQLString,
  GraphQLNonNull
} = require('graphql')

const schema = require('./schema/schema');


module.exports.query = (event, context, callback) => graphql(schema, event.queryStringParameters.query)
.then(
  result => callback(null, {
    statusCode: 200,
    headers: {
      "Access-Control-Allow-Origin" : "*"
    },
    body: JSON.stringify(result)
  }),
  err => callback(err)
)

在回调中返回错误的方式可能有问题吗?

1 个答案:

答案 0 :(得分:0)

对于Python,请使用以下

def returnresponse(status_code, message):
    myjson = {}
    myjson['statusCode']=status_code
    myjson['body']=json.dumps(message)
    myjson['headers']={}
    myjson['headers']['Access-Control-Allow-Origin']="*"
    myjson['headers']['Content-Type']="application/json"
    return myjson

您可以从上面删除Content-Type标头。 在您的lambda末尾键入:

return returnresponse(200, "hello world")

还要检查您在哪里进行API调用的代码。就我而言,我使用了javascript。如果您使用的是javascript,则除非您在正文中返回json数据,否则请删除“数据类型:json”。