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

如何使用Serverless Framework仅向prd阶段有条件部署AWS Lambda函数

配置错误原因

你在functions块直接添加condition字段不生效,是因为该字段属于CloudFormation资源级配置项,Serverless Framework解析functions层级配置时不会识别该字段,也不会自动同步到自动生成的Lambda对应的CloudFormation资源定义中。

正确实现方案

方案一:使用Serverless原生enabled配置(推荐,更简洁)

直接在函数配置下添加enabled字段,通过阶段变量判断是否部署即可,无需额外关联CloudFormation条件:

functions:
  # 替换为你的函数名
  yourPrdOnlyLambda:
    handler: app.handler
    runtime: nodejs18.x
    # 仅prd阶段部署该函数
    enabled: ${eq: ${sls:stage}, "prd"}
    # 其余函数配置(事件、内存等按需保留)
    events:
      - httpApi:
          path: /prd-only
          method: get

该方案下Serverless会自动在非prd阶段跳过该函数、以及函数关联的专属资源的部署。如果你的IAM Role是独立自定义配置的,保留你之前在resources块中为Role添加的Condition: IsPrd配置即可。

方案二:复用已定义的CloudFormation条件

如果你需要和已有IAM Role的判断逻辑复用同一个CloudFormation条件,可以通过Serverless的资源扩展能力,给自动生成的Lambda资源绑定条件:

注:Serverless自动生成的Lambda函数对应的CloudFormation资源逻辑ID规则为「函数名大驼峰 + LambdaFunction」,比如函数名为prdOnlyFunc,对应的资源ID为PrdOnlyFuncLambdaFunction。

配置示例:

# 你原有已定义的CloudFormation条件
resources:
  Conditions:
    IsPrd:
      Fn::Equals:
        - ${sls:stage}
        - prd
  Resources:
    # 你原有已配置条件的IAM Role
    PrdOnlyRole:
      Type: AWS::IAM::Role
      Condition: IsPrd
      # 其余Role配置省略
  # 新增扩展配置,为自动生成的Lambda资源绑定条件
  extensions:
    # 替换为你的函数对应的CloudFormation资源ID
    YourPrdOnlyLambdaLambdaFunction:
      Condition: IsPrd

functions:
  yourPrdOnlyLambda:
    handler: app.handler
    role: PrdOnlyRole
    # 其余函数配置省略

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:54:05