使用Serverless获取CF堆栈当前值并动态修改serverless.yml配置参数
问题解答
可以实现读取特定参数当前值并在serverless.yml中动态调整的需求,常见实现方案如下:
- 方案1:使用Serverless Framework内置的变量引用与算术运算
你可以直接在配置内引用已定义的参数值,直接做加减计算即可,示例如下:
你也可以把通用值统一定义到# 先定义基础配置 functions: demoFunc: handler: index.handler memorySize: 2048 # 初始内存为2GB adjustFunc: handler: app.handler # 直接读取demoFunc的内存值,动态增加2GB,最终为4GB memorySize: ${self:functions.demoFunc.memorySize + 2048}custom字段下统一管理,再做动态计算。 - 方案2:通过环境变量注入动态值
如果你需要在部署时灵活调整,可以把参数值设为环境变量引用,部署时传入计算后的值即可:
部署时执行对应命令传入调整后的值即可,例如要设置为5GB就执行functions: demoFunc: handler: index.handler # 优先读取环境变量中的MEMORY_SIZE值,默认取2GB memorySize: ${env:MEMORY_SIZE, 2048}MEMORY_SIZE=5120 sls deploy。 - 方案3:使用JS/TS格式的配置文件
如果计算逻辑比较复杂,你可以把serverless.yml替换为serverless.js配置文件,直接写代码逻辑读取和计算参数值:// serverless.js 示例 module.exports = { functions: { demoFunc: { handler: 'index.handler', // 可以读取任意现有配置值后做自定义计算 memorySize: require('./old-config.json').functions.demoFunc.memorySize + 3072 } } }
注意事项
- 内置算术运算仅支持Serverless Framework v2.30.0及以上版本,低版本需要配合自定义变量插件实现
- 调整后的内存值不要超过你所使用的云厂商的函数内存上限,否则会出现部署报错
- 如果你需要读取的是已部署到云端的函数的实际内存值,而非本地配置值,可以调用对应云厂商的SDK查询后再写入配置文件。
内容的提问来源于stack exchange,提问作者GPX
相关产品推荐
相关产品推荐

