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

如何在CloudWatch告警名称中添加Lambda版本?验证配置正确性

问题

我有一个如下形式的CloudWatch告警配置:

MyLambdaCodeDeployAlarm: 
  Type: AWS::CloudWatch::Alarm 
  Properties:
    AlarmName:                  !Sub codedeploy-${AppName}-mylambda-errors
    AlarmDescription:           Alarm 
    ComparisonOperator:         GreaterThanOrEqualToThreshold
    Dimensions:
      - Name:                   FunctionName  
        Value:                  !Ref MyLambda
      - Name:                   Resource
        Value:                  !Sub ${MyLambdaLambda}:LiveTraffic 
      - Name:                   ExecutedVersion
        Value:                  !GetAtt MyLambda.Version.Version

我希望将Lambda版本名称添加到告警名称中,尝试了以下写法但不确定是否正确:

AlarmName: !Sub codedeploy-${AppName}-mylambda-errors-${!GetAtt MyLambda.Version.Version}

请问这种方式是否正确?是否应该使用!Ref?或者有其他实现方法?

回答
  • 你尝试的写法不正确,!Sub内部不需要嵌套!GetAtt的感叹号,直接引用属性路径即可。
  • 正确的!Sub写法如下:
    AlarmName: !Sub codedeploy-${AppName}-mylambda-errors-${MyLambda.Version.Version}
    
    在!Sub的字符串中,可以直接引用CloudFormation的属性引用路径,不需要额外添加!符号,CloudFormation会自动解析这个路径对应的属性值。
  • 不需要使用!Ref,因为MyLambda.Version.Version是Lambda版本的专属属性,必须通过!GetAtt(或直接在!Sub中引用属性路径)来获取;而!Ref一般用于获取资源的物理名称或默认返回属性,无法拿到Lambda的版本号。
  • 另一种实现方式是先将版本号存入一个变量,再在!Sub中引用:
    # 先定义变量存储版本号
    LambdaVersion:
      Type: String
      Value: !GetAtt MyLambda.Version.Version
    
    MyLambdaCodeDeployAlarm: 
      Type: AWS::CloudWatch::Alarm 
      Properties:
        AlarmName: !Sub codedeploy-${AppName}-mylambda-errors-${LambdaVersion}
        # 其余属性保持不变
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:03:15