Open Kim-Yul opened 2 weeks ago
스팟 인스턴스 인터럽트 이벤트가 반영되지 않아 실제로는 인터럽트된i-01645dc52c1a13c1e
인스턴스가 실행중으로 인식이 올바르지 못한 정보를 표시하는 상황이었습니다. 문제가 발생한 시점으로 검색시점(2024-11-15)을 고정후 테스트를 진행하였습니다.
aws_daily_instance_usage_report.py 실행 결과 (문제 상황 시점)
-, i-01645dc52c1a13c1e) / p3.2xlarge / 인스턴스 실행 중 (1:32:09)
-, i-067c369c74c4df009) / c5.xlarge / 인스턴스 실행 중 (1:51:03)
-, i-0e96199f3cfe484ed) / p3.2xlarge / 인스턴스 실행 중 (0:35:34)
인터럽트시 발생하는 BidEvictedEvent에 대한 처리를 기존 코드에 통합하여 Terminate 되었을 때와 같은 플로우로 진행되도록 반영후 결과를 확인했습니다.
코드 수정 내용
daily_instance_usage()
함수 수정
search_modes = ["RunInstances", "StartInstances", "TerminateInstances", "StopInstances", "BidEvictedEvent"]
CloudTrail에서 가져올 Event에 BidEvictedEvent를 추가해주었습니다.
get_instance_ids_for_stop()
함수 추가
def get_instance_ids_for_stop(events, mode):
if mode == "BidEvictedEvent":
cloud_trail_event = json.loads(events['CloudTrailEvent'])
instance_ids = [
(item, None) for item in cloud_trail_event['serviceEventDetails']['instanceIdSet']]
event_time = events['EventTime'].replace(tzinfo=None)
return instance_ids, event_time
else:
return get_instance_ids(events)
BidEvictedEvent에서 instance_ids를 추출하기 위한 함수를 추가 구현하였습니다.
[그림 1]
좌측: TerminateInstances / 우측: BidEvictedEvent 위 [그림 1]처럼 CloudTrail에서 가져온 이벤트의 응답값이 인스턴스가 Terminate되거나 interrupt되었을때 instanceId를 return 해주는 구조가 상이하여 이벤트 객체에서 instanceId를 추출하는 부분을 별도 구현해 추가 하였고, Terminate의 경우 기존 추출 함수를 호출하게 구현하였습니다.
get_stop_instances()
함수 수정
instance_ids, event_time = get_instance_ids_for_stop(events, mode)
instance_id를 가져오는 부분을 추가 구현한 함수로 교체하였습니다.
aws_daily_instance_usage_report.py 실행 테스트 결과
-, i-01645dc52c1a13c1e) / p3.2xlarge / 0:49:23 간 실행
-, i-067c369c74c4df009) / c5.xlarge / 인스턴스 실행 중 (1:51:03)
-, i-0e96199f3cfe484ed) / p3.2xlarge / 0:22:29 간 실행
i-01645dc52c1a13c1e
인스턴스의 실행 시간이 정상 계산됨을 확인하였습니다.
기존에 만들어진 daily instance usage report 에서는 스팟 인스턴스 인터럽트 이벤트가 반영되지 않았습니다. 이에 cloudtrail에서 이벤트를 찾아보고자 하였지만 찾을 수 없었고, aws support에 문의해본 결과
BidEvictedEvent
라는 이벤트 이름을 통해 인터럽트 이벤트를 확인할 수 있었습니다. 이벤트가 기록된 시간을 토대로 스팟 인스턴스 사용량을 계산하면 될 것 같은데, 자세한 건 테스트 해보고 다시 코멘트 남기도록 하겠습니다.support 제공 가이드 : https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/BidEvictedEvent.html
< 실제 인터럽트 된 지훈님의 인스턴스 정보 >
< 인스턴스 인터럽트 이벤트 실행 시간 >