如何让AWS API Gateway透传集成请求的响应状态码?
让AWS API Gateway直接返回ECS RunTask的原生状态码
有两种可行的方式实现你要的效果,不用挨个定义400、403这类状态码:
1. 用代理集成(最省心的方案)
直接把API Gateway配置成代理模式,这种模式下,API Gateway会完全透传后端ECS RunTask API的响应——包括状态码、响应头和响应体,不需要你手动配置任何集成响应映射。
配置步骤大概是:
- 在API Gateway的方法集成设置里,选择「AWS服务代理」,然后开启代理集成选项
- 目标服务选ECS,填写正确的服务ARN,动作指定为
ecs:RunTask - 确保集成请求的设置里,允许传递所有请求参数和头信息,不需要自定义映射规则
这种方式下,ECS返回什么状态码,API Gateway就直接给用户返回什么状态码,完全不用额外配置。
2. 用VTL模板动态映射状态码(适合需要部分自定义的场景)
如果不想用代理集成,也可以通过VTL映射模板实现动态状态码传递:
- 在方法响应里,添加一个匹配所有4xx/5xx状态码的正则规则(比如
4\d{2}|5\d{2}) - 在集成响应里,把这个正则规则和默认响应关联,然后用VTL模板把响应状态码设置为集成请求返回的原生状态码,示例模板如下:
#set($context.responseOverride.status = $context.integration.status) $input.json('$')
- 同时保留默认的200响应,这样正常情况返回200,异常情况自动映射对应的状态码
注意事项
- 不管用哪种方式,都要确保API Gateway的IAM角色有调用ECS RunTask的权限,避免因为权限问题导致的额外异常
- 代理集成虽然省心,但如果需要对响应做一些自定义处理(比如修改响应体),就不太适合,这时候用VTL的方式更灵活
内容的提问来源于stack exchange,提问作者Omiron
相关产品推荐
相关产品推荐

