コスト削減のため長期間コネクションがない RDS を AWS CLI で探し出す

記事タイトルとURLをコピーする

f:id:swx-satake:20211118135953p:plain

営業部 佐竹です。
本日は RDS のコスト削減に関するブログとなります。

はじめに

以前、RDS のコスト削減手法の1つとして以下のブログを記載しました。

blog.serverworks.co.jp

上記ブログは、Trusted Advisor のコスト削減項目の1つである「長期間コネクションがない RDS」を 定期的に通知することが目的でした。

Trusted Advisor を利用するにあたっての懸念

ただ、Trusted Advisorの「Amazon RDS Idle DB Instances」項目には1つ懸念があります。

それは「最大14日間は RDS にコネクションがなかった」という分析に留まるということで、それ以上長期間の分析結果を出してくれません。

f:id:swx-satake:20211117184146p:plain
Amazon RDS Idle DB Instances は 14+ 表示が最大

実際にマネジメントコンソールから見ると上図の通りの表示となっており「14日以上使われていない」ことしかわかりません。

14日間の分析結果で十分だという方には問題ないのですが、お客様によっては「もっと長期間分析して判断したい」とされる場合も多い状況です。

このような場合、Trusted Advisor の機能では対応できません。分析結果を14日以上に設定するようなカスタム機能がないためです。

CloudWatch と AWS CLI を利用して調査を行う方法

AWS CLI を利用することで本懸念点を払拭することが可能です。

Amazon CloudWatch における CLI get-metric-statistics を利用すれば、対象 RDS の過去のコネクション履歴を分析が可能です。

さっそくですがコマンドです。以下を CloudShell から実行してください。

実行権限としては ReadOnlyAccess の権限があれば実行が可能です。

補足:ただし CloudShell は ReadOnlyAccess だけでは実行できませんので注意してください

blog.serverworks.co.jp

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-03db-instance-identifier-060.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 使用率などを分析するときにも役に立ちますので、使い方を覚えておくとコスト削減に役立ちます。

最後に公式ドキュメントをご紹介して終わりにしたいと思います。

docs.aws.amazon.com

では、またお会いしましょう。

佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ

営業部カスタマーサクセス課所属。AWS資格12冠。2010年1月からAWSを利用してきました。2021 Japan APN Ambassador /2020-2021 APN ALL AWS Certifications Engineer。AWSのコスト削減、最適化を得意としています。