リンクバル技術部の川畑です。以前こちらの記事(AWS Lambda+Python3でEC2起動・停止を自動化)をご紹介させて頂きましたが、同様にLambdaの「python3」と「Environment variables」に対応したRDS起動・停止スクリプトを作成しましたので、こちらでもご紹介させて頂きます。
目次
スクリプト説明
起動・停止の機能は理解のしやすさを考慮し、ファイルを別々にしてあります。スクリプトからAWSを操作するために「botocore」「boto3」、Lambdaに設定した環境変数を読み込むため「os」パッケージをimportします。Lambdaで環境変数「TAG_NAME」を設定し、タグを設定すると一致したRDSが処理対象となり、起動・停止処理を実行する仕組みとなります。
使用言語
- python3.6
RDS起動スクリプト
RDS停止スクリプト
AWS Lambda設定手順
次にAWS Lambdaの設定に移ります。AWS Lambdaに関数を登録したり、上記で準備したファイルをアップロードしたりする必要があります。以下はRDSをAWS Lambdaから自動起動する手順となります。
1.スクリプトの準備
- AWS Lambdaにアップロードするファイルの準備
[bash]
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 .
[/bash]
cd lambda-rds-operation
pip install botocore -t ./ –upgrade
pip install boto3 -t ./ –upgrade
zip -r ../lambda-rds-operation.zip .
[/bash]
2.AWSコンソールにログイン
- AWSコンソールのLambda画面で「Functions」を選択し、「Create function」を選択
3.python3ファンクションの検索
- Blueprints下のフィルタに「python3」を入力して検索
4.python3ファンクションの選択
- 検索結果から「hello-world-python3」を選択
5.functionの作成
- Nameは適宜入力
- Roleは作成済みであることを想定しております(※lambdaロール未作成の場合は、適切な権限を付与して作成)
- Existing roleで適切なLambdaロールを選択
- すべて入力したら「Create function」を選択
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にタグ名を入力
7.トリガの設定
- 「Trigger」を選択して「Add Trigger」を選択
8.トリガの追加
- 「CloudWatch Event」を選択
9.CloudWatch Eventの設定
- Rule nameは適宜設定
- Rule typeは「Schedule expression」を設定
- 「Schedule expression」の値はcronフォーマットで設定(※時間はUTC)
10.functionの保存
- 「Save」を選択して登録完了
RDSが停止できるようになり、開発系のRDSはスケジュールで起動・停止できるようになりましたので、こちらで紹介させて頂きましたスクリプトは結構使いどころがあるのかな思います。今後はLambdaのデプロイについてapexを使って簡易化できないか検討したいと思います。
リンクバルに興味がある方は こちら ご覧ください。