自動起動
iam role作成
AWSコンソールへログイン
https://console.aws.amazon.com/iamv2
左ペインロール押下
ロールを作成押下
一般的なユースケース:lambda
ポリシー:AmazonRDSFullAccess
ロール名:control-rds
作成
lambda関数作成
https://console.aws.amazon.com/lambda
関数の作成押下
関数名:start-rds
ランタイム:python3.9
デフォルトの実行ロールの変更
既存のロールを使用する:control-rds
関数の作成
以下コード入れる
import boto3
rds = boto3.client('rds')
def get_tags_for_db(db):
"""
get instance list
"""
instance_arn = db['DBInstanceArn']
instance_tags = rds.list_tags_for_resource(ResourceName=instance_arn)
return instance_tags['TagList']
def start_db_instances(target_tag):
"""
start instances
"""
try:
dbs = rds.describe_db_instances()
except Exception as e:
print(e)
return { 'status': 2 }
for db in dbs['DBInstances']:
db_tags = get_tags_for_db(db)
tag = next(iter(filter(lambda tag: tag['Key'] == target_tag and tag['Value'] == 'true', db_tags)), None)
if tag and db['DBInstanceStatus'] == 'stopped':
response = rds.start_db_instance(DBInstanceIdentifier=db["DBInstanceIdentifier"])
print(db['DBInstanceIdentifier'])
def lambda_handler(event, context):
target_tag = "autostart"
start_db_instances(target_tag)
return { 'status': 0 }
rdsへのタグ付け
対象のrdsへ以下タグ付ける
kye:autostart
value:true
起動したくないときはvalueをfalseへ変更
lambdaのテスト
test押下
新しいテストイベントの作成
イベントテンプレート:そのまま
イベント名:適当に
作成
test押下
ちゃんと動くか確認
EventBridge
+トリガーの追加
トリガーの選択
EventBridge
新規ルールの作成
ルール名:auto-start-rds
ルールタイプ
スケジュール式
cron(0 23 ? * SUN-THU *) #平日の朝8時起動
自動停止
lambda関数作成
https://console.aws.amazon.com/lambda
関数の作成押下
関数名:stop-rds
ランタイム:python3.9
デフォルトの実行ロールの変更
既存のロールを使用する:control-rds
関数の作成
以下コード入れる
import boto3
rds = boto3.client('rds')
def get_tags_for_db(db):
"""
get instance list
"""
instance_arn = db['DBInstanceArn']
instance_tags = rds.list_tags_for_resource(ResourceName=instance_arn)
return instance_tags['TagList']
def stop_db_instances(target_tag):
"""
stop instances
"""
try:
dbs = rds.describe_db_instances()
except Exception as e:
print(e)
return { 'status': 2 }
for db in dbs['DBInstances']:
db_tags = get_tags_for_db(db)
tag = next(iter(filter(lambda tag: tag['Key'] == target_tag and tag['Value'] == 'true', db_tags)), None)
if tag and db['DBInstanceStatus'] == 'available':
response = rds.stop_db_instance(DBInstanceIdentifier=db["DBInstanceIdentifier"])
print(db['DBInstanceIdentifier'])
def lambda_handler(event, context):
target_tag = "autostop"
stop_db_instances(target_tag)
return { 'status': 0 }
rdsへのタグ付け
対象のrdsへ以下タグ付ける
kye:autostop
value:true
停止したくないときはvalueをfalseへ変更
lambdaのテスト
test押下
新しいテストイベントの作成
イベントテンプレート:そのまま
イベント名:適当に
作成
test押下
ちゃんと動くか確認
EventBridge
+トリガーの追加
トリガーの選択
EventBridge
新規ルールの作成
ルール名:auto-stop-rds
ルールタイプ
スケジュール式
cron(0 13 ? * MON-FRI *) #平日の22時停止