営業部 佐竹です。
本日は RDS のコスト削減に関するブログとなります。
はじめに
以前、RDS のコスト削減手法の1つとして以下のブログを記載しました。
上記ブログは、Trusted Advisor のコスト削減項目の1つである「長期間コネクションがない RDS」を 定期的に通知することが目的でした。
Trusted Advisor を利用するにあたっての懸念
ただ、Trusted Advisorの「Amazon RDS Idle DB Instances」項目には1つ懸念があります。
それは「最大14日間は RDS にコネクションがなかった」という分析に留まるということで、それ以上長期間の分析結果を出してくれません。
実際にマネジメントコンソールから見ると上図の通りの表示となっており「14日以上使われていない」ことしかわかりません。
14日間の分析結果で十分だという方には問題ないのですが、お客様によっては「もっと長期間分析して判断したい」とされる場合も多い状況です。
このような場合、Trusted Advisor の機能では対応できません。分析結果を14日以上に設定するようなカスタム機能がないためです。
CloudWatch と AWS CLI を利用して調査を行う方法
AWS CLI を利用することで本懸念点を払拭することが可能です。
Amazon CloudWatch における CLI get-metric-statistics を利用すれば、対象 RDS の過去のコネクション履歴を分析が可能です。
さっそくですがコマンドです。以下を CloudShell から実行してください。
実行権限としては ReadOnlyAccess
の権限があれば実行が可能です。
補足:ただし CloudShell は ReadOnlyAccess だけでは実行できませんので注意してください
aws cloudwatch get-metric-statistics コマンドサンプル
以下が AWS CLI のコマンドサンプルとなります。
DAYAGO=60 NAMESPACE=AWS/RDS METRIC_NAME=DatabaseConnections STATISTICS=Maximum STARTTIME=`date +'%Y-%m-%dT00:00:00Z' --date "$DAYAGO day ago"` ENDTIME=`date +'%Y-%m-%dT00:00:00Z'` for DBInstanceIdentifiers in `aws rds describe-db-instances --query "DBInstances[].DBInstanceIdentifier" --output text` do echo $DBInstanceIdentifiers >> connections-list.txt aws cloudwatch get-metric-statistics \ --namespace ${NAMESPACE} \ --dimensions Name=DBInstanceIdentifier,Value=${DBInstanceIdentifiers[@]} \ --metric-name ${METRIC_NAME} \ --statistics ${STATISTICS} \ --start-time ${STARTTIME} \ --end-time ${ENDTIME} \ --period $((60 * 60 * 24 * $DAYAGO)) \ --query "sort_by(Datapoints,&Timestamp)[][${STATISTICS}]" \ --output text >> connections-list.txt done
実行結果サンプル
[cloudshell-user@ip]$ cat connections-list.txt db-instance-identifier-01 10.0 db-instance-identifier-02 11.0 db-instance-identifier-03 0.0 db-instance-identifier-04 20.0 db-instance-identifier-05 34.0 db-instance-identifier-06 0.0 db-instance-identifier-07 546.0
結果は、RDS の各 DB Instance Identifier の下に、分析期間中の最大 DatabaseConnections 数が並ぶという簡素なつくりになっています。
上記結果だと db-instance-identifier-03
と db-instance-identifier-06
は 0.0 のため「60日間一度も DB コネクションがなかった」=不要な RDS と判断可能ということになります。
パラメータの説明
- DAYAGO は分析日数です。60だと60日間を分析します。分析に必要な日数に変更ください
- STATISTICS が Maximum になっているのは、最大コネクション数を取得する必要があるためです(最低や平均だと正しい分析になりません)
- connections-list.txt に結果を格納していますので、ダウンロードしてローカルに保存いただけます。ファイルへの出力が不要な場合はリダイレクト(>> connections-list.txt)を削除して実行ください
まとめ
本ブログでは Trusted Advisor の「Amazon RDS Idle DB Instances」における最大分析期間である14日間を超えて DB コネクションが行われていない RDS DB インスタンスを探し出すために AWS CLI が有効活用できるということを記載いたしました。
get-metric-statistics
は他にも最大 CPU 使用率などを分析するときにも役に立ちますので、使い方を覚えておくとコスト削減に役立ちます。
最後に公式ドキュメントをご紹介して終わりにしたいと思います。
では、またお会いしましょう。
佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ
マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023-2024 Japan AWS Top Engineers/2020-2024 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。