이를 Lambda 와 EventBridge 로 구성하면 모든 EC2 에 대하여 자동으로 관리가 가능하다
작업내용
Lambda 코드 작성
EventBridge 설정
상세 작업
1. Lambda 코드
boto3 ec2 client 를 사용한다
ec2.describe_instances() 를 사용하여 현재 생성된 전체 EC2의 Instance_id 를 추출한다
ec2 client 의 ec2.stop_instances 를 사용하여 추출한 Instance_id 의 EC2를 종료 한다
import boto3
def lambda_handler(event,context):
# Get the EC2 client
ec2 = boto3.client('ec2')
# Get the list of all instances
describe_instance_assets = ec2.describe_instances()
ec2_instance_list =[]
for reservation in describe_instance_assets['Reservations']:
for instance in reservation['Instances']:
instance_id = instance['InstanceId']
ec2_instance_list.append(instance_id)
ec2.stop_instances(InstanceIds=[instance_id])
# print(ec2_instance_list)
※주의사항
Lambda의 정상적인 실행을 위해서는 Lambda 권한에 EC2 제어 권한이 필요하다
2. EventBridge 설정
EventBridge - 일정 부분에 스케줄을 생성 한다
일정 패턴 편집
원하는 시간대로 설정
시간대를 Asia/Seoul 로 설정하면 현지 시간으로 지정이 가능하다
대상으로 람다 지정
추가 설정 확인(불필요함으로 미지정)
위와같이 생성하면 Eventbidge 에서 자동으로 Lambda 를 실행할 권한을 생성하게 된다
설정한 시간대에 EventBridge 가 실행 되고, Lambda 를 호출하여 모든 EC2를 종료 하게 된다
EventBridge 는 AWS 및 3rd Party 에서 발생하는 이벤트들을 수집하는 역할을 담당 하고 있다.
AWS 에는 여러가지 많은 서비스 들이 있는데 EventBridge 는 각 서비스들에서 발생 시키는 Event 에 대하여 트리거 설정을 할 수 있다.
[이해를 돕기위한 그림]
CloudTrail -----①----- EventBridge -----②----- SNS
설명
CloudTrail 에서 특정 이벤트가 발생 하였을 경우 그에 대한 이벤트 로그가 AWS 내부에 남게 된다
이때 발생한 이벤트 로그중 일부분을 EventBridge 에 설정(트리거 역할)
트리거조건이 충족되면 EventBridge 에서 설정한 다음 동작이 수행된다
SNS 뿐만아니라 Lambda 등 다양한 AWS 서비스를 연계시킬수 있다
설정 방법
1. EventBridge 생성
2. 샘플 이벤트 설정
해당 샘플에서는 CloudTrail 에 대한 설정을 진행할 예정
샘플 이벤트에서 CloudTrail 을 입력하면 여러가지가 나오는데 그중 아래와 같이 AWS API Call via CloudTrail 을 선택
3. 이벤트 샘플 JSON 확인
이벤트 샘플을 선택하면 나오는 JSON 을 확인하여 필요한 조건을 지정
해당 예시에서는 CloudTrail 을 사용해서 누가 특정한 Role 을 사용하는지 확인 하고 싶을때에 대한 예이다
밑에 Json 구분중 userName 이 적힌 부분이 있을 것이다. 이부분을 트리거로 잡아서 알람을 발생 시킬예정