gpt4 book ai didi

amazon-web-services - 502 "Internal Server Error"部署时使用 API Gateway + Lambda

转载 作者:行者123 更新时间:2023-12-02 03:05:00 25 4
gpt4 key购买 nike

我正在使用 API-Gateway + Lambda 组合来处理 POST 请求。我正在使用 Node + 无服务器框架。

当我离线运行无服务器时,我能够发送 POST 请求并将数据存储在 S3 上。但是,当我部署它并运行相同的 POST 请求时,我收到“502 内部服务器错误”消息。因为它可以在本地工作,但不能在生产环境中工作,所以我很确定我有一些权限/配置问题。

    saveToS3(newData)
.then(result => {
callback(null, {
statusCode: 200,
headers: { 'Content-Type': 'application/json' },
body: "Successfully added data!"
});
})
.catch(e => callback(null, { statusCode: 500, body: JSON.stringify(e) }));

我检查过的内容:

  • 响应正文是一个字符串
  • 在响应中包含状态代码、正文、响应 header
  • 使用回调模式返回我的响应(见上文)

尚未检查的内容:

  • 一个可能的原因是我的 API 网关 api 无权调用 lambda 函数。如何在 serverless.yml 文件中进行该设置?

我的yml:

service: myService

provider:
name: aws
runtime: nodejs12.x

iamRoleStatements:
- Effect: "Allow"
Action:
- "s3:GetObject"
- "s3:PutObject"
Resource: "arn:aws:s3:::myS3Bucket/*"

functions:
saveToS3:
handler: handler.saveToS3
events:
- http:
path: users
method: post
cors: true
plugins:
- serverless-offline

resources:
Resources:
NewResource:
Type: AWS::S3::Bucket
Properties:
BucketName: myS3Bucket

最佳答案

发现问题,捂脸,因为我花了几个小时才找到它。

我有两个问题:

  • 我的主 lambda 函数前面有一个“async”,但我是通过回调来实现它的。删除“异步”修复了它。

  • 我的响应格式缺少“ header ”和“isBase64Encoded”字段。包括删除了 502 错误(见下文)。

有用的链接:-https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format-(如果您使用无服务器框架)https://github.com/dherault/serverless-offline/issues/405

如果使用 API Gateway,请确保您的 lambda 函数的响应如下面的代码片段所示。否则,它将抛出“502 - Malformed Lambda Function”错误。

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

关于amazon-web-services - 502 "Internal Server Error"部署时使用 API Gateway + Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59250196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com