vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

AWS CloudWatch Dashboard 複製

簡単にコピーしたかったのです。

同一アカウント

マネジメントコンソール上で別名で保存が簡単かと思います。

f:id:htnosm:20190811141000p:plainf:id:htnosm:20190811141008p:plain

別アカウント

CLI を使います。 jq 使います。

# 複製元のAWSアカウントから DashboardBody を取得

$ aws cloudwatch get-dashboard \
--dashboard-name "sample-dashboard" \
--query 'DashboardBody' > sample-dashboard.json


# 複製先のAWSアカウントに対して、取得した JSON でダッシュボード作成

$ aws cloudwatch put-dashboard \
--dashboard-name "sample-dashboard-copy" \
--dashboard-body "$(jq -r . sample-dashboard.json)"

{
    "DashboardValidationMessages": []
}

jq が無い環境では自力で JSON 書式を調整します。
Text Widget で改行使っている等がある場合はその辺りも考慮必要です。 (下記例は考慮していません) 複製してから修正すれば良い訳ですが。

# sed 例
$ aws cloudwatch put-dashboard \
--dashboard-name "sample-dashboard-copy" \
--dashboard-body "$(sed -e 's/\\"/"/g' -e 's/^"//' -e 's/"$//' sample-dashboard.json)"

おまけでワンライナー

$ aws cloudwatch put-dashboard \
--dashboard-name "sample-dashboard-copy" \
--dashboard-body "$(aws cloudwatch get-dashboard \
  --dashboard-name "sample-dashboard" \
  --query 'DashboardBody' | jq -r . )"

dashboard-name を同一名にしてしまうと上書きされるので注意です。