【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

AWS Lambda で Amazon RDS を自動停止するスクリプトを作成したので解説します。

 

以下、過去に AWS Lambda を使用して EC2 インスタンスの自動停止・自動起動のスクリプトを作成した記事です。

 

【AWS】【Python】Lambda で EC2 インスタンスを起動・停止するプログラム&スケジュール化手順【2018年最新版】

 

【AWS】【Python】Lambda で RDS インスタンスを起動・停止するプログラム&スケジュール化手順【2017年最新版】

 

【AWS】【Python】Lambda で EC2 インスタンスを起動・停止するプログラム&スケジュール化手順【2017年最新版】

 

 

 

検証環境がある場合 AWS Lambda で Amazon RDS を管理した方がいい理由

検証用に Amazon RDS を使用していて、RDS の利用料金が高いので「ステータス」を以下のように「停止中」にしたとします。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

しかしここに落とし穴があります。

実は Amazon RDS は「停止中」にしていても 7 日間が経過すると自動的に Amazon RDS が起動します。(もちろん課金されます)

 

 

AWS 一時的に Amazon RDS DB インスタンスを停止する

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_StopInstance.html

 

【AWS】RDS(Amazon Relational Database Service)はインスタンスを停止しても7日間後(8日後)に自動的に起動するので注意【料金が発生する】

 

 

【AWS】RDS(Amazon Relational Database Service)はインスタンスを停止しても7日間後(8日後)に自動的に起動するので注意【料金が発生する】

 

 

そのため、もし検証環境で Amazon RDS を使用しており、且つ検証しない時は停止しておきたい場合は、AWS Lambda で定期的に停止処理を繰り返し行うようにしましょう。

相当なコスト削減が期待できます。

 

 

 

Lambda で Amazon RDS を自動停止するスクリプトの作成

AWS 管理コンソールにログインします。

 

「サービス」「コンピューティング」「Lambda」をクリックします。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

 

 

右側にある「関数の作成」ボタンをクリックします。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

 

 

「基本的な情報」画面で、以下のように設定します。

  • 関数名 ← 分かりやすい名前を設定します。
  • ランタイム ← Python 3.6 を選択します。
  • 実行ロール ← 以前 AWS Lambda 用に作成した既存のロールを使用するため、既存のロール を使用するを選択します。
  • 既存のロール ← 以前 AWS Lambda 用に作成した既存のロール Lambda_basic_execution を選択します。

設定が完了したら「関数の作成」ボタンをクリックします。

 

 

 

 

 

関数を作成すると下図のような画面が表示されるので、「テスト」ボタンをクリックします。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

 

 

「テストイベントの設定」画面で、以下のように設定します。

  • 新しいテストイベントの作成 ← チェックを入れます。
  • イベントテンプレート ← Hello World を選択します。
  • イベント名 ← 分かりやすい名前を入力します。

設定を完了したら「作成」ボタンをクリックします。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

 

 

 

左側ペインの「トリガーの追加」より「CloudWatch Events」を選択して追加します。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

 

 

下図のような「トリガーの設定」画面が表示されたら、以下のようにトリガーのルールを設定します。

  • ルール ← 新規ルールの作成 を選択します。
  • ルール名 ← 分かりやすい名前を付けます。
  • ルールタイプ ← スケジュール式 を選択します。
  • スケジュール式 ← cron の形式でスケジュールを入力します。(時刻は UTC になるので注意)
  • トリガーの有効化 ← チェックを入れます。

設定が完了したら「追加」ボタンをクリックします。

 

 

 

 

次に「Stop_RDS_Instances」を選択します。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

 

 

 

lambda_function に以下のようにプログラムを入力し「保存」ボタンをクリックします。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

 

■プログラム

import boto3 
 
# RDSインスタンス一覧 
rds_ids = [ 
    ‘testdb’     # testdb 
    ] 
 
def lambda_handler(event, context): 
 
    # RDS インスタンスの処理 
    rds = boto3.client(‘rds’) 
 
    # リストの要素が0の場合は終了 
    if len(rds_ids) == 0: 
        print(‘対象RDSインスタンスがありません。’) 
    else: 
        for i in rds_ids: 
            # RDSを起動する前にすでに起動しているかどうか確認する。 
            response = rds.describe_db_instances(DBInstanceIdentifier=i) 
            rds_status = response[“DBInstances”][0][“DBInstanceStatus”] 
            print(rds_status) 
 
            # ステータスが「stopped」の場合             if rds_status == “stopped”: 
                print(‘既に RDS インスタンスが停止しています。:’ + str(i)) 
            elif rds_status == “available”: 
                # string 形式で RDS 受け取る 
                rds.stop_db_instance(DBInstanceIdentifier=i) 
                print(‘RDSインスタンスを停止しました。:’ + str(i)) 
            else: 
                # available や stopped 以外の場合 
                print(‘ステータスが変更途中です。:’ + str(i)) 
                 
    return ‘RDSインスタンスの停止処理を完了しています。’

 

 

プログラムは以下で詳細に解説しています。

 

【AWS】【Python】Lambda で RDS インスタンスを起動・停止するプログラム&スケジュール化手順【2017年最新版】

 

 

 

Lambda 関数の動作確認

Lambda 関数を設定したら動作確認をします。

「テスト」ボタンをクリックします。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

 

 

下図のように「実行結果:成功」が表示されることを確認します。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

 

下図のように対象の RDS インスタンスが停止していることを確認します。

【AWS】【Lambda】Lambda で Amazon RDS を自動停止するスクリプトの作成【2019年版】

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください