메뉴
Amazon Elastic Compute Cloud
User Guide for Linux Instances

스팟 인스턴스 중단

스팟 인스턴스에 대한 수요는 매 순간 상당히 다를 수 있으며 스팟 인스턴스의 가용성도 사용 가능한 미사용 EC2 인스턴스의 양에 따라 상당히 다를 수 있습니다. 또한 얼마나 높게 입찰하든 상관없이 스팟 인스턴스가 여전히 중단될 수 있습니다. 따라서 스팟 인스턴스 중단에 대비하여 애플리케이션을 준비해야 합니다. 중단할 수 없는 애플리케이션에는 스팟 인스턴스를 사용하지 않는 것이 좋습니다.

Amazon EC2가 스팟 인스턴스를 중단시키는 이유는 다음과 같습니다.

  • 가격 - 스팟 가격이 입찰 가격보다 큽니다.

  • 용량 - 미사용 EC2 인스턴스가 스팟 인스턴스 수요를 충족하기에 부족한 경우, Amazon EC2는 입찰 가격이 최저인 스팟 인스턴스부터 인스턴스를 중단하기 시작합니다. 입찰 가격이 동일한 스팟 인스턴스가 여러 개 있는 경우, 인스턴스의 중단 순서는 임의로 결정됩니다.

  • 제약 조건 - 요청에 시작 그룹 또는 가용 영역 그룹과 같은 제약 조건이 포함되는 경우 제약 조건을 더 이상 충족할 수 없으면 이러한 스팟 인스턴스가 그룹으로 종료됩니다.

중단 동작

스팟 인스턴스가 중단되면 Amazon EC2가 이를 중지하거나 종료하도록 지정할 수 있습니다. 기본값은 중단된 스팟 인스턴스를 종료하는 것입니다. 이 동작을 변경하여, 다음 요구 사항이 충족되는 경우 Amazon EC2가 중단된 스팟 인스턴스를 중지하도록 할 수 있습니다.

요구 사항

  • 스팟 인스턴스 요청의 유형은 one-time이 아니라 persistent여야 합니다. 스팟 인스턴스 요청에서 시작 그룹을 지정할 수는 없습니다.

  • 스팟 집합 요청의 유형은 request가 아니라 maintain이어야 합니다.

  • 루트 볼륨은 인스턴스 스토어 볼륨이 아니라 EBS 볼륨이어야 합니다.

스팟 서비스에 의해 중지된 스팟 인스턴스는 해당 스팟 서비스에서만 다시 시작할 수 있으며, 이때 반드시 동일한 시작 구성을 사용해야 합니다. 중지된 스팟 인스턴스의 인스턴스 유형 및 가용 영역에 맞는 용량을 사용할 수 있게 되면 그 스팟 인스턴스가 시작됩니다. 가용 영역이나 인스턴스 유형이 맞지 않는 용량만 사용할 수 있는 경우, 스팟 집합은 그 가용 용량으로 시작 구성을 사용하여 새로운 스팟 인스턴스를 시작합니다.

스팟 인스턴스가 중지되었을 때 일부 인스턴스 속성을 수정할 수 있지만 인스턴스 유형은 수정할 수 없습니다. EBS 볼륨을 분리하거나 삭제한 경우, 스팟 인스턴스를 시작해도 연결되지 않습니다. 루트 볼륨을 분리했는데 스팟 서비스가 그 스팟 인스턴스를 시작하려고 하면 인스턴스 시작은 실패하고 스팟 서비스는 중지된 인스턴스를 종료합니다.

중지된 상태의 스팟 인스턴스를 종료할 수 있습니다. 스팟 요청이나 스팟 집합을 취소하면 스팟 서비스는 중지된 상태의 연결된 스팟 인스턴스를 모두 종료합니다.

스팟 인스턴스가 중지 상태인 동안에는 유지 중인 EBS 볼륨에 대한 요금만 부과됩니다. 스팟 집합을 사용하는 경우, 중지된 인스턴스가 많으면 해당 계정의 EBS 볼륨 수 한도를 초과할 수 있습니다.

중단에 대한 준비

