안녕하세요,
이번 시간에는 EC2 인스턴스를 정기적으로 사용하지 않는 시간에 자동으로 중지하여 비용을 절감하는 방법을 소개해드리겠습니다.
예를 들어, 주말과 같이 사내에서 서버를 사용하지 않는 경우, 해당 시간에 인스턴스를 꺼두면 불필요한 비용을 줄일 수 있습니다.
이 작업은 **AWS Lambda + Amazon EventBridge 스케줄링을 사용하여 간단하게 자동화할 수 있습니다.
1. IAM 생성
- AWS 콘솔에 접속하신후 해당 Lambda에 권한을 부여할 IAM 정책을 생성합니다.
아래 JSON 정책 문서를 정책 편집기에 넣습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
- 이제 IAM 역할을 AWS 서비스 > Lambda를 사용사례로하여 역할을 생성합니다.
- 1번에서 생성한 정책을 IAM 역할에 연결합니다.
2.Lambda 생성
Lambda에 연결할 역할을 생성하였으니 이제 Lambda페이지로 이동하여 Lambda 함수 생성합니다.
함수이름은 StopEC2,StartEC2와 같이 설명하는 이름을 입력합니다.
런타임은 Python 3.9
권한은 기존 역할 사용을 선택후 만들어 놓은 IAM역할 이름을 입력하여 연결합니다.
값을 전부 입력 하였다면 함수 생성을 선택합니다.
이제 생성된 Lambda 함수에 코드 탭의 코드 소스에 아래의 코드를 입력합니다.
‘리전’에는 대상 서버의 리전, ‘인스턴스ID’에는 대상 인스턴스의 id를 입력하빈다(i-xxxxx)
Stop_instance 코드
#Stop pythonimport boto3region = ‘리전’instances = [‘인스턴스ID’, ‘인스턴스ID’]ec2 = boto3.client(‘ec2’, region_name=region)def lambda_handler(event, context):ec2.stop_instances(InstanceIds=instances)print(‘stopped your instances: ‘ + str(instances))
#Start pythonimport boto3region = ‘리전’instances = [‘인스턴스ID’,’인스턴스ID’]ec2 = boto3.client(‘ec2’, region_name=region)def lambda_handler(event, context):ec2.start_instances(InstanceIds=instances)print(‘started your instances: ‘ + str(instances))
참고 : 테스트 이벤트의 JSON코드를 변경하지 마세요



3.EventBridge 생성

필드 | 범위 | 의미 | 예시 |
---|---|---|---|
분 (Minute) | 0–59 | 몇 분에 실행할지 | 0 → 매 시각 0분 (정시) |
시 (Hour) | 0–23 | 몇 시에 실행할지 | 9 → 오전 9시 |
일 (Day of Month) | 1–31 | 매달 몇 일에 실행할지 | 15 → 매달 15일 |
월 (Month) | 1–12 | 몇 월에 실행할지 | 1 → 1월 |
요일 (Day of Week) | 0–6 또는 SUN–SAT | 요일 지정 | 1-5 → 월~금 (0 또는 7은 일요일) |
연도 (Year) (선택적) | 예: 2025 | 특정 연도만 실행할 경우 | 2025 |
특수 기호
기호 | 의미 | 예시 |
---|---|---|
* |
모든 값 | * * * * * → 매 분마다 실행 |
, |
여러 값 지정 | 1,15 → 1일과 15일에 실행 |
- |
범위 지정 | 1-5 → 월~금 실행 |
/ |
간격 지정 | */10 → 10분마다 실행 |
? |
특정하지 않음 (요일/일 중 하나 생략 시 사용) | AWS에서 주로 사용 |
크론값을 넣은 후 다음을 누르시면 대상 API 설정 창이 나옵니다.
우리는 Lambda를 사용하기로 하였으니 AWS Lambda를 선택후 아래 Invoke에서 대상 함수를 선택합니다.
설정일 완료 되었다면, 생성을 선택합니다.
이와 같은 방식으로, 사용하지 않는 시간대에 EC2 인스턴스를 자동으로 중지하고, 사용 시간에 자동으로 시작하도록 설정할 수 있습니다.
이를 통해 비용 절감 효과는 물론, 리소스 낭비 없이 효율적인 운영이 가능합니다.
지금까지 Lambda + EventBridge를 이용한 EC2 자동 시작/중지 구성 방법에 대해 알아보았습니다.
이 방식은 특히 업무 시간 외에는 서버를 사용하지 않는 환경에 매우 유용합니다.
앞으로도 AWS 인프라를 보다 효율적으로 운영하기 위한 꿀팁을 지속적으로 공유드리겠습니다.
감사합니다!
참고 문서
https://repost.aws/ko/knowledge-center/start-stop-lambda-eventbridge