如何在CloudFormation中处理Lambda函数名中的随机字符串?
解决CloudFormation仪表板中Lambda指标通配符无效的问题
问题原因
CloudWatch的指标维度(此处为FunctionName)不支持通配符匹配,所以你使用SC-accountNumber-*-FunctionName这种带通配符的维度值配置不会生效,必须指定精确的函数名称才能匹配到指标。
解决方案
1. 直接引用CloudFormation栈内Lambda的物理名称
如果你的Lambda函数和仪表板在同一个CloudFormation栈中创建,直接通过资源引用获取函数的物理名称,完全避免手动填写或担心随机串变化:
# 示例:CloudFormation仪表板指标配置 MyDashboard: Type: AWS::CloudWatch::Dashboard Properties: DashboardBody: !Sub | { "widgets": [ { "type": "metric", "x": 0, "y": 0, "width": 12, "height": 6, "properties": { "metrics": [ [ "AWS/Lambda", "Invocations", "FunctionName", "${MyLambdaFunction}" ] ], "period": 300, "stat": "Sum" } } ] } # 栈内的Lambda函数定义 MyLambdaFunction: Type: AWS::Lambda::Function Properties: # 函数的具体配置(代码、角色等)
这里通过!Sub结合Lambda资源的逻辑IDMyLambdaFunction,CloudFormation会自动替换为函数部署后的真实物理名称,无论新版本的随机串如何变化都能正确匹配指标。
2. 用标签聚合Lambda指标
给Lambda函数添加统一标签,然后在CloudWatch仪表板中通过标签过滤指标,无需依赖函数名称:
- 第一步:为Lambda函数添加自定义标签
MyLambdaFunction: Type: AWS::Lambda::Function Properties: # 其他函数配置... Tags: - Key: FunctionAlias Value: MyApiName
- 第二步:在仪表板中通过标签匹配指标
DashboardBody: !Sub | { "widgets": [ { "type": "metric", "properties": { "metrics": [ [ "AWS/Lambda", "Invocations", { "tags": { "FunctionAlias": "MyApiName" } } ] ], "period": 300, "stat": "Sum", "label": "MyApi相关Lambda调用量" } } ] }
这种方式适合需要聚合多个同类型Lambda函数指标的场景,只要标签一致,不管函数名如何变更都能正常采集数据。
3. 使用CloudWatch指标数学表达式(SEARCH函数)
如果必须通过名称模式匹配,可以用CloudWatch的SEARCH函数来匹配符合命名规则的Lambda函数指标:
DashboardBody: !Sub | { "widgets": [ { "type": "metric", "properties": { "metrics": [ [ { "expression": "SEARCH('{AWS/Lambda,FunctionName} SC-${AWS::AccountId}-*-MyApiName', 'Sum', 300)", "label": "匹配Lambda总调用量" } ] ], "period": 300 } } ] }
注意:SEARCH函数有使用限制(比如不能结合部分统计类型),且匹配性能依赖于指标数量,适合小规模场景使用。
内容的提问来源于stack exchange,提问作者Cyoung75
相关产品推荐
相关产品推荐

