Невозможно загрузить файл json в aws cloudwatch - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь загрузить файл json в aws cloudwatch, заменив содержимое в нем, а взамен я загружаю этот файл в cloudwatch.

Шаг 1: - Я сохраняю приборную панель cloudwatch (в формате JSON), используя AWS cli (AWS cloudwatch get-dashboard *) на компьютере windows.

Шаг 2: - заменить содержимое файла и сохранить его как есть.

Шаг 3: - Я загружаю новый измененный файл (в json) в cloudwatch, но не смог загрузить.

когда я просматриваю файл, который не отображается в формате JSON вместо windows, считаю его строкой.

cli Я использую как:

aws cloudwatch get-dashboard --dashboard-name SIT  --region eu-west-1 > SIT.json

вывод, как показано ниже:

{
    "DashboardName": "SIT",
    "DashboardArn": "arn:aws:cloudwatch::123456789:dashboard/SIT",
    "DashboardBody": "{\"widgets\":[{\"type\":\"metric\",\"x\":0,\"y\":0,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"sit/Default\",\"Memory Available\",\"Instance\",\"i-04996767d0822cccf\"]]
,\"view\":\"timeSeries\",\"stacked\":false,\"region\":\"eu-west-1\",\"title\":\"RT1 Available Memory\",\"period\":300}},{\"type\":\"metric\",\"x\":0,\"y\":6,\"width\":12,\"height\":6,\"properties\":{\"met
rics\":[[\"AWS/EC2\",\"CPUUtilization\",\"InstanceId\",\"i-04996767d0822cccf\"]],\"view\":\"timeSeries\",\"stacked\":false,\"region\":\"eu-west-1\",\"title\":\"RT1 CPU Utilization\",\"period\":300}},{\"ty
pe\":\"metric\",\"x\":0,\"y\":18,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/EC2\",\"CPUUtilization\",\"InstanceId\",\"i-092fcbe0dd0eeceb5\"]],\"view\":\"timeSeries\",\"stacked\":false,\
"title\":\"SQL Primary CPU Utilization\",\"region\":\"eu-west-1\",\"period\":300}},{\"type\":\"metric\",\"x\":12,\"y\":12,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/EC2\",\"CPUUtilizati
on\",\"InstanceId\",\"i-045c7346c36f1cc3d\"]],\"view\":\"timeSeries\",\"stacked\":false,\"region\":\"eu-west-1\",\"title\":\"Batch CPU Utilization\",\"period\":300}},{\"type\":\"metric\",\"x\":0,\"y\":12,
\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"sit/Default\",\"Memory Available\",\"Instance\",\"i-045c7346c36f1cc3d\"]],\"view\":\"timeSeries\",\"stacked\":false,\"title\":\"Batch Available Me
mory\",\"region\":\"eu-west-1\",\"period\":300}},{\"type\":\"metric\",\"x\":12,\"y\":18,\"width\":12,\"height\":6,\"properties\":{\"view\":\"timeSeries\",\"stacked\":false,\"metrics\":[[\"AWS/EC2\",\"CPUU
tilization\",\"InstanceId\",\"i-092fcbe0dd0eeceb5\"]],\"region\":\"eu-west-1\",\"title\":\"SQL Secondary CPU Utilization\"}},{\"type\":\"metric\",\"x\":0,\"y\":24,\"width\":12,\"height\":6,\"properties\":
{\"metrics\":[[\"sit/Default\",\"Memory Available\",\"Instance\",\"i-03b623e8400e4b801\"]],\"view\":\"timeSeries\",\"stacked\":false,\"title\":\"SAM Available Memory\",\"region\":\"eu-west-1\",\"period\":
300}},{\"type\":\"metric\",\"x\":12,\"y\":24,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/EC2\",\"CPUUtilization\",\"InstanceId\",\"i-03b623e8400e4b801\"]],\"view\":\"timeSeries\",\"stack
ed\":false,\"title\":\"SAM CPU Utilization\",\"region\":\"eu-west-1\",\"period\":300}},{\"type\":\"metric\",\"x\":12,\"y\":0,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"sit/Default\",\"Memor
y Available\",\"Instance\",\"i-0e82d201d3fac0d2d\"]],\"view\":\"timeSeries\",\"stacked\":false,\"title\":\"RT2 Available Memory\",\"region\":\"eu-west-1\",\"period\":300}},{\"type\":\"metric\",\"x\":12,\"
y\":6,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/EC2\",\"CPUUtilization\",\"InstanceId\",\"i-0e82d201d3fac0d2d\"]],\"view\":\"timeSeries\",\"stacked\":false,\"title\":\"RT2 CPU Utilizat
ion\",\"region\":\"eu-west-1\",\"period\":300}}]}"
}

Я пытался использовать "ConvertTo- Json", но все равно не смог загрузить.

Ошибка, которую я получаю следующим образом;

An error occurred (InvalidParameterInput) when calling the PutDashboard operation: The dashboard body is invalid, there are 1 validation errors: [ { "dataPath": "", "message": "Should have required property 'widgets'" } ]

Может кто-нибудь посоветовать?

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Кажется, что Dashboardody включает в себя экранированный JSON объект:

 "DashboardBody": "{\" ...

Вы можете удалить специальные символы следующим образом:

