如何在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
相关产品推荐
相关产品推荐

