請求とコスト管理のPDF形式のダッシュボードを定期的に指定したメールアドレスへ通知する機能が追加されました
定期的にAWSの利用料金の通知をしてほしい
こんにちは、のんピ(@non____97)です。
皆さんは定期的にAWSの利用料金の通知をしてほしいと思ったことはありますか? 私はあります。
以下のようにAWSの利用料金を定期的に通知をするためには手組みをしていることが多かったでしょう。
しかし、手組みをするのは中々に手間です。
そんな折、請求とコスト管理のPDF形式のダッシュボードを定期的に指定したメールアドレスへ通知する機能が追加されました。
AWS Blogsにも投稿されています。
ドキュメントとしては以下にまとまっています。
AWS Blogsに投稿されている記事によると、こちらの機能は以下のような特徴があります。
- 既存のダッシュボードの情報をPDF形式のレポートとして出力する
- レポートの生成通知はメールのみ
- AWS User Notificationsを使用する
- メール内に含まれるURLからPDFレポートを表示できる
- AWSアカウントの認証は不要で、PDFレポートを表示するためにはメール本文内のパスワードが必要
- PDFレポートのURLの有効期限は15日
- 日次や週次、月次など任意のサイクルで配信が可能
SlackやTeamsなどのチャットツールに通知をしたり、都度パスワードを用いてPDFを自身で開くのは少し手間ですが、既存のダッシュボードをそのままPDFとして出力してくれるのはかなりありがたいです。ダッシュボードの作成自体はマネジメントコンソール上からグラフィカルに行えるため、自身でグラフをプロットするコードを作成するよりか圧倒的に手間を省けます。
実際に触ってみました。
やってみた
レポートの作成
今回は以下のようなダッシュボードを用意しました。

今月分の課金情報を日次で把握したかったので日付範囲は以下のようにしています。
- Monthly costs by service : 過去一ヶ月
- Daily costs : 今月
これを月次でレポートされたいのであれば、次月に日付範囲を先月にすることで意図した範囲を表示できると考えます。
それでは、アクション-メールレポートを管理をクリックします。

現在は空ですね。レポートを作成をクリックします。

レポート名と説明、レポート内容を選択します。

レポート内容はダッシュボード全体か単一のウィジェットかを選択可能です。ダッシュボード内の特定のウィジェットのみをレポートとして表示したい場合は後者を選択する形になります。

報告期間は以下から選択可能です。
- ウィジェット固有の範囲
- 過去7日間
- 前月
- 過去3ヶ月間
- 過去1年
- カスタム

カスタムは固定の日付範囲になります。あまり出番はないかと考えます。ダッシュボードで表示されているものと全く同じものをレポートしたいのであれば、ウィジェット固有の範囲を選択することになると考えます。
レポートのイメージはレポートをプレビューで確認できます。こちらをクリックすると実際のPDFが表示されます。

続いて送信先の指定です。
既存の構成から選択か新しいメールアドレスを入力のどちらかから選択します。既に他にレポート設定があるのであれば前者を選択する形になるでしょう。

今回ははじめましてなので、後者を選択します。既に私はAWS User Notificationsで通知設定をしていたので、そちらの通知先を設定します。実際の運用では組織内のコスト管理をされている方分登録する形になると考えます。

次はレポートスケジュールです。
レポート送信の間隔と時刻、開始日、終了日が選択できます。時刻はUTC固定です。

また、Cron式での指定も可能です。少なくとも一時間間隔でなければならないといった制約はなさそうです。

現在は17:10です。なるべく早めに確認をしたいので17:15に送信するようにします。

CURへのアクセスやレポートのメール配信を管理するための権限を渡すためにIAMロールを定義します。今回は新しくIAMロールを作成しました。

