部署Serverless应用时如何排除特定Lambda函数?
如何在Serverless部署时排除特定Lambda函数
Serverless Framework本身没有提供直接的exclude参数来跳过特定Lambda函数部署,但可以通过以下几种方式实现需求:
方法1:自定义参数+条件配置
利用Serverless的内置条件语法,结合部署时传入的参数,动态控制函数是否被包含在部署中。
示例serverless.yml配置:
custom: # 接收部署时传入的排除函数列表,默认空字符串 excludeFunctions: ${opt:exclude-functions, ''} functions: commonFuncA: handler: handlers/commonFuncA.handler # 共用函数,始终部署 devOnlyFunc: handler: handlers/devOnlyFunc.handler # 只有当排除列表不包含当前函数名时,才加载该函数的配置 ${if:not(contains(self:custom.excludeFunctions, 'devOnlyFunc')):} timeout: 10 memorySize: 256 prodOnlyFunc: handler: handlers/prodOnlyFunc.handler ${if:not(contains(self:custom.excludeFunctions, 'prodOnlyFunc')):} timeout: 30 memorySize: 512
部署时排除prodOnlyFunc:
sls deploy --exclude-functions "prodOnlyFunc"
如果要排除多个函数,用逗号分隔:
sls deploy --exclude-functions "prodOnlyFunc,anotherFunc"
方法2:使用serverless-plugin-select插件
这个插件可以按部署环境(stage)或自定义标签来筛选要部署的函数,配置更直观。
- 安装插件:
npm install serverless-plugin-select --save-dev
- 在
serverless.yml中配置插件和函数的部署规则:
plugins: - serverless-plugin-select functions: commonFuncA: handler: handlers/commonFuncA.handler # 该函数在dev和prod环境都部署 select: - dev - prod devOnlyFunc: handler: handlers/devOnlyFunc.handler # 只在dev环境部署 select: - dev prodOnlyFunc: handler: handlers/prodOnlyFunc.handler # 只在prod环境部署 select: - prod
部署dev环境时,只会部署commonFuncA和devOnlyFunc:
sls deploy --stage dev
方法3:拆分配置文件
将共用函数和环境专属函数拆分到不同配置文件,通过extends字段复用基础配置,避免单个文件过于臃肿。
- 创建
serverless-shared.yml:存放所有环境共用的函数、provider配置等
service: my-service provider: name: aws runtime: nodejs18.x # 其他共用provider配置... functions: commonFuncA: handler: handlers/commonFuncA.handler
- 创建
serverless-dev.yml:引用共用配置,添加开发环境专属函数
extends: serverless-shared.yml functions: devOnlyFunc: handler: handlers/devOnlyFunc.handler # 开发环境专属配置
- 创建
serverless-prod.yml:同理添加生产环境专属函数
extends: serverless-shared.yml functions: prodOnlyFunc: handler: handlers/prodOnlyFunc.handler # 生产环境专属配置
部署开发环境时,指定对应配置文件:
sls deploy --config serverless-dev.yml
内容的提问来源于stack exchange,提问作者Doublon
相关产品推荐
相关产品推荐

