You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Localstack中API Gateway与Lambda集成的选择模式匹配问题

问题:Localstack中API Gateway集成Lambda的集成响应选择模式不生效

背景

我正在用Localstack搭配API Gateway和Lambda做API集成测试,构建模拟AWS环境的脚本位于项目的src/test/resources/localstack/scripts目录下。

我需要为GET /users/{userId}接口配置两个集成响应:

  • 默认场景返回200
  • 当Lambda抛出带有No value present消息的NoSuchElementException异常时,返回404

目前Lambda已与API Gateway完成集成,集成类型为AWS,但无论请求是否存在的用户,接口始终返回默认的200响应,404的规则未生效。

配置的集成响应命令

默认200响应配置

awslocal apigateway put-integration-response \
          --rest-api-id "$_REST_API_ID" \
          --resource-id "$_RESOURCE_ID" \
          --http-method "$_HTTP_METHOD" \
          --status-code 200 \
          --selection-pattern ""

我尝试过移除--selection-pattern参数,结果仍只会触发该200响应。

用户不存在场景的404响应配置

awslocal apigateway put-integration-response \
          --rest-api-id "$_REST_API_ID" \
          --resource-id "$_RESOURCE_ID" \
          --http-method "$_HTTP_METHOD" \
          --status-code "404" \
          --selection-pattern ".*No value present.*"

我了解选择模式需要匹配Lambda响应中的errorMessage字段,但实际配置后并未生效。

捕获的HTTP响应

当请求不存在的用户时,API Gateway返回200状态码,响应体为Lambda的错误输出:

GET /restapis/s3zoijp35e/test/_user_request_/users/1 HTTP/1.1
Connection: Upgrade, HTTP2-Settings
Content-Length: 0
Host: 127.0.0.1:49161
HTTP2-Settings: AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA
Upgrade: h2c
User-Agent: Java-http-client/17.0.7
Content-Type: application/json

HTTP/1.1 200 
Content-Type: text/plain; charset=utf-8
Content-Length: 952
Connection: close
date: Sat, 19 Aug 2023 08:40:32 GMT
server: hypercorn-h11

{"errorMessage":"No value present","errorType":"java.util.NoSuchElementException","stackTrace":["java.base/java.util.Optional.orElseThrow(Unknown Source)","it.unimi.cloudproject.ui.lambda.UserLambda.lambda$getUser$2(UserLambda.java:37)","org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.invokeFunctionAndEnrichResultIfNecessary(SimpleFunctionRegistry.java:943)","org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.invokeFunction(SimpleFunctionRegistry.java:889)","org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.doApply(SimpleFunctionRegistry.java:734)","org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.apply(SimpleFunctionRegistry.java:577)","org.springframework.cloud.function.adapter.aws.FunctionInvoker.handleRequest(FunctionInvoker.java:91)"]}

对应的测试用例因此失败,Lambda日志可正常显示错误信息。

可能的问题原因

  • Localstack对--selection-pattern选项的支持存在部分问题:但当将404响应的选择模式设为.*时,网关会始终返回404,说明该功能至少有部分支持;
  • 我对选择模式的匹配逻辑理解存在偏差。

内容的提问来源于stack exchange,提问作者Marco Luzzara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:53:09