[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)