はじめに
勉強も兼ね個人開発しているアプリをawsで公開しているのですが、AWSのEC2とRDSの料金が結構高い。
特にRDSは最低スペックでも確か2000円くらいかかってしまう。
とりあえず料金下げるため開発を行わない平日の昼間はRDSを停止する様にして、ちょっとでも節約したかったのでlambdaで自動的に
平日の昼間は停止する様にしました。
lambdaの言語に関してはRubyを使いました。
lambdaの作成
まずlambdaを作成します
作成したらlambdaの詳細の画面から
アクセス権限を表示して、実行ロールのロール名の部分をクリックします。
そしてポリシーのアタッチからRDSの権限を付与します。
権限に関しては調べるの面倒だったので自分はRDSのFullAccessを付与しました。
lambdaのコード
次にlambdaのコードの部分
に下記のコードを貼り付けます
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を実行する例です。
作成したら同じ様にcloudwatch eventsの
cronの部分を
cron(0 18 ? * MON-FRI *)
にして作成します。
これで平日の夜中から昼間は停止することができます。