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

AWS CloudFormation嵌套栈部署REST API如何统一API Gateway访问地址

解决方案

步骤1:主模板导出共享API Gateway核心参数

主模板中仅保留1份API Gateway实例定义,完成后通过Outputs导出API ID、根资源ID、环境名称等核心参数,供所有子栈引用。

# 主模板 template.yaml 核心配置
Resources:
  # 全局唯一的共享API Gateway实例
  SharedMainApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: prod
      Name: BusinessUnifiedApi

Outputs:
  SharedMainApiId:
    Value: !Ref SharedMainApi
    Export:
      Name: !Sub ${AWS::StackName}-SharedMainApiId
  SharedMainApiRootResourceId:
    Value: !GetAtt SharedMainApi.RootResourceId
    Export:
      Name: !Sub ${AWS::StackName}-SharedMainApiRootResourceId

步骤2:子模板显式引用主栈API,禁用自动创建API

子模板中不要定义任何AWS::Serverless::Api或AWS::ApiGateway::RestApi类型资源,所有Lambda的API触发配置显式指定使用主栈传入的API实例。

# 业务子模板 template_user.yaml 核心配置
Parameters:
  SharedMainApiId:
    Type: String
  SharedMainApiRootResourceId:
    Type: String

Resources:
  # 可选:按业务模块创建统一父路径,便于路径分组
  UserModuleRootPath:
    Type: AWS::ApiGateway::Resource
    Properties:
      RestApiId: !Ref SharedMainApiId
      ParentId: !Ref SharedMainApiRootResourceId
      PathPart: user

  # 示例业务Lambda函数
  GetUserInfoFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/get_user_info/
      Handler: app.lambda_handler
      Runtime: python3.9
      Events:
        GetUserInfo:
          Type: Api
          Properties:
            Path: /user/info
            Method: get
            # 关键配置:指定使用主栈的共享API Gateway
            RestApiId: !Ref SharedMainApiId

步骤3:主模板嵌套栈声明时传入API参数

主模板中定义嵌套栈时,把共享API的核心参数传递给子栈,完成资源关联。

# 主模板 template.yaml 嵌套栈配置
Resources:
  # 前面的SharedMainApi配置保持不变
  UserBusinessNestedStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: ./template_user.yaml
      Parameters:
        SharedMainApiId: !Ref SharedMainApi
        SharedMainApiRootResourceId: !GetAtt SharedMainApi.RootResourceId

步骤4:统一执行部署

删除之前生成的独立API Gateway残留资源后,重新通过SAM部署主栈即可,所有子栈的API端点都会挂载到主栈的API Gateway实例上,仅生成1个访问地址。

注意:如果需要自定义部署逻辑,仅需要在主栈中定义API Deployment资源即可,不需要在子栈单独部署API实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:57:02