[AWS] EC2 인스턴스 자동 중지 설정

Denver·2023년 1월 8일
0

AWS

목록 보기
3/3
post-thumbnail

이미지 by 다락원


0. 배경

aws 결제 대시보드에 갔더니 이용 요금이 생각보다 많이 나와있었다.
테스트용 인스턴스 종료하는 것을 깜박했나보다..
사용한만큼 과금되는거는 괜찮은데 이렇게 안썼는데 돈 나가는건 너무 아깝다ㅜㅜ
다음 소를 잃지않기 위해 외양간을 고쳐본다.


1. 설정하기

1) 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": "*"
        }
    ]
}

2) Role 생성

target은 Lambda, 1) 에서 생성한 policy로 Role을 생성한다

3) Lambda 생성

runtime : python
실행 역할 : 기존 역할 선택 -> 2) 에서 만든 Role 선택

import boto3

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

def lambda_handler(event, context):
    # Get running instance list with tag AutoStop=True
    # instance-state-name : ( pending | running | shutting-down | terminated | stopping | stopped )
    instances = ec2.instances.filter(Filters=[
        {
            'Name': 'instance-state-name', 
            'Values': ['running']
        }
        ,{
            'Name': 'tag:AutoStop',
            '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'

4) EventBridge 설정

규칙 세부 정보 정의

EventBridge 규칙 생성 -> 규칙일정 -> 일정 선택

일정 정의

cron 패턴 정의 표시 시간이 UTC인지 현지시간인지 확인

대상 선택

3) 에서 만든 Lambda 생선택

EventBrige 시간을 바꿔서 테스트해봤다.
EC2 대시보드에서 확인하니 종료되었고
CloudWatch Log 확인해보면 test 로그와 동일하게 남겨져있다.

테스트했으니 시간 다시 01시로 맞춰놓기!

외양간 고치기 끝 🐮🐮🐮



참고 자료

Lambda를 사용하여 Amazon EC2 인스턴스를 정기적으로 중지하고 시작하려면 어떻게 해야 하나요?(권한 안맞음)

Dheeraj Choudhary's Blog - AWS Lambda & EventBridge | Schedule Start And Stop Of EC2 Instances Based On Tags...

profile
까먹었을 미래의 나를 위해

0개의 댓글