こんにちは、@Manabu です。
AWS Auroraは高性能かつスケーラブルなマネージド型DBサービスですが、「使っていないが削除したくない」というケースも多いのではないでしょうか。
以前、そのような問い合わせをいただき対応させていただいたので、方法を記事として残しておきます。
はじめに
Auroraの公式ドキュメントには以下のように記載されています。
そのため、永続的に停止させたい場合は、定期的に停止処理を行う必要があります。起動されたとしても、すぐに止め直すことで余計な料金の発生を防ぐことができます。
実装構成
Auroraを停止させるためのAWS構成は以下のようなイメージです。
・EventBridge:定期的にLambdaを実行させる
・Lambda:Auroraクラスターの状態を確認し、稼働中であれば停止する

実装手順
以下の手順でLambdaとEventBridgeの実装を行います。
Lambda関数の作成
Lambda関数の作成方法については、これまで紹介してきているので、以下を参考にして下さい。

Lambdaに付与する権限
今回はテストで行ったため、RDSへのFullアクセス権限を付与しています。
本来はRDSへのステータス確認とストップのための権限があれば十分かと思います。
Pythonコード
関数の作成ができたら、Pythonのコードをデプロイしてテストします。
import boto3
def lambda_handler(event, context):
cluster_id = 'db-cluster-id' # 対象のクラスターID
rds = boto3.client('rds')
try:
response = rds.describe_db_clusters(DBClusterIdentifier=cluster_id)
status = response['DBClusters'][0]['Status']
print(f"Current status: {status}")
if status == 'available':
rds.stop_db_cluster(DBClusterIdentifier=cluster_id)
print(f"Stopped DB cluster: {cluster_id}")
else:
print(f"DB cluster '{cluster_id}' is already stopped or in a non-stoppable state.")
except Exception as e:
print(f"Error: {str(e)}")
こちらを実行することで、RDSがすでに停止中の場合は何もせず、起動中であれば停止を実行することができます。
EventsBridgeをトリガーに設定
定期実行させるために、EventsBridgeをトリガーに設定します。
方法は、以下の記事を参考にして下さい。

7日間で再起動されてしまうため週一に設定しようと思いますが、停止していないタイミングでLambdaが起動してしまった場合に、何も実行されずその後に再起動されてから次回実行時まで起動してしまうことが考えられます。
実行時間が短いことからコストのことも考える必要がないため、毎時間ぐらいの短い周期で設定するのが効果的です。
まとめ
今回は、Auroraクラスターの継続的な停止機能の実装についてまとめました。
コスト的にも復活的にも効果的な対応だと思うので、実施する場合は参考にしてください。
