AWS Auroraを継続的に停止させる方法

AWS
この記事は約4分で読めます。

こんにちは、@Manabu です。

AWS Auroraは高性能かつスケーラブルなマネージド型DBサービスですが、「使っていないが削除したくない」というケースも多いのではないでしょうか。

以前、そのような問い合わせをいただき対応させていただいたので、方法を記事として残しておきます。

はじめに

Auroraの公式ドキュメントには以下のように記載されています。

DB クラスターは最大 7 日間停止できます。7 日後に DB クラスターを手動で起動しなかった場合、DB クラスターは自動的に起動されるため、必要なメンテナンス更新が遅れることはありません。
Amazon Aurora DB クラスターの停止と開始 - Amazon Aurora
Amazon Aurora クラスターで一度にすべての DB インスタンスを停止し、開始します。

そのため、永続的に停止させたい場合は、定期的に停止処理を行う必要があります。起動されたとしても、すぐに止め直すことで余計な料金の発生を防ぐことができます。

実装構成

Auroraを停止させるためのAWS構成は以下のようなイメージです。

・EventBridge:定期的にLambdaを実行させる
・Lambda:Auroraクラスターの状態を確認し、稼働中であれば停止する

実装手順

以下の手順でLambdaとEventBridgeの実装を行います。

Lambda関数の作成

Lambda関数の作成方法については、これまで紹介してきているので、以下を参考にして下さい。

AWS Lambdaを活用してEC2上のApacheを再起動してみた!
AWSの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をトリガーに設定します。

方法は、以下の記事を参考にして下さい。

AWS EventBridgeを使ってLambda関数をスケジュール実行してみた!
以前、Twitter APIでPHPからポストを投稿する方法について記事にまとめました。 今回は、その処理をスケジュールで定期的に実行させる方法を考えました。 EC2内でコマンドを実行させるLambda関数を、EventsBridgeで実行

7日間で再起動されてしまうため週一に設定しようと思いますが、停止していないタイミングでLambdaが起動してしまった場合に、何も実行されずその後に再起動されてから次回実行時まで起動してしまうことが考えられます

実行時間が短いことからコストのことも考える必要がないため、毎時間ぐらいの短い周期で設定するのが効果的です。

まとめ

今回は、Auroraクラスターの継続的な停止機能の実装についてまとめました。

コスト的にも復活的にも効果的な対応だと思うので、実施する場合は参考にしてください。