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

如何使用SST部署共享带/v1基础路径RestApi的多栈应用

解决SST多栈共享REST API Gateway公共路径冲突问题

问题根源

SST默认一次性部署所有栈,第二个栈中通过restApi.root.resourceForPath("/v1")获取的是CDK临时Token而非真实AWS资源ID,导致importedPaths配置失效,API Gateway尝试重复创建/v1资源触发409冲突错误。

解决方案

1. 修改第一个栈,导出公共路径资源ID

在创建第一个API的栈中,显式获取/v1资源并将其ID作为输出导出,确保第二个栈能拿到真实的资源ID:

export function Api1({ stack }: StackContext) {
  const api = new ApiGatewayV1Api(stack, "first-api", {
    routes: {
      "GET /v1/users": "packages/functions/src/users.handler",
    },
  });

  // 获取已创建的/v1资源
  const v1Resource = api.cdk.restApi.root.getResource("v1");
  // 导出资源ID供其他栈使用
  stack.addOutputs({
    V1ResourceId: v1Resource.resourceId,
  });

  return { api, v1ResourceId: v1Resource.resourceId };
}

2. 修改第二个栈,复用已有公共路径资源

在第二个栈中,直接引用第一个栈导出的v1ResourceId配置importedPaths,避免重复创建路径:

export function Api2({ stack }: StackContext) {
  const { api, v1ResourceId } = use(Api1);

  new ApiGatewayV1Api(stack, "second-api", {
    cdk: {
      restApi: api.cdk.restApi,
      // 告知SST /v1路径已存在,直接复用
      importedPaths: { "/v1": v1ResourceId },
    },
    routes: {
      "GET /v1/todo-list": "packages/functions/src/todo.handler",
    },
  });
}

原理说明

通过跨栈导出/导入真实的资源ID,SST能明确识别/v1路径已存在于共享API中,不会尝试重复创建。同时SST会自动管理栈的部署依赖,确保第一个栈先完成部署,第二个栈获取到有效的资源ID后再执行部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:57:36