AWS API Gateway与DynamoDB集成:SerializationException响应码配置异常
问题解决方法
错误根源
日志里的Output mapping refers to an invalid method response: 400是核心问题——你仅给集成配置了400状态码的响应模板,但未在API Gateway的方法层面定义400状态码的方法响应。API Gateway要求集成响应必须与已定义的方法响应一一对应,找不到匹配的方法响应时就会返回500错误。
另外,你当前的selection_pattern: "400"不符合DynamoDB错误响应的匹配逻辑:DynamoDB返回的400错误会在响应体中包含__type字段(比如日志里的"__type":"com.amazon.coral.service#SerializationException"),API Gateway的集成响应需要匹配这个响应体内容,而非直接写状态码字符串。
修复步骤
1. 添加400状态码的方法响应
在定义API Gateway方法时,必须先声明支持400状态码的方法响应,示例CDK代码:
# 假设已存在api和resource对象 read_method = resource.add_method( "GET", read_integration, method_responses=[ # 保留原有200响应配置 aws_apigateway.MethodResponse(status_code="200"), # 新增400方法响应 aws_apigateway.MethodResponse(status_code="400") ] )
2. 修正集成响应的selection_pattern
针对DynamoDB的错误响应,用正则匹配响应体里的错误类型,示例:
- 匹配所有客户端侧错误(覆盖各类Exception):
"__type":".*#.*Exception" - 精准匹配SerializationException:
"__type":".*SerializationException"
修正后的集成响应代码:
read_integration_responses=[ aws_apigateway.IntegrationResponse( status_code="200", response_templates={"application/json": read_response_template} ), aws_apigateway.IntegrationResponse( status_code="400", response_templates={"text/html": "Client Error"}, # 匹配DynamoDB返回的错误响应体格式 selection_pattern='"__type":".*#.*Exception"' ) ]
3. 可选:自定义友好错误响应体
如果需要返回结构化的JSON错误信息,可以修改response_templates,比如:
response_templates={ "application/json": '{ "error": "Invalid request parameters", "error_type": "$input.path(\'$.__type\')" }' }
配置完成后,当DynamoDB返回400级错误时,API Gateway会正确匹配并返回你定义的400响应,不再返回500错误。
内容的提问来源于stack exchange,提问作者MikeF
相关产品推荐
相关产品推荐