$invalidJsonString = @'
{
    "DashboardName": "SIT",
    "DashboardArn": "arn:aws:cloudwatch::123456789:dashboard/SIT",
    "DashboardBody": "{\"widgets\":[{\"type\":\"metric\",\"x\":0,\"y\":0,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"sit/Default\",\"Memory Available\",\"Instance\",\"i-04996767d0822cccf\"]]
,\"view\":\"timeSeries\",\"stacked\":false,\"region\":\"eu-west-1\",\"title\":\"RT1 Available Memory\",\"period\":300}},{\"type\":\"metric\",\"x\":0,\"y\":6,\"width\":12,\"height\":6,\"properties\":{\"met
rics\":[[\"AWS/EC2\",\"CPUUtilization\",\"InstanceId\",\"i-04996767d0822cccf\"]],\"view\":\"timeSeries\",\"stacked\":false,\"region\":\"eu-west-1\",\"title\":\"RT1 CPU Utilization\",\"period\":300}},{\"ty
pe\":\"metric\",\"x\":0,\"y\":18,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/EC2\",\"CPUUtilization\",\"InstanceId\",\"i-092fcbe0dd0eeceb5\"]],\"view\":\"timeSeries\",\"stacked\":false,\
"title\":\"SQL Primary CPU Utilization\",\"region\":\"eu-west-1\",\"period\":300}},{\"type\":\"metric\",\"x\":12,\"y\":12,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/EC2\",\"CPUUtilizati
on\",\"InstanceId\",\"i-045c7346c36f1cc3d\"]],\"view\":\"timeSeries\",\"stacked\":false,\"region\":\"eu-west-1\",\"title\":\"Batch CPU Utilization\",\"period\":300}},{\"type\":\"metric\",\"x\":0,\"y\":12,
\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"sit/Default\",\"Memory Available\",\"Instance\",\"i-045c7346c36f1cc3d\"]],\"view\":\"timeSeries\",\"stacked\":false,\"title\":\"Batch Available Me
mory\",\"region\":\"eu-west-1\",\"period\":300}},{\"type\":\"metric\",\"x\":12,\"y\":18,\"width\":12,\"height\":6,\"properties\":{\"view\":\"timeSeries\",\"stacked\":false,\"metrics\":[[\"AWS/EC2\",\"CPUU
tilization\",\"InstanceId\",\"i-092fcbe0dd0eeceb5\"]],\"region\":\"eu-west-1\",\"title\":\"SQL Secondary CPU Utilization\"}},{\"type\":\"metric\",\"x\":0,\"y\":24,\"width\":12,\"height\":6,\"properties\":
{\"metrics\":[[\"sit/Default\",\"Memory Available\",\"Instance\",\"i-03b623e8400e4b801\"]],\"view\":\"timeSeries\",\"stacked\":false,\"title\":\"SAM Available Memory\",\"region\":\"eu-west-1\",\"period\":
300}},{\"type\":\"metric\",\"x\":12,\"y\":24,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/EC2\",\"CPUUtilization\",\"InstanceId\",\"i-03b623e8400e4b801\"]],\"view\":\"timeSeries\",\"stack
ed\":false,\"title\":\"SAM CPU Utilization\",\"region\":\"eu-west-1\",\"period\":300}},{\"type\":\"metric\",\"x\":12,\"y\":0,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"sit/Default\",\"Memor
y Available\",\"Instance\",\"i-0e82d201d3fac0d2d\"]],\"view\":\"timeSeries\",\"stacked\":false,\"title\":\"RT2 Available Memory\",\"region\":\"eu-west-1\",\"period\":300}},{\"type\":\"metric\",\"x\":12,\"
y\":6,\"width\":12,\"height\":6,\"properties\":{\"metrics\":[[\"AWS/EC2\",\"CPUUtilization\",\"InstanceId\",\"i-0e82d201d3fac0d2d\"]],\"view\":\"timeSeries\",\"stacked\":false,\"title\":\"RT2 CPU Utilizat
ion\",\"region\":\"eu-west-1\",\"period\":300}}]}"
}
'@

$correctedJsonString = (($invalidJsonString | % {[System.Text.RegularExpressions.Regex]::Unescape($_)} ) -replace '"{', '{') -replace '}"', '}' 

$json = $correctedJsonString | ConvertFrom-Json

Вывод:

DashboardName DashboardArn                                DashboardBody
------------- ------------                                -------------
SIT           arn:aws:cloudwatch::123456789:dashboard/SIT @{widgets=System.Obj…

Если вы хотите поиграть онлайн, вы можете использовать эту ссылку TIO .

. Вы можете исправить недопустимое JSON содержимое вашего файла с помощью:

> ((Get-Content .\SIT.json | % {[System.Text.RegularExpressions.Regex]::Unescape($_)} ) -replace '"{', '{') -replace '}"', '}' | out-file .\SIT.json

>  gc .\SIT.json | ConvertFrom-Json

DashboardName DashboardArn                                DashboardBody
------------- ------------                                -------------
SIT           arn:aws:cloudwatch::123456789:dashboard/SIT @{widgets=System.Object[]}

0 голосов
/ 09 февраля 2020

Мне удалось найти решение с помощью powershell "format-list";

Get-CWDashboard -DashboardName <SIT> | select DashboardBody | fl

Приведенная выше команда выберет только DashboardBody и отформатирует вывод в представлении json (оригинальный формат тела приборной панели).

Теперь я могу загрузить DashboardBody обратно на приборную панель cloudwatch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...