Amazon S3 Object Lambda无法返回406状态码 是否适合构建REST API
Amazon S3 Object Lambda 构建REST API的适用性说明
核心结论
Amazon S3 Object Lambda 不是构建通用REST API的合适技术,它的设计定位是拦截并加工S3原生对象请求(如GetObject、HeadObject等),仅适配S3原生协议支持的HTTP状态码,无法满足REST API自定义响应码、扩展请求能力等需求,你遇到的无法返回406 Not Acceptable的问题是该服务的原生限制。
状态码限制说明
目前S3 Object Lambda的WriteGetObjectResponse接口仅支持返回以下HTTP状态码,不在列表内的状态码均无法通过该服务直接返回:
支持的状态码列表:
- 200 - OK
- 206 - Partial Content
- 304 - Not Modified
- 400 - Bad Request
- 401 - Unauthorized
- 403 - Forbidden
- 404 - Not Found
- 405 - Method Not Allowed
- 409 - Conflict
- 411 - Length Required
- 412 - Precondition Failed
- 416 - Range Not Satisfiable
- 500 - Internal Server Error
- 503 - Service Unavailable
推荐服务组合方案
如果需要同时保留S3 Object Lambda的对象加工能力,又要对外提供标准REST API,建议搭配以下AWS服务共同使用:
- 接入层使用
Amazon API Gateway:支持自定义所有标准/非标准HTTP状态码、请求路由、鉴权、限流等通用REST API所需的基础能力,是AWS生态下构建REST API的首选接入组件 - 业务逻辑层使用
AWS Lambda:实现核心业务逻辑,按需调用S3 Object Lambda接口拉取加工后的S3对象,再根据业务需求返回任意自定义状态码(包括406 Not Acceptable)给API Gateway - 存储层保留S3 + S3 Object Lambda:复用现有对象加工逻辑处理S3内的资源文件
内容的提问来源于stack exchange,提问作者malat
相关产品推荐
相关产品推荐

