AWSは何にコストがかかるかって言ったら、そらもう(RDSが群を抜いて)あれ(かかる)よ。便利やからね。はっきりわかんだね。
せやけどね、検証環境や開発環境は一年中稼働してる必要はないわけやから、時間を決めてね、止めておきたい。
というわけでね、Lambda使ってね、やってみるで。
まずRoleを作る。
まず、lambda.amazonaws.comが信頼されたエンティティやね。
ほんで、ポリシーとしては、次が必要かな。
- rds:StartDBCluster
- rds:StopDBCluster
- rds:DescribeDBClusters
本番止めてしまったら、そんなもん、オマエ…。
と言うわけで、リソースにはちゃんと対象のARNを指定しておくとええね。
そしたら、Lambda作るで。ランタイムはPython3.8で、実行ロールにはさっき作ったロールを指定する。ちな、RDSはAuroraや。
import boto3
def lambda_handler(event, context):
client = boto3.client('rds')
response = client.describe_db_clusters(DBClusterIdentifier=くらすたーの識別子)
for DBCluster in response['DBClusters']:
if DBCluster['Status'] == "available":
client.stop_db_cluster(DBClusterIdentifier=くらすたーの識別子)
これは止める方。次、動かす方や。
import boto3
def lambda_handler(event, context):
client = boto3.client('rds')
response = client.describe_db_clusters(DBClusterIdentifier=くらすたーの識別子)
for DBCluster in response['DBClusters']:
if DBCluster['Status'] == "stopped":
client.start_db_cluster(DBClusterIdentifier=くらすたーの識別子)
これだけやね。あとは、それぞれの関数のトリガーにイベントを設定する。今は、「EventBridge (CloudWatch Events)」になっとるんやね。
ルールタイプをスケジュール式にしたときの設定方法は正直意味わからんので、https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.htmlを参照するんやで。
これで、好きなタイミングでRDSを止めたり動かしたりできる。最高や。