AWS UD Cloudパッケージ

お問い合わせ

RDS を定期的に止める

2020年3月6日

ビジネスデベロップメントDiv.のテクニカルSec.高橋です。
 

突然ですが、RDSはEC2と違ってインスタンスを止めても勝手に起動してきてしまいますよね。。。

マネージドサービスだからAWSとしては課金できないと無駄なリソースになってしまうからということでしょうか。そもそもデータベースは常時起動が前提なので、止める必要性がないんでしょうね。

弊社は、AWSを利用したいと考えていらっしゃるユーザー様のために、積極的にセミナーを開催しています。最近だと、2月5日にグランフロントで開催して盛況をいただきました。まだ参加されたことがない方は是非足をお運びください!

セミナーとか、展示会の出展用にデモ環境を作ったりしますが、例えば、ひと月前に作ったとして、1ヶ月間起動し続けるのはもったいないので、停止しておきます。ですが、RDSは最大 7 日しか止めれません。7 日経つと勝手に起動してきます。

DB インスタンスの停止

手動停止は大変…自動で停止させたい!

そこで、Lambda と CloudWatch Eventsを使って自動で止めるようにしてみました。コードは、Python 3.7です。

import boto3
import os

def lambda_handler(event, context):
    client = boto3.client('rds')
    db_name = os.environ['db_name']

    response = client.describe_db_instances(
        DBInstanceIdentifier = db_name
        )
    response = response['DBInstances'][0]['DBInstanceStatus']

    # RDS インスタンスの状態
    print (response)

    if response == 'available':
        response = client.stop_db_instance(
        DBInstanceIdentifier='redmine-database'
    )
    else:
        response = 'not running...'

    print (response)
    return

環境変数にデータベース名を入力したデータベースを停止できます。

Lambda 環境変数

Lambdaの権限設定

Lambdaを実行させるロールは、以下がオススメです。通常のLambda Basic Excutionと別でインラインポリシーを追加してください。

  • DescriveDBInstances(RDSの状態読み取り用)
  • StartDBInstance(任意。RDSを起動する場合のみ追加)
  • StopDBInstance(RDSの停止用)

動作確認

早速、動かしてみます!RDSのインスタンスは「利用可能」になっているので、

Lambdaのテストボタンをクリックして実行してみます。

「テスト」ボタンをクリック

はい!成功しました。

一部マスクと加工を入れてます

RDSの画面に移動すると、データベースが「停止中」に変わりました。

次回は、CloudWatch Eventsのcron設定で自動停止させる方法を書きたいと思います。

ページ上部へ戻る

カテゴリー

タグ