스팟 요청의 상태 변화
스팟 요청의 상태 변화 (State changes for a Spot request)
다음 다이어그램은 스팟 요청이 제출부터 종료까지 수명 주기 동안 거칠 수 있는 경로를 보여줘요. 각 단계는 노드로 표시되며, 각 노드의 상태 코드가 스팟 요청과 스팟 인스턴스의 상태를 설명해요.
출처: 문서
본문
대기 평가(Pending evaluation)
스팟 인스턴스 요청을 만들면 하나 이상의 요청 파라미터가 유효하지 않지(bad-parameters) 않는 한 요청은 pending-evaluation 상태로 들어가요.
| 상태 코드 | 요청 상태 | 인스턴스 상태 |
|---|---|---|
| pending-evaluation | open | 해당 없음 |
| bad-parameters | closed | 해당 없음 |
보류(Holding)
하나 이상의 요청 제약이 유효하지만 아직 충족할 수 없거나, 용량이 충분하지 않으면 요청은 제약이 충족되기를 기다리는 보류 상태로 들어가요. 요청 옵션이 요청 충족 가능성에 영향을 줘요. 예를 들어 용량이 없으면 요청은 사용 가능한 용량이 있을 때까지 보류 상태로 유지돼요. 가용 영역 그룹을 지정하면 가용 영역 제약이 충족될 때까지 보류 상태로 있어요.
가용 영역 하나가 중단되면 다른 가용 영역의 스팟 인스턴스 요청용 유휴 EC2 용량이 영향을 받을 수 있어요.
| 상태 코드 | 요청 상태 | 인스턴스 상태 |
|---|---|---|
| capacity-not-available | open | 해당 없음 |
| price-too-low | open | 해당 없음 |
| not-scheduled-yet | open | 해당 없음 |
| launch-group-constraint | open | 해당 없음 |
| az-group-constraint | open | 해당 없음 |
| placement-group-constraint | open | 해당 없음 |
| constraint-not-fulfillable | open | 해당 없음 |
대기 평가/충족-종료(Pending evaluation/fulfillment-terminal)
특정 기간 동안에만 유효한 요청을 만들었는데 그 기간이 pending fulfillment 단계에 도달하기 전에 만료되면 스팟 요청이 terminal 상태로 갈 수 있어요. 요청을 취소하거나 시스템 오류가 발생해도 그럴 수 있어요.
| 상태 코드 | 요청 상태 | 인스턴스 상태 |
|---|---|---|
| schedule-expired | cancelled | 해당 없음 |
| canceled-before-fulfillment ¹ | cancelled | 해당 없음 |
| bad-parameters | failed | 해당 없음 |
| system-error | closed | 해당 없음 |
¹ 요청을 취소한 경우.
대기 충족(Pending fulfillment)
지정한 제약(있다면)이 충족되면 스팟 요청은 pending-fulfillment 상태로 들어가요. 이 시점에 Amazon EC2가 요청한 인스턴스를 프로비저닝할 준비를 해요. 이 과정이 여기서 멈추면, 스팟 인스턴스가 시작되기 전에 사용자가 취소했거나 예상치 못한 시스템 오류가 발생했기 때문일 가능성이 높아요.
| 상태 코드 | 요청 상태 | 인스턴스 상태 |
|---|---|---|
| pending-fulfillment | open | 해당 없음 |
충족(Fulfilled)
스팟 인스턴스의 모든 사양이 충족되면 요청이 충족돼요. Amazon EC2가 스팟 인스턴스를 시작하며 몇 분 걸릴 수 있어요. 중단 시 스팟 인스턴스가 최대 절전되거나 중지되면, 요청을 다시 충족하거나 취소할 때까지 이 상태로 유지돼요.
| 상태 코드 | 요청 상태 | 인스턴스 상태 |
|---|---|---|
| fulfilled | active | pending → running |
| fulfilled | active | stopped → running |
스팟 인스턴스를 중지하면 스팟 인스턴스를 다시 시작하거나 요청을 취소할 때까지 요청이 marked-for-stop 또는 instance-stopped-by-user 상태로 들어가요.
| 상태 코드 | 요청 상태 | 인스턴스 상태 |
|---|---|---|
| marked-for-stop | active | stopping |
| instance-stopped-by-user ¹ | disabled 또는 cancelled ² | stopped |
¹ 스팟 인스턴스를 중지하거나 인스턴스에서 종료(shutdown) 명령을 실행하면 instance-stopped-by-user 상태로 들어가요. 중지 후 다시 시작할 수 있어요. 다시 시작하면 스팟 요청이 pending-evaluation 상태로 돌아간 뒤 제약이 충족되면 Amazon EC2가 새 스팟 인스턴스를 시작해요.
² 스팟 인스턴스를 중지했지만 요청을 취소하지 않으면 요청 상태는 disabled예요. 스팟 인스턴스가 중지되고 요청이 만료되면 요청 상태는 cancelled예요.
충족-종료(Fulfilled-terminal)
인스턴스 유형의 용량이 가능하고 인스턴스를 종료하지 않는 한 스팟 인스턴스는 계속 실행돼요. Amazon EC2가 스팟 인스턴스를 종료해야 하면 스팟 요청이 종료 상태로 들어가요. 스팟 요청을 취소하거나 스팟 인스턴스를 종료해도 요청이 종료 상태로 들어가요.
| 상태 코드 | 요청 상태 | 인스턴스 상태 |
|---|---|---|
| request-canceled-and-instance-running | cancelled | running |
| marked-for-stop | active | running |
| marked-for-termination | active | running |
| instance-stopped-by-price | disabled | stopped |
| instance-stopped-by-user | disabled | stopped |
| instance-stopped-no-capacity | disabled | stopped |
| instance-terminated-by-price | closed(one-time), open(persistent) | terminated |
| instance-terminated-by-schedule | closed | terminated |
| instance-terminated-by-service | cancelled | terminated |
| instance-terminated-by-user | closed 또는 cancelled ¹ | terminated |
| instance-terminated-no-capacity | closed(one-time), open(persistent) | running † |
| instance-terminated-no-capacity | closed(one-time), open(persistent) | terminated |
| instance-terminated-launch-group-constraint | closed(one-time), open(persistent) | terminated |
¹ 인스턴스를 종료했지만 요청을 취소하지 않으면 요청 상태는 closed예요. 인스턴스를 종료하고 요청도 취소하면 요청 상태는 cancelled예요. 요청을 취소하기 전에 스팟 인스턴스를 종료해도 Amazon EC2가 스팟 인스턴스가 종료되었음을 감지하는 데 지연이 있을 수 있어요. 이 경우 요청 상태는 closed 또는 cancelled일 수 있어요.
† Amazon EC2가 용량을 되찾기 위해 스팟 인스턴스를 중단하면서 인스턴스가 중단 시 종료되도록 구성된 경우, 상태가 즉시 instance-terminated-no-capacity로 설정돼요(marked-for-termination이 아니라요). 다만 2분 스팟 인스턴스 중단 공지를 받는 2분 시간을 반영해 인스턴스는 2분 동안 running 상태로 유지되고, 2분 후 terminated로 설정돼요.
중단 실험 (Interruption experiments)
AWS Fault Injection Service로 스팟 인스턴스 중단을 시작해 스팟 인스턴스의 애플리케이션이 어떻게 반응하는지 테스트할 수 있어요. AWS FIS가 스팟 인스턴스를 중지하면 스팟 요청은 marked-for-stop-by-experiment 상태를 거쳐 instance-stopped-by-experiment 상태로 들어가요. AWS FIS가 스팟 인스턴스를 종료하면 요청은 instance-terminated-by-experiment 상태로 들어가요.
| 상태 코드 | 요청 상태 | 인스턴스 상태 |
|---|---|---|
| marked-for-stop-by-experiment | active | running |
| instance-stopped-by-experiment | disabled | stopped |
| instance-terminated-by-experiment | closed | terminated |
영구 요청 (Persistent requests)
스팟 인스턴스가(사용자 또는 Amazon EC2에 의해) 종료되면, 요청이 영구 요청이라면 pending-evaluation 상태로 돌아간 뒤 제약이 충족되면 Amazon EC2가 새 스팟 인스턴스를 시작할 수 있어요.