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

在serverless.yml中用SSM设置logRetentionInDays遇整数类型错误求方案

解决Serverless.yml中SSM参数配置logRetentionInDays的类型问题

嘿,我来帮你搞定这个问题!你猜的完全没错——问题出在SSM参数被读取成了字符串类型,而logRetentionInDays要求必须是大于0的整数,所以才会抛出这个报错。下面给你几个可行的解决思路:

方法一:用CloudFormation内置函数强制转换类型

Serverless Framework支持直接在配置中使用CloudFormation的内置函数,其中!Int可以把字符串格式的数字转换成整数类型。你可以这样修改配置:

service: order-service
provider:
  name: aws
  runtime: nodejs8.10
  stage: ${opt:stage, 'dev'} # 假设你这里的stage配置是正常的
  logRetentionInDays: !Int ${ssm:/${self:provider.stage}/order-service/log-retention}

⚠️ 注意:你的SSM参数值必须是纯数字字符串(比如"30"),不能包含引号、空格或其他非数字字符,否则转换会失败。

方法二:通过自定义变量+插件转换类型

如果CloudFormation的内置函数不好使,你可以借助Serverless插件来处理类型转换。比如使用serverless-plugin-utils插件:

  1. 先安装插件:
npm install serverless-plugin-utils --save-dev
  1. 然后修改serverless.yml配置:
service: order-service
plugins:
  - serverless-plugin-utils
custom:
  # 先读取SSM参数到自定义变量
  rawLogRetention: ${ssm:/${self:provider.stage}/order-service/log-retention}
  # 用插件把字符串转成整数
  logRetentionInt: ${utils:int(${self:custom.rawLogRetention})}
provider:
  name: aws
  runtime: nodejs8.10
  stage: ${opt:stage, 'dev'}
  logRetentionInDays: ${self:custom.logRetentionInt}

额外验证步骤

在尝试上面的方法前,建议先做两个验证,排除其他问题:

  • 先把logRetentionInDays直接写成数字(比如30),确认服务能正常部署,排除其他配置错误。
  • 登录AWS控制台查看你的SSM参数,确保参数值是纯数字,没有多余的格式字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:36:36