LoginSignup
0
0

More than 1 year has passed since last update.

Lambdaでrds自動起動停止

Posted at

自動起動

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時停止

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0