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

如何配置serverless-plugin-split-stacks降低根栈资源数量?

解决serverless-plugin-split-stacks根栈资源过多的问题

问题原因分析

你遇到的根栈资源反而增加的情况,本质是每个嵌套栈本身会在根栈中生成一个AWS::CloudFormation::Stack资源。当调大nestedStackCount或开启perFunction: true时,子栈数量暴增,根栈里新增的Stack资源数量超过了迁移出去的资源数,最终导致根栈资源总量上升。

可行解决方案

1. 优化插件核心配置,平衡子栈数量与迁移效率

优先采用perType分组策略,配合适中的nestedStackCount,避免子栈数量爆炸:

splitStacks:
  perType: true          # 同类型资源打包到同一个子栈,减少子栈数量
  nestedStackCount: 10   # 控制子栈总数,避免根栈新增过多Stack资源
  perFunction: false
  perGroupFunction: false

这个配置会把所有同类型资源(比如所有Lambda函数、所有DynamoDB表)分别打包到对应子栈,既迁移大量资源,又不会让根栈新增太多子栈资源。

2. 自定义规则强制迁移根栈残留资源

插件默认不会迁移部分资源(比如IAM角色、Lambda层),可以通过customize规则强制指定这些资源迁移到子栈:

splitStacks:
  perType: true
  customize:
    # 把所有IAM角色迁移到专门的子栈
    - resourceType: AWS::IAM::Role
      destination: IAMResourcesStack
    # 把所有Lambda层迁移到专门的子栈
    - resourceType: AWS::Lambda::LayerVersion
      destination: LambdaLayersStack

3. 手动拆分嵌套栈

如果插件自动拆分效果有限,可以直接在serverless.yml中手动定义嵌套栈,将大资源组直接隔离:

resources:
  # 根栈只保留最核心的全局资源(比如域名、全局输出)
  Resources:
    AppDomain:
      Type: AWS::Route53::RecordSet
      # ... 配置内容

  # 手动定义嵌套栈,拆分不同资源组
  NestedStacks:
    AllLambdaFunctions:
      Type: AWS::CloudFormation::Stack
      Properties:
        TemplateURL: ./lambda-resources.yml  # 单独文件存放所有Lambda相关资源
    DatabaseResources:
      Type: AWS::CloudFormation::Stack
      Properties:
        TemplateURL: ./db-resources.yml  # 单独文件存放数据库、存储类资源

4. 清理冗余资源

检查你的serverless.yml和相关配置,删除未使用的资源、重复的IAM权限、冗余的输出项等,从根源减少资源总数,这是最直接的降本手段。

5. 调整插件默认迁移规则

插件默认有部分资源不会被迁移(比如AWS::CloudFormation::WaitCondition),可以查看插件的配置文档,修改migrateDefault规则,或者自定义资源的包含/排除列表,将更多根栈资源迁移到子栈。


内容的提问来源于stack exchange,提问作者Kristóf Vass

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:34:50