Event Bridge(time based)를 이용해서 EC2 인스턴스의 실행 시간과 중단 시간을 제어하여 인스턴스의 사용 비용을 줄일 수 있습니다. 근데 사실 이게 어떻게 효과적으로 이용할 수 있는건진 모르겠네요 Bastion host에 적용해서 관리 시간에만 Bastion을 껐다 킴으로써 비용을 아낄 수 있다고는 생각되는데 요즘은 웬만하면 SSM을 이용해서 서버를 제어할 것 같아서 크게 의미가 있는진 모르겠습니다.
실행구도
EventBridge 에서 cron으로 Lambda 함수를 호출하면 Instance가 켜지거나 꺼지는 실행 구도입니다.
Lambda 역할 생성
{
"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": "*"
}
]
}
Lambda의 실행 역할에 위의 역할이 필요합니다. EC2에 대한 제어 권한과 CloudWatch에 로그를 남길 수 있는 권한이 필요합니다.
Lambda 구성
함수 작성 및 저장
함수 생성하면서 실행 역할에서 기존 역할 사용 -> 위 내용으로 만든 역할 지정. 런타임은 사용하기 편하신 코드 쓰시면 됩니다.
Lamda 에서 실행할 코드를 작성해줍니다.
EC2 실행 코드
import boto3
region = 'your region'
instances = ['your intances']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
EC2 중단 코드
import boto3
region = 'your region'
instances = ['your intances']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
코드 실행 테스트
정상 실행되는 것을 볼 수 있습니다.
EventBridge 트리거로 연결
EventBridge에서 정책 생성하고 대상으로 lambda를 연결해도 되긴 하는데 정확히 어떤 대상(lambda 관련 대상이 너무 많아요,,ㅠ)으로 연결해야하는지 모르겠어서 Lambda 트리거 연결로 정책을 연결해봤습니다.
기존 정책이 있으면 기존 정책으로 연결하시고 저는 새 규칙 생성하겠습니다.
Cron 트리거는 UTC를 기반으로 시간이 설정되니 조금 주의해서 설정하셔야 합니다. 저는 3시에 인스턴스를 시작해서 5시에 종료되도록 구성해놨습니다. 따라서 5시에 트리거 하고 싶다 하시면 UTC 17에서 - 9 한 8을 설정하셔야 한국 시간대 5시로 설정됩니다.
(인스턴스 시작 트리거, 함수 / 인스턴스 종료 트리거, 함수 따로 설정해주셔야 합니다!)
결과
지금은 4시 28분인데 다른 공부 좀 하다가 5시에 정상적으로 종료되는지 확인하고 오겠습니다.
오잉???? 왜 안돼지,,,lamda는 작동하는데? 하고 글을 올렸으나 역시 컴퓨터는 거짓말 하지 않습니다. ! 현재 글에는 추가가 되어 있지만 놀랍게도 저는 그걸 까먹은 채로 UTC 시간대로 5시에 실행되게 해놨기 때문에 저희 나라에서 새벽 2시에 트리거 되게 해놨던 겁니다!!! 당연히 실행이 안됐겠죠. 막 저한테 화가 머리 끝까지 나네요. 다시 6시로 정상적으로 수정하고 결과를 지켜보겠습니다.
짜잔 !!!!!!!!!!! 위 사진을 보시면 완벽하게 중지되는 것을 볼 수 있습니다
'네트워크 > 클라우드 컴퓨팅' 카테고리의 다른 글
ALB path based routing(컨테이너 배포) (1) | 2023.04.09 |
---|---|
ECS,ECR을 이용한 Flask web 배포 (0) | 2023.04.09 |
AWS ECR 컨테이너 이미지 업로드, 다운로드 (1) | 2023.03.15 |
AWS GuardDuty (0) | 2023.03.09 |
AWS Accelerator (0) | 2023.03.07 |