0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RDSをlambdaで定期的に停止を開始を行う

Last updated at Posted at 2020-08-22

はじめに

勉強も兼ね個人開発しているアプリをawsで公開しているのですが、AWSのEC2とRDSの料金が結構高い。
特にRDSは最低スペックでも確か2000円くらいかかってしまう。

とりあえず料金下げるため開発を行わない平日の昼間はRDSを停止する様にして、ちょっとでも節約したかったのでlambdaで自動的に
平日の昼間は停止する様にしました。

lambdaの言語に関してはRubyを使いました。

lambdaの作成

まずlambdaを作成します

スクリーンショット 2020-08-22 19.05.34.png

作成したらlambdaの詳細の画面から

アクセス権限を表示して、実行ロールのロール名の部分をクリックします。

そしてポリシーのアタッチからRDSの権限を付与します。

権限に関しては調べるの面倒だったので自分はRDSのFullAccessを付与しました。

lambdaのコード

次にlambdaのコードの部分

スクリーンショット 2020-08-22 19.10.45.png

に下記のコードを貼り付けます


require 'json'
require 'aws-sdk'

def lambda_handler(event:, context:)
    ENV['TZ'] = 'Asia/Tokyo'
    
    client = Aws::RDS::Client.new(
        region: 'ap-northeast-1'
    )

    current_time = Time.now
    p "現在の時刻は #{current_time.strftime('%H時%M分')}"
    
    if current_time.hour == 18
        p '現在は夕方なのでRDSを起動します。'
        resp = client.start_db_instance({
          db_instance_identifier: "sb-develop"
        })
        p '起動完了'
    else
        p '就寝時間なのでRDSを終了します。'
        resp = client.stop_db_instance({
          db_instance_identifier: "sb-develop"
        })
        p '一時停止完了'
    end
    
end

Aws::RDS::Client のインスタンスを作成して

stop_db_instance、start_db_instanceで起動、停止ができます。

他にもいろいろできます=>https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/RDS/Client.html

lambdaのスケジュールを設定

スケジュールに関しては EventBridge (CloudWatch Events) で行えます。

トリガーの追加から EventBridge (CloudWatch Events) を選択して作成します。

今回は平日の夕方6時に起動して、平日の夜中0時に停止する形で

これ↓が平日の夜中0時にlambdaを実行する例です。

スクリーンショット 2020-08-22 19.17.23.png

作成したら同じ様にcloudwatch eventsの
cronの部分を

cron(0 18 ? * MON-FRI *)

にして作成します。

これで平日の夜中から昼間は停止することができます。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?