boto3を使ってaws cloud watchのメトリクスのグラフ画像を保存する方法

こんにちは。hacknoteのr.katoです。

以前、aws cliでCloudWatchからグラフを取得でaws cliを使ったcloud watchのメトリクスのグラフ画像保存を紹介していました。
今回はboto3とpythonを使って再現してみたので紹介していきます。

コード

次のコードを実行すればカレントディレクトリに指定したグラフのPNGファイルが保存されます。
widgetでどのグラフをどのように保存するか指定し、boto3のclientのcloudwatchにあるget_metric_widget_imageを使って、
グラフ画像のバイナリデータを取得しています。

そして、io.BytesIOImage.opensaveを使って、バイナリデータをPNGとして保存しています。

widgetはawsコンソールのCloudWatchのメトリクスにアクセスし、

プロットしたいグラフをプロットし、表示期間など設定後に

ソースを表示し、イメージAPIをクリックした後、そのままコピーした物を使えばOKです。

今回は、プログラム実行時の31日前からのEC2のNetworkOutのグラフ画像が欲しかったのでwidgetのmetricsがこのようになっています。
また、timezoneで日本時間を指定することでグラフの横軸を日本時間にしています。

実際に取得したグラフ画像

このような形で取得することができました!