LoginSignup
5
3

More than 1 year has passed since last update.

【AWS】RDS自動停止設定を行ってみた

Posted at

【AWS】RDS自動停止設定を行ってみた

はじめに

インフラ環境の運用を行っているマエザトです。
こちらの記事はAWSで管理している社内環境でのお話となります。

AWSサービスは起動していると課金される仕組みが多く、
EC2(サーバー)は必要な際に起動停止を行って費用を抑えておりましたが、
RDS(DB)に関しては使用していない時に停止を行っても7日後には
自動起動してしまうという仕様※となっており、困っていました。
ネット記事を参考にRDSの自動停止設定を行ってみることにしました。

※RDSの停止と自動起動について
https://aws.amazon.com/jp/about-aws/whats-new/2017/06/amazon-rds-supports-stopping-and-starting-of-database-instances/

環境

■操作環境
OS:Windows 10 Pro(64bit)

■使用プラットフォーム
Amazon AWS

■使用サービス
IAM
CloudWatch Events
Lambda

手順

1.IAMによる権限の作成

自動停止を行うに対して、まずは権限設定をIAMにて設定します。

検索窓よりIAMと検索してIAMを立ち上げます。
image.png

左メニューからロールを選択して、ロールの作成を押します。
image.png

AWSサービス、Lambdaを選択して次へ
image.png

アクセス権限ポリシーはデフォルトにある下記を選択して次へ
AmazonRDSFullAccess
AmazonEC2FullAccess
CloudWatchLogsFullAccess
image.png

タグは今回は特別設定せず、次へ
image.png

ロール名を任意に決め、ポリシーがきちんと選択されている事を確認し、ロールの作成ボタンにてロール作成が完了です。
image.png

2.Lambdaの設定

検索窓よりLambdaと検索してLambdaを立ち上げます。
image.png

関数の作成ボタンからlambdaの設定画面に移行します。
下記の内容で変更していきます。
・関数名
 任意の名前

・ランタイム
 Python 3.6

・ロール
 既存のロールを使用する

・アーキテクチャ
 x86_64

・既存のロール
 1で作成したロール

image.png

関数が作成できたら、トリガーを追加する。
image.png

EventBridge(CloudWatch Events)を選択し、下記の内容で設定していく。
・ルール
 新規ルールの作成

・ルール名
 任意の名前

・ルールタイプ
 スケジュール式

・スケジュール式
 cron(0 19 * * ? *)
※こちらでは毎日朝04時に停止で設定しております。

image.png

cron設定について

cron設定を行う際に書式や設定方法について簡単に調べたので記載します。
Cron式は
cron([分],[時],[日],[月],[曜日],[年])という形式で記載となっております。

記載する値の範囲
項目 記載内容
0~59
0~23
1~31
1-12 または JAN-DEC
曜日 1 - 7 または SUN - SAT
1970-2199
記載方法と設定例

cron式はUTC(協定世界時)での値を入力しないといけないため、
JST(日本標準時)の時間で設定する際はUTCに時間を変換しなければならない。
変換は下記サイトで簡単に行えます。
https://www.jisakeisan.com/

最後に時間の設定例を記載します。

例1 毎日午後 18:00 (JST) に実行
cron(0 9 * * ? *)

例2 15分ごとに実行
cron(0/15 * * * ? *)

例3 毎週月曜日から金曜日まで午後 13:00 (JST) に実行
cron(0 4 * * MON-FRI *)

3.Lambdaスクリプトの作成

最後にLambdaスクリプトを記述します。
コードを記載したらDeployボタンを押し、Change deployedボタンを押します。
こちらで終了となります。
image.png

■スクリプト記載例
3行目の'止めたいDB名'は各自で変更ください。

import boto3            

region = 'ap-northeast-1'           

instance = '止めたいDB名'          
def lambda_handler(event, context):         
    rds = boto3.client('rds', region_name=region)           
    rds.stop_db_instance(DBInstanceIdentifier=instance)         
    print('stoped instance: ' + instance)

おわりに

対象のRDSの1ヶ月常時起動の金額が約18500円
1日の起動が616円となっておりました。

今回が月1回しか使用しない運用であったため、
設定適用してからは最低でも15000円の無駄なコスト削減ができました。
(7日間に一回の自動起動から自動停止までのタイムラグ含む)

AWSを触る機会が少ない中、ネットを参考に行いましたが、
簡単に設定することが出来ましたので、皆さんも是非参考に設定してみてください。

参考資料

下記サイト様をご参考にさせていただきました。
サイト名:[AWS]Lambda で RDS の自動起動・自動停止を実装する
https://www.t3a.jp/blog/infrastructure/rds-auto-start-stop/

5
3
0

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
5
3