используйте Fn :: ImportValue внутри json, который находится внутри yaml в облачной информации - PullRequest
0 голосов
/ 23 апреля 2020

Я пишу панель мониторинга для cloudwatch, используя инфраструктуру в качестве кода для достижения этой цели. У меня есть json внутри DashboardBody в файле yaml. Моя проблема возникает, когда я пытаюсь использовать функцию fn::xxxx внутри метрик * 1034. * следующим образом:

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 отказывается, потому что мы собираемся перенести все на использование Amazon CDK, и перенос будет пустой тратой времени.

Жесткое кодирование имени работает , но так как балансировщик нагрузки находится на облачной информации, я не могу этого сделать.

Спасибо.

1 Ответ

0 голосов
/ 23 апреля 2020

Я думаю, что это можно сделать, используя ! 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.

...