Ec2 스케줄링 작업
Ec2 서버를 항상 켜두지 않아도 될시 스케줄링을 통한 인스턴스의 비용을 줄이자
참고 문헌 : https://aws.amazon.com/ko/premiumsupport/knowledge-center/start-stop-lambda-eventbridge/
테스트
1. Lambda 사용할 IAM 생성
Lambda를 사용하여 ec2를 제어해야 하므로, Lambda에서는 Ec2에 대한 목록확인,시작 및 종료 권한이 필요합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
2. Tag 기반으로 Ec2 생성
3. Lambda 함수 생성
- start 함수
import boto3
region = 'ap-northeast-2'
instances = []
ec2_r = boto3.resource('ec2')
ec2 = boto3.client('ec2', region_name=region)
for instance in ec2_r.instances.all():
for tag in instance.tags:
if tag['Key'] == 'auto-schedule':
if tag['Value'] == 'True':
instances.append(instance.id)
def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
print('started your instances: ' + str(instances))
- stop 함수
import boto3
region = 'ap-northeast-2'
instances = []
ec2_r = boto3.resource('ec2')
ec2 = boto3.client('ec2', region_name=region)
for instance in ec2_r.instances.all():
for tag in instance.tags:
if tag['Key'] == 'auto-schedule':
if tag['Value'] == 'True':
instances.append(instance.id)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('stopped your instances: ' + str(instances))
Start Ec2 Function
Stop Ec2 Function
TEST 확인
4. EventBridge 생성
기존 Cloudwatch Event 가 Event Bridge와 통합이 되어 UI만 다른 점 참고!!
- 규칙 세부 정보
- Cloudwatch를 이용하여 특정 시간 조정
- 람다 이벤트 트리거 연동 확인
- 동작 확인 (실행)
5. 추가
위의 과정을 이용하여 특정 시간대에 따른 Ec2 서버의 시작과 중지가 이루어 졌다..
하지만, 수동으로 중지시간에 인스턴스를 강제로 구동 시킬 시 자동으로 중지가 되지 않기 때문에 해당 방법또한 추가로 구현해보았다.
Auto Stop Function
import boto3
from datetime import datetime
from datetime import time
region = 'ap-northeast-2'
instances = []
ec2_r = boto3.resource('ec2')
ec2 = boto3.client('ec2', region_name=region)
for instance in ec2_r.instances.all():
for tag in instance.tags:
if tag['Key'] == 'auto-schedule':
if tag['Value'] == 'True':
instances.append(instance.id)
def lambda_handler(event, context):
curr_datetime = datetime.now()
curr_time = curr_datetime.time()
if (curr_time.hour >= 7):
if len(instances) > 0:
#perform the shutdown
ec2.stop_instances(InstanceIds=instances)
print('stopped your instances: ' + str(instances))
- 인스턴스 수동 재시작
- 수동 시작 진행 시
결과
해당 테스트를 통하여 Lambda 함수 작성을 통한 Ec2 의 스케줄링 작업을 해보았으며,
주 서비스가 아닌 서버들에 한해서 유휴 리소스를 줄이기 위해 사용한다면 유용할 것 같다.
더나아가 해당 설정들을 CloudFormation 이나 Terraform을 이용한다면 좀더 유연한 작업이 될 것이다.
'Automation' 카테고리의 다른 글
SSM Automation을 통한 자동화 (0) | 2022.08.23 |
---|---|
image builder 2 (0) | 2021.06.16 |
Image Builder -golden ami 생성 (0) | 2021.03.29 |
auto-scaling scale-out시 run-command동작 (0) | 2021.03.29 |