IAMロールに設定されているIAMポリシーのステートメントは以下のとおりです。<IAMロール名> + Policyという名前のマネージドポリシーが作成されます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AwsBcmDashboardsScheduleReportsDataAccess",
"Effect": "Allow",
"Action": [
"bcm-dashboards:GetDashboard"
],
"Resource": [
"arn:aws:bcm-dashboards::*:dashboard/*"
]
},
{
"Sid": "AwsBcmDashboardsScheduleReportsDataAccessCE",
"Effect": "Allow",
"Action": [
"ce:GetDimensionValues",
"ce:GetCostAndUsageWithResources",
"ce:GetCostAndUsage",
"ce:GetCostForecast",
"ce:GetTags",
"ce:GetUsageForecast",
"ce:GetCostCategories",
"ce:GetSavingsPlansCoverage",
"ce:GetReservationUtilization",
"ce:GetReservationCoverage",
"ce:GetSavingsPlansUtilization",
"ce:GetSavingsPlansUtilizationDetails"
],
"Resource": "*"
}
]
}
IAMロールの信頼ポリシーは以下のとおりです。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBcmDashboardScheduledReportAssumeRole",
"Effect": "Allow",
"Principal": {
"Service": "bcm-dashboards.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "{{accountId}}"
},
"StringLike": {
"aws:SourceArn": "arn:aws:bcm-dashboards::{{accountId}}:*"
}
}
}
]
}
最後に確認をして、作成をします。

すると、レポートの説明の文字に制限があるらしく弾かれてしまいました。

裏側ではレポート送信のIAMロールやAWS User Notificationsの設定も作成されていました。
これらを削除して、再チャレンジします。

こちらで無事作成ができました。

AWS User Notificationsの通知設定を確認すると、新たに作成がされていました。

マネージドルールのEventBridge Ruleの設定は以下のとおりです。
> aws events describe-rule --name AWSUserNotificationsManagedRule-ak4ugid
{
"Name": "AWSUserNotificationsManagedRule-ak4ugid",
"Arn": "arn:aws:events:us-east-1:<AWSアカウントID>:rule/AWSUserNotificationsManagedRule-ak4ugid",
"EventPattern": "{\"source\": [\"aws.bcm-dashboards\"], \"detail-type\": [\"Billing and Cost Management Dashboard Schedule Report Created\"]}",
"State": "ENABLED",
"Description": "AWS User Notifications rule for source \"aws.bcm-dashboards\"",
"ManagedBy": "notifications.amazonaws.com",
"EventBusName": "default",
"CreatedBy": "<AWSアカウントID>"
}
> aws events list-targets-by-rule --rule AWSUserNotificationsManagedRule-ak4ugid
{
"Targets": [
{
"Id": "AWSNotifications-Rule-a3e6t13",
"Arn": "arn:aws:notifications:us-east-1:::",
"InputTransformer": {
"InputPathsMap": {
"event": "$"
},
"InputTemplate": "{\n \"managedRuleArn\": \"arn:aws:events:us-east-1:<AWSアカウントID>:rule/AWSUserNotificationsManagedRule-ak4ugid\",\n \"event\": <event>\n}"
}
}
]
}
動作確認
現在の時刻は17:30です。
17:25に通知するように設定していたのですが、まだです。
試しに10分ごとに通知するようにCron式を変更してみます。

すると、Sample dashboard | AWS Billing and Cost Managementという件名でbcm-dashboards@aws.comからメールがありました。
実際のメールの内容は以下のとおりです。

メールの文面からして、17:25に通知するように設定していた時のものが5分遅れで受信した形です。
Download PDFのURLをAWSマネジメントコンソールを開いていないシークレットウィンドウで開きます。
パスワードを聞かれました。

メール本文内のパスワードを入力すると、確かにダッシュボードと同じPDFレポートが表示されました。

なお、ただのPDFなのでマウスをホバーしても詳細な内訳や金額は表示されません。
次にメール本文内のView in Notification Centerをクリックすると、通知センターが開きメール本文とほぼ同じ情報を確認することができました。

ユーザー設定通知一覧からでも確認できます。

定期的な料金レポートが必要な場合に
請求とコスト管理のPDF形式のダッシュボードを定期的に指定したメールアドレスへ通知する機能が追加されたアップデートを紹介しました。
定期的な料金レポートが必要な場合に非常に役立ちそうですね。AWSアカウントにアクセスする権限がなくとも表示できるのでメールの転送をしてしまえば、誰でもすぐにレポートを確認できるのも嬉しいポイントかと考えます。
個人的にはあとはSlackやTeamsへの通知、および通知内にそのまま料金情報が表示される形で通知できるようになると最高だと感じました。
この記事が誰かの助けになれば幸いです。
以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!






