gpt4 book ai didi

amazon-web-services - Lambda 函数不适用于云形成部署

转载 作者:行者123 更新时间:2023-12-03 07:39:26 25 4
gpt4 key购买 nike

我正在尝试构建一个带有 API 网关和在 lambda 上运行的节点后端的应用程序。

节点后端非常基本,包括express和sequelize。它尚未连接到数据库。我可以在本地运行节点应用程序,导航到端点并获取从该端点发回的标准“hello world”响应。

当我构建和部署堆栈时,它显示代码已部署到 s3 存储桶,并且 api 和 lambda 已更新。但是,在尝试访问端点时出现以下错误 -

502 Bad Gateway - "message": "Internal server error"

同样,后端没有任何逻辑,只是发回的文本响应。我不知道如何解决这个问题。虽然我不知道如何测试,但这似乎不是 API 问题。如果这是 lambda 部署的问题,为什么它可以在本地工作?

除此之外,由cloudformation文件创建的api网关还有一个“dev”阶段和一个“Stage”阶段。我不确定这是怎么发生的或者这是否是一个问题。

下面是 yaml 文件。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Storygraf backend API
Globals:
Function:
Timeout: 3
Resources:
ExpressApi:
Type: AWS::Serverless::Api
Properties:
StageName: dev
ExpressLambdaFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: s3://storygraf-backend/xxxx
Handler: lambda.handler
MemorySize: 512
Runtime: nodejs14.x
Timeout: 30
Events:
ProxyApiRoot:
Type: Api
Properties:
RestApiId:
Ref: ExpressApi
Path: /
Method: ANY
ProxyApiGreedy:
Type: Api
Properties:
RestApiId:
Ref: ExpressApi
Path: /{proxy+}
Method: ANY

最佳答案

你应该activate logs能够排除故障:

  ExpressApi:
Type: AWS::Serverless::Api
Properties:
StageName: dev
MethodSettings:
- ResourcePath: "/*"
HttpMethod: "*"
DataTraceEnabled: true
LoggingLevel: INFO # Or ERROR
OpenApiVersion: 3.0.1 # This will remove the stage Stage

注意OpenApiVersion :

Note: Setting this property to any valid value will also remove the stage Stage that SAM creates.


然后复制您的 apiId: Api ID

将您的请求发送到您的 API 并转到 CloudWatch,应该有一个名为 API-Gateway-Execution-Logs_{apiId}/dev 的日志组(您可以将您的 apiId 粘贴到搜索框中即可找到它)。

在那里您可以看到有关请求和集成的详细日志。


您很可能遇到如下错误:

Execution failed due to configuration error: Malformed Lambda proxy response

因为 lambda 响应至少应包含 statusCode 字段:

With the Lambda proxy integration, the Lambda function must return output of the following format:

    statusCode: "...",            // a valid HTTP status code
headers: {
custom-header: "..." // any API-specific custom header
},
body: "...", // a JSON string.
isBase64Encoded: true|false // for binary support } ```

参见API Gateway developer guide具体来说:

关于amazon-web-services - Lambda 函数不适用于云形成部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73378484/

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