3 回答
TA贡献1807条经验 获得超9个赞
错误消息明确指出:
Invalid API Gateway Response Keys
我遇到了一个类似的错误,其中我收到了响应status_code的错误:
Invalid lambda response received: Invalid API Gateway Response Keys: {'status_code'} in {'status_code': 200, 'body': '"Success!!"'}
显然,SAM 试图模拟 API 网关,status_code不是 API Gateway 在响应中期望的关键之一。因此,我将其更改为键从到status_codestatusCode
return {
'statusCode': 200,
'body': json.dumps("Success!!")
}
而且,它工作正常。
我建议您查看 API 网关响应密钥,并尝试将您的响应映射到该密钥。
TA贡献1744条经验 获得超4个赞
我也得到了这个错误,因为本地调用无法访问template.yml中引用的环境变量。例如:
...
#template.yml
Policies:
# Give Create/Read/Update/Delete Permissions to the SampleTable
- DynamoDBCrudPolicy:
TableName: !Ref SampleTable
Environment:
Variables:
# Make table name accessible as environment variable from function code during execution
SAMPLE_TABLE: !Ref SampleTable
...
一种解决方案是部署应用程序并从控制台获取env变量,然后将它们输入到“env.json”或类似文件中:
{
"getAllItemsFunction": {
"SAMPLE_TABLE": "dev-demo-SampleTable-*ID*"
},}
然后,您可以通过向 .喜欢这个:-e env.jsonsam local invoke command
sam local invoke getAllItemsFunction -e events/event-get-all-items.json -n env.json
老实说,不知道SAMPLE_TABLE和“!Ref SampleTable“正在发生,但它有效。看看这个: https://youtu.be/NzPqMrdgD1s?t=799
TA贡献1784条经验 获得超8个赞
我在 https://stackoverflow.com/a/72067740/93074 上写的答案相同
因此,从以下介绍如何使用CDK使lambda和api网关工作的教程中,我设法隔离了没有以下行将导致502 BAD GATEWAY错误,建议的返回类型如前所述。它在道具中。new apigateway.RestApi
defaultCorsPreflightOptions: {
...
allowOrigins: ['http://localhost:3000'],
},
该op没有指定他的基础设施命题方法。如果不使用CDK并使用Cloud Formation YAML,那么它可能与扩展的YAML中的等效项有关(尽管扩展的最终结果超出了我的能力范围)。
method.response.header.Access-Control-Allow-Origin
BrokerAPItest41BB435C:
Type: AWS::ApiGateway::Resource
Properties:
ParentId: !GetAtt 'BrokerAPID825C3CC.RootResourceId'
PathPart: test
RestApiId: !Ref 'BrokerAPID825C3CC'
Metadata:
aws:cdk:path: BrokerAwsDeployStack/BrokerAPI/Default/test/Resource
BrokerAPItestOPTIONS843EE5C3:
Type: AWS::ApiGateway::Method
Properties:
HttpMethod: OPTIONS
ResourceId: !Ref 'BrokerAPItest41BB435C'
RestApiId: !Ref 'BrokerAPID825C3CC'
AuthorizationType: NONE
Integration:
IntegrationResponses:
- ResponseParameters:
method.response.header.Access-Control-Allow-Headers: '''Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent'''
method.response.header.Access-Control-Allow-Origin: '''http://localhost:3000'''
method.response.header.Vary: '''Origin'''
method.response.header.Access-Control-Allow-Methods: '''OPTIONS,GET,PUT,POST,DELETE,PATCH,HEAD'''
StatusCode: '204'
RequestTemplates:
application/json: '{ statusCode: 200 }'
Type: MOCK
MethodResponses:
- ResponseParameters:
method.response.header.Access-Control-Allow-Headers: true
method.response.header.Access-Control-Allow-Origin: true
method.response.header.Vary: true
method.response.header.Access-Control-Allow-Methods: true
StatusCode: '204'
Metadata:
- 3 回答
- 0 关注
- 125 浏览
添加回答
举报