Serverless框架下能否从SSM读取值设置EventBridge的ScheduleExpression
解答
可以在serverless.yml中实现该需求,Serverless框架原生支持读取AWS SSM Parameter Store的参数值,可直接用于拼接EventBridge调度规则的时间表达式。
具体实现步骤
直接使用${ssm:参数完整路径}语法引用你定义的SSM参数,结合Serverless内置的算术运算能力,即可直接生成2倍间隔的调度规则,修改后的函数配置示例如下:
heartbeat-check: handler: groupconsultation/heartbeatcheck.handler description: ${self:custom.gitVersion} timeout: 15 memorySize: 1536 package: include: - groupconsultation/heartbeatcheck.js - shared/* - newrelic-lambda-wrapper.js events: - eventBridge: enabled: true # 读取SSM参数值乘以2作为调度间隔 schedule: rate(${${ssm:/${file(vars.js):values.environmentName}/lambda/HeartbeatInterval} * 2} minutes) resources: Resources: GCHeartbeatInterval: Type: AWS::SSM::Parameter Properties: Name: /${file(vars.js):values.environmentName}/lambda/HeartbeatInterval Type: String Value: 1 Description: value in minute. need to convert it to seconds/milliseconds
注意事项
- 部署使用的AWS账号需要具备
ssm:GetParameter权限,才能在部署阶段正常读取SSM参数值 - SSM参数值是在部署阶段解析的,如果你后续修改了SSM里的间隔数值,需要重新执行
serverless deploy才能更新EventBridge的调度规则 - 如果你需要无需重新部署即可动态调整调度间隔,可以调整实现逻辑:将EventBridge的调度间隔设为1分钟的固定值,Lambda运行时主动拉取SSM参数判断是否达到2倍心跳间隔,满足条件再执行业务逻辑即可,该方案会产生少量无效Lambda调用,可根据实际场景选择。
内容的提问来源于stack exchange,提问作者Nouman Bhatti
相关产品推荐
相关产品推荐

