こんにちは!Tamaです!
今回は2017年6月より使用可能になったRDSの停止機能を使ってDBインスタンスを起動・停止するLambda関数を作成したいと思います。
Lambda環境で使用されるAWS SDKのバージョンが上がったことで最新のモジュールをインストールする必要なくRDSの起動停止が利用できるようになりました。
AWS SDKのバージョン確認方法ですが以下のレシピで紹介しています。
AWS Lambdaで使用されるモジュールバージョンの調べ方
Lambda関数の作成
まずは起動用のLambda関数を作成します。
「関数の作成」をクリックします。
設計図の選択では「一から作成」を選択します。
名前と説明を入力します。
今回はPython3.6で実装を行います。
RDS起動のLambda関数のPythonコードは以下になります。
testdbには指定のDBインスタンス識別子を入力します。
1 2 3 4 5 6 7 8 |
import boto3 def lambda_handler(event, context): dbinstance = 'testdb' #対象のDBインスタンス識別子 rds = boto3.client('rds') result = rds.start_db_instance(DBInstanceIdentifier = dbinstance) #start RDS print(result) return 0 |
ロールは以下のCloudWatchLogsとRDSの起動、停止権限を含んだポリシーを持ったもので実行可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "rds:StartDBInstance", "rds:StopDBInstance" ], "Effect": "Allow", "Resource": "*" } ] } |
次へ進み内容を確認語「関数の作成」を選択します。
これでRDS起動用のLambda functionが作成できました。
停止中のRDSを起動してみます。
テストをクリックし関数を実行、無事成功しました!
RDSのコンソールからも確認してみます。
ステータスが起動中になり、しばらくすると利用可能に遷移しました!
イベントにもログが残っています。
停止の場合のPythonコードは以下になります。
1 2 3 4 5 6 7 8 |
import boto3 def lambda_handler(event, context): dbinstance = 'testdb' #対象のDBインスタンス識別子 rds = boto3.client('rds') result = rds.stop_db_instance(DBInstanceIdentifier = dbinstance) #stop RDS print(result) return 0 |
トリガーにCloudWatch Eventsを指定することでスケジュール起動停止が可能です。
1週間のスケジュールであれば問題ありませんがRDSの停止は7日をすぎると自動で起動してしまうので注意が必要です。
今回は以上になります!
お疲れさまでした!
またお会いしましょう!