[AWS] Lambda + Cloudwatch Eventで時間になるとEC2をShutdownする方法

Lambda + Cloudwatch Eventで時間になるとEC2をShutdownする方法は以下の通り

インスタンスIDをハードコードした場合のLamdbaコード

import boto3
region = 'ap-northeast-1'
instances = ['インスタンスID']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.stop_instances(InstanceIds=instances)
    print('stopped your instances: ' + str(instances))

特定のTagのインスタンスIDリストを取得し、対象のインスタンス複数をShutdownするコード

import boto3
region = 'ap-northeast-1'
tag_key = 'タグキー'
tag_value = 'タグ値'

def lambda_handler(event, context):
    ec2 = boto3.client('ec2', region_name=region)
    
    # 停止対象のインスタンスIDリスト取得
    instanceIdStopList = getTgtList(ec2,tag_key,tag_value)
    if len(instanceIdStopList) != 0:
        # Shutdown
        ec2.stop_instances(InstanceIds=instanceIdStopList)

# Shutdownするec2インスタンスIDリストを取得
def getTgtList(ec2, tag_key, tag_value):
    query = [
        {'Name': 'tag-key', "Values": [tag_key]},
    ]
    describe_instances_result = ec2.describe_instances(Filters=query)['Reservations']
    tgtList = []
    for i in describe_instances_result:
        for tags in i['Instances'][0]['Tags']:
            if tag_key in tags['Key']:
                if tags['Value'].zfill(2) == tag_value:
                    instanceId = i['Instances'][0]["InstanceId"]
                    tgtList.append(i['Instances'][0]["InstanceId"])

    return(tgtList)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です