RDSを定期的に停止するLambdaを作る
AWSのコスト削減のために利用頻度の低いサービスを停止しておきたいことがある。
ただ、RDSの場合は最大7日間しか停止できない仕様となっている。
DB インスタンスは最大 7 日間停止できます。7 日後に DB インスタンスを手動で起動しなかった場合、DB インスタンスは自動的に起動されるため、必要なメンテナンス更新が遅れることはありません。
この仕様に自動で対応するため下記記事を参考にさせていただき、RDSを停止するLambdaと定期的にLambdaを実行するEventBridgeの設定を行った。
[[Amazon RDS]起動停止をスケジュール実行してみた | DevelopersIO](https://dev.classmethod.jp/articles/rds-auto-stop-start/)
Lambdaの作成
参考記事では最新のboto3を別途インストールする必要があると書かれていたが、現在はデフォルトのboto3でもエラーなく実行できた。
import boto3
client = boto3.client('rds')
def lambda_handler(event, context):
try:
response = client.stop_db_instance(DBInstanceIdentifier=event["DBInstanceIdentifier"])
print(response)
except Exception as e:
print(e)
Lambda用IAMロール設定
停止させたいRDSのarnに対して rds:StopDBInstance
を許可する設定を追加。
{
"Effect": "Allow",
"Action": [
"rds:StopDBInstance"
],
"Resource": "arn:aws:rds:xxxx"
}
EventBridgeの作成
- 1日1回Lambdaを実行するように設定
5 0 * * ? *
- 定数(JSONテキスト)に↓のjsonを設定する
{"DBInstanceIdentifier":"somerds"}
これで手動で都度RDSの停止作業を実施しなくても自動停止されるようになった。