我正在使用基础结构作为代码来编写用于Cloudwatch的仪表板,以实现此目标。在yaml文件的DashboardBody中有一个json,当我尝试在json的指标中使用函数fn::xxxx
时,问题就来了如下:
Resources:
DashboardTestYAML:
Type: AWS::CloudWatch::Dashboard
Properties:
DashboardName: SummaryDashboard
DashboardBody: '{
"widgets": [{
"type": "metric",
"x": 0,
"y": 0,
"width": 6,
"height": 6,
"properties": {
"metrics": [
[ "AWS/ApplicationELB", "RequestCount", "LoadBalancer", {"Fn::ImportValue": "LoadBalancerFullName"} ]
],
"view": "timeSeries",
"stacked": false,
"region": "eu-west-1",
"stat": "Sum",
"period": 300,
"title": "Load-blancer-requests"
}
}]
}'
我尝试了以下操作,但没有任何效果(有些甚至不是有效的json,但try是免费的。
{"Fn::ImportValue": "LoadBalancerFullName"}
"{"Fn::ImportValue": "LoadBalancerFullName"}"
'{"Fn::ImportValue": "LoadBalancerFullName"}'
{Fn::ImportValue: LoadBalancerFullName}
Fn::ImportValue: LoadBalancerFullName
-Fn::ImportValue: LoadBalancerFullName
是否知道是否可以这样做?
关于将全部迁移到yaml的操作已被废弃,因为我们要迁移所有以使用Amazon CDK
的方法,而进行迁移将浪费时间。
硬编码名称有效,但是由于负载均衡器也处于cloudformation上,因此我无法做到这一点。
谢谢。
答案 0 :(得分:0)
我认为应该可以使用!Sub以数组形式执行此操作:
DashboardBody:
!Sub
- |
{
"widgets": [{
"type": "metric",
"x": 0,
"y": 0,
"width": 6,
"height": 6,
"properties": {
"metrics": [
[ "AWS/ApplicationELB", "RequestCount", "LoadBalancer", "${LoadBalancerName}" ]
],
"view": "timeSeries",
"stacked": false,
"region": "eu-west-1",
"stat": "Sum",
"period": 300,
"title": "Load-blancer-requests"
}
}]
}
- LoadBalancerName: !ImportValue LoadBalancerFullName
我的语法或意图可能不正确,但是我认为使用!Sub
时可以看到核心结构。