스팟 인스턴스를 사용할 때 따라야 할 몇 가지 모범 사례는 다음과 같습니다.

  • 합리적인 입찰 가격을 선택합니다. 입찰 가격은 요청이 이행될 수 있을 만큼 높으면서 지불하려는 금액보다 높지 않아야 합니다. 장기간 공급이 부족할 경우 해당 기간 동안 스팟 가격이 최고 입찰 가격을 기준으로 높게 유지될 수 있기 때문에 이 점이 중요합니다. 온디맨드 인스턴스 가격보다 높게 입찰하지 않는 것이 좋습니다.

  • 필수 소프트웨어 구성이 포함된 Amazon 머신 이미지(AMI)를 사용하여 요청이 이행되는 즉시 인스턴스를 실행할 준비가 되었는지 확인합니다. 시작 시 사용자 데이터를 사용하여 명령을 실행할 수도 있습니다.

  • 스팟 인스턴스가 종료되더라도 영향을 받지 않을 장소에 중요한 데이터를 정기적으로 저장하십시오. 예를 들어, Amazon S3, Amazon EBS 또는 DynamoDB를 사용할 수 있습니다.

  • 작업을 작은 부분으로 분리하거나(눈금, 하둡 또는 대기열 기반 아키텍처 사용), 작업을 자주 저장할 수 있도록 검사점을 사용합니다.

  • 스팟 인스턴스 중단 공지를 사용하여 스팟 인스턴스의 상태를 모니터링합니다.

  • 이 경고를 즉시 제공하기 위해 모든 노력을 다하고 있지만, 경고를 보내기 전에 스팟 인스턴스가 종료될 가능성도 있습니다. 따라서 중단 공지를 테스트할 때도 애플리케이션을 테스트하여 예상치 않은 인스턴스 종료가 정상적으로 처리되는지 확인하십시오. 이렇게 하려면 온디맨드 인스턴스를 사용하여 애플리케이션을 실행한 다음 온디맨드 인스턴스를 직접 종료합니다.

스팟 인스턴스 중단 공지

스팟 인스턴스 중단으로부터 보호하는 가장 좋은 방법은 애플리케이션을 내결함성 있게 설계하는 것입니다. 또한 Amazon EC2가 스팟 인스턴스를 중단하기 2분 전에 경고해 주는 스팟 인스턴스 중단 공지를 이용할 수 있습니다. 5초마다 이러한 경고를 확인하는 것이 좋습니다.

인스턴스 메타데이터의 항목 하나를 사용하여 스팟 인스턴스의 애플리케이션에 이 경고를 보내게 됩니다. instance-action 항목을 사용해야 합니다. termination-time 항목은 이전 버전과의 호환성을 위해 보존됩니다.

instance-action

스팟 서비스에서 중지 또는 종료할 스팟 인스턴스를 표시한 경우, 인스턴스 메타데이터에 instance-action 항목이 있습니다. 이것은 다음과 같이 검색할 수 있습니다.

Copy
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/spot/instance-action

instance-action 항목은 해당하는 작업(중지 또는 종료)과 작업이 이루어지는 대략의 시간(UTC 기준)을 지정합니다. 다음 예제에서는 이 인스턴스가 중지될 시간을 알려 줍니다.

{"action": "stop", "time": "2017-09-18T08:22:00Z"}

다음 예제에서는 이 인스턴스가 종료될 시간을 알려 줍니다.

{"action": "terminate", "time": "2017-09-18T08:22:00Z"}

termination-time

스팟 서비스에서 종료할 스팟 인스턴스를 표시한 경우, 인스턴스 메타데이터에 termination-time 항목이 있습니다. 이 항목은 이전 버전과의 호환성을 위해 보존됩니다. 이것은 다음과 같이 검색할 수 있습니다.

Copy
[ec2-user ~]$ if curl -s http://169.254.169.254/latest/meta-data/spot/termination-time | grep -q .*T.*Z; then echo terminated; fi

termination-time 항목은 인스턴스가 종료 신호를 받게 될 대략의 시간(UTC 기준)을 지정합니다. 예:

2015-01-05T18:02:00Z

Amazon EC2가 인스턴스를 종료할 준비가 되지 않거나 사용자가 스팟 인스턴스를 직접 종료한 경우 termination-time 항목이 나타나지 않거나(HTTP 404 오류 수신) 이 항목에 시간 값이 아닌 값이 포함됩니다.

Amazon EC2에서 인스턴스를 종료하지 않으면 스팟 입찰 상태는 fulfilled로 설정됩니다. termination-time은 과거 시점인 원래 예상 시간과 함께 인스턴스 메타데이터에 남습니다.