AWS Lambda+Python3でRDS起動・停止を自動化

aws python rds

リンクバル技術部の川畑です。以前こちらの記事(AWS Lambda+Python3でEC2起動・停止を自動化)をご紹介させて頂きましたが、同様にLambdaの「python3」と「Environment variables」に対応したRDS起動・停止スクリプトを作成しましたので、こちらでもご紹介させて頂きます。

スクリプト説明

起動・停止の機能は理解のしやすさを考慮し、ファイルを別々にしてあります。スクリプトからAWSを操作するために「botocore」「boto3」、Lambdaに設定した環境変数を読み込むため「os」パッケージをimportします。Lambdaで環境変数「TAG_NAME」を設定し、タグを設定すると一致したRDSが処理対象となり、起動・停止処理を実行する仕組みとなります。

使用言語

  • python3.6

RDS起動スクリプト

RDS停止スクリプト

GitHubリポジトリはこちら

AWS Lambda設定手順

次にAWS Lambdaの設定に移ります。AWS Lambdaに関数を登録したり、上記で準備したファイルをアップロードしたりする必要があります。以下はRDSをAWS Lambdaから自動起動する手順となります。

1.スクリプトの準備

  • AWS Lambdaにアップロードするファイルの準備
git clone https://github.com/makaaso/lambda-rds-operation.git
cd lambda-rds-operation
pip install botocore -t ./ --upgrade
pip install boto3 -t ./ --upgrade
zip -r ../lambda-rds-operation.zip .

2.AWSコンソールにログイン

  • AWSコンソールのLambda画面で「Functions」を選択し、「Create function」を選択

AWS Lambda

3.python3ファンクションの検索

  • Blueprints下のフィルタに「python3」を入力して検索

AWS Lambda

4.python3ファンクションの選択

  • 検索結果から「hello-world-python3」を選択

Lambda Python3

5.functionの作成

  • Nameは適宜入力
  • Roleは作成済みであることを想定しております(※lambdaロール未作成の場合は、適切な権限を付与して作成)
  • Existing roleで適切なLambdaロールを選択
  • すべて入力したら「Create function」を選択

lambda rds

6.スクリプトのアップロードと設定

  • Code entry typeで「Upload a .ZIP file」を選択して、zipファイルをアップロード
  • HandlerはRDS起動の場合は「lambda-rds-start.lambda_handler」、RDS停止の場合は「lambda-rds-stop.lambda_handler」と入力
  • Environment variablesで、key「TAG_NAME」、valueにタグ名を入力

lambda settign

7.トリガの設定

  • 「Trigger」を選択して「Add Trigger」を選択

Lambda Trigger

8.トリガの追加

  • 「CloudWatch Event」を選択

lambda trigger

9.CloudWatch Eventの設定

  • Rule nameは適宜設定
  • Rule typeは「Schedule expression」を設定
  • 「Schedule expression」の値はcronフォーマットで設定(※時間はUTC)

Lambda RDS

10.functionの保存

  • 「Save」を選択して登録完了

RDSが停止できるようになり、開発系のRDSはスケジュールで起動・停止できるようになりましたので、こちらで紹介させて頂きましたスクリプトは結構使いどころがあるのかな思います。今後はLambdaのデプロイについてapexを使って簡易化できないか検討したいと思います。

リンクバルに興味がある方は こちら ご覧ください。