営業部 佐竹です。
本日は、Trusted Advisor を活用した RDS のコスト最適化とその通知方法について記載します。
はじめに
以前、RDS のコスト最適化について以下のブログ記事にまとめを記載しました。
この中で Trusted Advisor の「Amazon RDS のアイドル状態の DB インスタンス」について記載しました。
この項目は長期間にわたってコネクションがない RDS DB インスタンス(つまり利用されていない RDS)を「アイドル状態」としてフックしてくれる機能です。よって、本項目を定期的に棚卸することでコスト削減が可能となるのですが、定期的に Trusted Advisor をマネジメントコンソールから確認するのは手間がかかります。
今回は、未使用とされる RDS があれば Trusted Advisor の内容をプッシュ通知するよう設定をしたいという要望にお応えするため、その設定方法を記載します。
Trusted Advisor の特定項目だけを定期通知する方法
はじめに注意点ですが、以下の作業内容は US East (N. Virginia) us-east-1 で作業を行う必要があります。これは、Trusted Advisor が US East (N. Virginia) us-east-1 で動作しているという仕様のためです。
SNS Topic で E メールを Subscribe する
SNS のマネジメントコンソールから、 Topic を新規に作成します。
作成した Topic は Email
としてください。また、可能であれば以下のブログ記事の通り Unsubscribe リンクを無効化する対応を合わせて行ってください。
Topic の作成が完了したら、次に行きます。
EventBridge で通知設定を行う
Amazon EventBridge を利用することで、Trusted Advisor の通知をトリガーすることが可能です。
「Create rule」を押下して進めます。
- ラジオボタンは Event Pattern のままとします
- Service Name は Trusted Advisor を設定します
- Event Type は Check Item Refresh Status を設定します
続けて、3つある項目のうち、真ん中の「Any check」 を 「Specific check(s)」に変更します。加えて、Amazon RDS Idle DB Instances
を選択してください。設定が完了すると、「Event Pattern Preview」として以下の通りの JSON が表示されているかと存じます。
{ "source": [ "aws.trustedadvisor" ], "detail-type": [ "Trusted Advisor Check Item Refresh Notification" ], "detail": { "check-name": [ "Amazon RDS Idle DB Instances" ] } }
なお、Idle DB Instances は"status": "WARN" となりますので、status でフィルタリングを行う場合は WARN
を選択ください。
続けて画面右側にて、Targets に SNS Topic を指定した後、「Configure details」を押下して進めます。
最後に、Name に適切な名前を入力後「Create Rule」を押下して作成を完了します。
複数アカウントへの通知設定について
残念ながら、これらを Organizations でまとめて設定する機能がありませんため、全メンバーアカウントに本設定をまとめて行われたい場合は、CloudFormation(CloudFormation StackSets)を利用されることを推奨いたします。
通知設定から少し話題は逸れますが、全アカウントの Trusted Advisor の内容をまとめて取得したい場合は、以下で記載しております Organizational view が有効です。
実際に通知された JSON の内容
Show sample event(s)
でもサンプルが確認できますが、実際に通知された SNS の E メールの内容を以下に記載します。
{ "version": "0", "id": "8f0e6c60-d17f-b196-3e9c-293f5a8a4b23", "detail-type": "Trusted Advisor Check Item Refresh Notification", "source": "aws.trustedadvisor", "account": "123456789012", "time": "2021-10-08T01:45:31Z", "region": "us-east-1", "resources": [], "detail": { "check-name": "Amazon RDS Idle DB Instances", "check-item-detail": { "Instance Type": "db.r5.large", "Region": "ap-northeast-1", "Days Since Last Connection": "9", "Storage Provisioned (GB)": "1", "DB Instance Name": "database-1-instance-1", "Estimated Monthly Savings (On Demand)": "$252", "Multi-AZ": "No" }, "status": "WARN", "resource_id": "arn:aws:rds:ap-northeast-1:123456789012:db:database-1-instance-1", "uuid": "3b86b60a-cc81-48f5-9eb6-ae96ca2f8df8" } }
この JSON は、Aurora MySQL を1台構築した後、利用せず一週間ほど放置することで実際に検知された Notification です。DB Instance Name
ごとに通知が実行されるため、複数台が検知された場合はそれぞれ別のメールとして通知がされる点にご留意ください。
AWS Chatbot は残念な通知内容
本 SNS への通知では AWS Chatbot への通知も検証しましたが今回に限っては Chatbot はあまり推奨できません。
理由は、上画像の通り通知される情報が少なすぎるためです。
そのため、メールをそのまま Slack のチャンネルに通知するほうが、情報量の点から利便性の高い手法となります。
Trusted Advisor の通知のタイミングについて
通知の頻度については、以下の通り FAQ に記載があります。
通知の頻度およびタイミングはどうなっていますか?
通常木曜日と金曜日に週次の通知 E メールが送信されます。通知 E メールには過去 1 週間 (7 日間) のリソース構成が反映されます。
そのため、通知は毎週木曜日と金曜日に行われることとなるようです。ただ原文は typically on Thursday or Friday
とありますので、正しくは木曜日もしくは金曜日に通知されるようです。
実際に本通知設定を試してみたところ、確かに毎週木曜日に通知が来たのですが、水曜日に通知されたこともありました。
おおよそ毎週通知がされるということは間違いないですので、通知がされたタイミングで調査を行う運用が良いでしょう。
AWS 公式ドキュメント
最後に、関連する AWS 公式ドキュメントをご紹介します。
まとめ
本日は、Trusted Advisor を活用した RDS のコスト最適化手法として、Amazon RDS Idle DB Instances の項目を定期通知する方法について記載しました。
EventBridge をうまく使えば、このように Trusted Advisor の一部の項目のみをピンポイントで通知することも可能です。通知をうまく活用して、コスト最適化の運用を継続頂ければ嬉しく思います。
では、またお会いしましょう。
2021年11月19日追記
Trusted Advisor の分析期間を超えて DB コネクションの調査を行いたい場合は以下の記事を参考にしてください。
佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ
マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023-2024 Japan AWS Top Engineers/2020-2024 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。