[AWS] Lambda를 사용하여 EC2 인스턴스 자동 stop하기

jeonghyun yu·2024년 7월 30일

AWS

목록 보기
2/4

IAM

Policy 생성

내용이 다른 이유는? 수정했음

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:StartInstances",
                "ec2:DescribeTags",
                "logs:*",
                "ec2:DescribeInstanceTypes",
                "ec2:StopInstances",
                "ec2:DescribeInstanceStatus"
            ],
			"Resource": "*"
		}
	]
}

EC2에 접근할 수 있는 권한 생성

Role 생성

생성한 정책을 선택하여 역할 생성

Lambda

함수 생성

기존 역할 사용하여 lambda 함수 생성

코드 작성

import boto3

region = 'ap-northeast-2'
ec2 = boto3.resource('ec2', region_name=region)

def lambda_handler(event, context):
    # Get running instance list with tag AutoSchedule=True
    # instance-state-name : ( pending | running | shutting-down | terminated | stopping | stopped )
    instances = ec2.instances.filter(Filters=[
        {
            'Name': 'instance-state-name', 
            'Values': ['running']
        }
        ,{
            'Name': 'tag:AutoSchedule',
            'Values':['True']
        }
    ])
    
    # Stop instance
    for instance in instances:
        id=instance.id
        # ec2.instances.filter(InstanceIds=[id]).start()
        ec2.instances.filter(InstanceIds=[id]).stop()
        print('Instance ID is stopped :- '+instance.id)
        
    return 'success'

테스트

인스턴스 중지 중이면 성공

EventBridge

이제 시간 설정을 해보자!

일정에 따라 실행해야 cron식을 사용해서 설정할 수 있다!

패턴 설정

매일 야근자도 퇴근했으면 좋겠는 21시에 실행되도록 설정

대상은 lambda

시간을 가까운 시간으로 바꿔서 테스트 진행해보자 잘 실행된다!

0개의 댓글