在 cloudformation 的 yaml 中的 json 中使用 Fn::ImportValue。

问题描述 投票:0回答:1

我正在使用基础架构的代码为cloudwatch写一个仪表盘,为了实现这个目标,我在yaml文件的DashboardBody里有一个json,我的问题是,当我试图使用一个函数 fn::xxxx 在json的metrics里面,如下所示。

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,但尝试是免费的。

  • {"Fn::ImportValue": "LoadBalancerFullName"}
  • "{"Fn::ImportValue": "LoadBalancerFullName"}"
  • '{"Fn::ImportValue": "LoadBalancerFullName"}'
  • {Fn::ImportValue: LoadBalancerFullName}
  • Fn::ImportValue: LoadBalancerFullName
  • -Fn::ImportValue: LoadBalancerFullName

任何想法,如果这是可能的做法?关于全部迁移到yaml的问题,我们放弃了,因为我们要把所有的迁移到yaml上使用。Amazon CDK 和迁移将是浪费时间。

硬编码的名称是可行的,但由于负载均衡器也在cloudformation上,我不能这样做。

谢谢。

json yaml amazon-cloudformation
1个回答
0
投票

我想应该可以用以下方法来实现这一点 !"子 以数组形式出现。

            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 是用。

© www.soinside.com 2019 - 2024. All rights reserved.