【发布时间】:2020-04-02 15:13:27
【问题描述】:
我正在使用 API-Gateway + Lambda 组合来处理 POST 请求。我正在使用 Node + Serverless 框架。
当我离线运行无服务器时,我能够发送 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) }));
我检查过的内容:
- 响应正文是一个字符串
- 在响应中包含状态码、正文、响应标头
- 使用回调模式返回我的响应(见上文)
我没有检查的内容:
- 一个可能的原因是我的 API-gateway 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
【问题讨论】:
-
Serverless Framework 这样创建时会自动赋予API Gateway相关权限。可能值得首先仔细检查明显的事情,例如您是否确实使用 /users 路径调用了正确的 url,并尝试从 API Gateway 控制台运行测试以检查您的 Lambda 响应不是问题。
-
@KMo 很高兴知道,谢谢!
标签: amazon-web-services aws-lambda aws-api-gateway serverless-framework