메뉴
Amazon Elastic Compute Cloud
User Guide for Linux Instances

스팟 인스턴스 요청

스팟 인스턴스를 사용하려면 인스턴스 수, 인스턴스 유형, 가용 영역 및 인스턴스 시간당 지불하려는 최고 가격(입찰)을 포함한 스팟 인스턴스 요청을 생성합니다. 입찰이 현재 스팟 가격을 초과하면 Amazon EC2에서 요청이 즉시 이행됩니다. 그렇지 않으면 요청이 이행될 수 있을 때까지 또는 사용자가 요청을 취소할 때까지 Amazon EC2가 대기합니다.

다음 그림에서는 스팟 요청이 작동하는 방식을 보여 줍니다. 스팟 인스턴스 중단을 위해 수행하는 작업은 요청 유형(일회 또는 영구) 및 중단 동작(중지 또는 종료)에 따라 달라집니다. 요청이 영구 요청인 경우, 스팟 인스턴스가 중단된 후 요청이 다시 열립니다.

 스팟 수명 주기

스팟 인스턴스 요청 상태

스팟 인스턴스 요청은 다음 상태 중 하나일 수 있습니다.

  • open - 요청이 이행될 때까지 대기 중입니다.

  • active - 요청이 이행되며 요청에 연결된 스팟 인스턴스가 있습니다.

  • failed - 요청에 하나 이상의 잘못된 파라미터가 있습니다.

  • closed - 스팟 인스턴스가 중단되거나 종료되었습니다.

  • cancelled - 사용자가 요청을 취소했거나 요청이 만료되었습니다.

다음 그림은 요청 상태 간의 전환을 나타냅니다. 전환은 요청 유형(일회 또는 영구)에 따라 다릅니다.

 스팟 요청 상태

일회 스팟 인스턴스 요청은 Amazon EC2가 스팟 인스턴스를 시작하거나 요청이 만료되거나 사용자가 요청을 취소할 때까지 활성 상태로 유지됩니다. 스팟 가격이 입찰 가격보다 상승하면 스팟 인스턴스가 종료되고 스팟 인스턴스 요청이 닫힙니다.

영구 스팟 인스턴스 요청은 요청이 이행되더라도 요청이 만료되거나 사용자가 요청을 취소할 때까지 활성 상태로 유지됩니다. 예를 들어 스팟 가격이 0.25 USD일 때 한 인스턴스에 대해 영구 스팟 인스턴스 요청을 생성하는 경우, Amazon EC2는 입찰 가격이 0.25 USD보다 높아야 스팟 인스턴스를 시작합니다. 스팟 가격이 입찰 가격보다 높게 올라가면 스팟 인스턴스가 중단됩니다(중지 또는 종료). 하지만 스팟 가격이 입찰 가격 아래로 하락하면 스팟 인스턴스가 시작되거나(중지되었던 경우) 스팟 인스턴스 요청이 다시 열리고 Amazon EC2가 새로운 스팟 인스턴스를 시작합니다(종료되었던 경우).

입찰 상태를 통해 스팟 인스턴스 요청의 상태와 시작된 스팟 인스턴스의 상태를 추적할 수 있습니다. 자세한 내용은 스팟 입찰 상태 단원을 참조하십시오.

스팟 인스턴스의 지속 시간 지정

Amazon EC2는 스팟 가격이 변하면 지정된 지속 시간(스팟 블록이라고도 함)을 지닌 스팟 인스턴스를 종료하지 않습니다. 이로 인해 배치성 프로세스, 인코딩 및 렌더링, 모델링 및 분석, 지속적 통합 작업처럼 완료하는 데 한정된 시간이 소요되는 작업에 이상적입니다.

1, 2, 3, 4, 5, 또는 6시간의 지속 시간을 지정할 수 있습니다. 지불하는 요금은 지정된 지속 시간에 따라 변합니다. 1시간 또는 6시간의 지속 시간에 대한 현행 요금을 보려면, 스팟 인스턴스 요금을 참조하십시오. 이 요금표를 이용해 2, 3, 4 및 5시간의 지속 시간에 대한 비용을 추산할 수 있습니다. 지속 시간을 지닌 요청이 이행되면, 스팟 인스턴스에 대한 가격이 고정되고 이 가격은 인스턴스가 종료될 때까지 유효합니다. 인스턴스를 실행하는 시간별로, 혹은 부분 시간에 대해 이 가격으로 요금이 청구됩니다. 부분 인스턴스 시간은 초 단위로 요금이 부과됩니다.

스팟 요청에서 지속 시간을 지정하면, 각 스팟 인스턴스에 대한 지속 시간은 인스턴스가 인스턴스 ID를 받자마자 시작됩니다. 스팟 인스턴스는 사용자가 종료할 때까지 또는 지속 시간이 끝날 때까지 실행됩니다. 지속 시간이 끝나는 시점에 Amazon EC2는 스팟 인스턴스에 종료 표시를 하고 종료 2분 전에 경고하는 스팟 인스턴스 종료 공지를 제공합니다.

콘솔을 사용하여 지속 시간이 지정되어 있는 인스턴스를 시작하려면

알맞은 요청 유형을 선택합니다. 자세한 내용은 스팟 인스턴스 요청 생성 단원을 참조하십시오.

AWS CLI를 사용하여 지속 시간이 지정되어 있는 인스턴스를 시작하려면

스팟 인스턴스에 대해 지속 시간을 지정하려면 request-spot-instances 명령으로 --block-duration-minutes 옵션을 포함시키십시오. 예를 들면, 다음 명령은 2시간 동안 실행되는 스팟 인스턴스를 시작하는 스팟 요청을 생성합니다.

Copy
aws ec2 request-spot-instances --spot-price "0.050" --instance-count 5 --block-duration-minutes 120 --type "one-time" --launch-specification file://specification.json

AWS CLI를 이용해 지정된 지속 시간을 지닌 스팟 인스턴스의 비용을 검색하려면

describe-spot-instance-requests 명령을 사용하여 지정된 지속 시간을 지닌 스팟 인스턴스의 고정 비용을 검색합니다. 해당 정보는 actualBlockHourlyPrice 필드에 있습니다.

스팟 인스턴스의 테넌시 지정

스팟 인스턴스를 단일 테넌트 하드웨어에서 실행할 수 있습니다. 전용 스팟 인스턴스는 다른 AWS 계정에 속하는 인스턴스로부터 물리적으로 격리됩니다. 자세한 내용은 전용 인스턴스Amazon EC2 전용 인스턴스 제품 페이지를 참조하십시오.

전용 스팟 인스턴스를 실행하려면 다음 중 하나를 수행합니다.

  • 스팟 인스턴스 요청을 생성할 경우 dedicated의 테넌시를 지정합니다. 자세한 내용은 스팟 인스턴스 요청 생성 단원을 참조하십시오.

  • dedicated의 인스턴스 테넌시를 사용하여 VPC에 스팟 인스턴스를 요청합니다. 자세한 내용은 전용 인스턴스 테넌시의 VPC 생성하기 단원을 참조하십시오. dedicated의 인스턴스 테넌시를 사용하여 VPC에서 스팟 인스턴스를 요청하는 경우 default의 테넌시를 사용해서는 스팟 인스턴스를 요청할 수 없습니다.

다음 인스턴스 유형은 전용 스팟 인스턴스를 지원하지 않습니다.

현재 세대

  • c3.8xlarge

  • c4.8xlarge

  • c5.18xlarge

  • d2.8xlarge

  • g2.8xlarge

  • i2.8xlarge

  • i3.16xlarge

  • m4.10xlarge

  • m4.16xlarge

  • p2.16xlarge

  • r3.8xlarge

  • r4.16xlarge

  • x1.32xlarge

이전 세대

  • cc2.8xlarge

  • cg1.4xlarge

  • cr1.8xlarge

스팟 인스턴스 요청에 대한 서비스 연결 역할

스팟 인스턴스를 요청하면 Amazon EC2에서 서비스 연결 역할을 만듭니다. 서비스 연결 역할은 Amazon EC2에서 다른 AWS 서비스를 자동으로 호출하기 위해 필요한 모든 권한을 포함합니다. 자세한 내용은 IAM 사용 설명서서비스 연결 역할 사용을 참조하십시오.

Amazon EC2는 AWSServiceRoleForEC2Spot이라는 이름의 서비스 연결 역할을 사용하여 다음 작업을 완료합니다.

  • ec2:DescribeInstances - 스팟 인스턴스 설명

  • ec2:StopInstances - 스팟 인스턴스 중단

  • ec2:StartInstances - 스팟 인스턴스 시작

스팟 인스턴스에 암호화된 EBS 스냅샷을 지정하고 그 암호화에 사용자 지정 KMS 키를 사용하는 경우, Amazon EC2에서 자동으로 스팟 인스턴스를 시작할 수 있도록 KMS 키에 AWSServiceRoleForEC2Spot 역할 액세스를 허용해야 합니다. 주체는 AWSServiceRoleForEC2Spot 역할의 Amazon 리소스 이름(ARN)입니다. 자세한 내용은 AWS KMS에서 키 정책 사용 단원을 참조하십시오.

Amazon EC2가 이 서비스 연결 역할을 지원하기 시작한 2017년 10월 이전에 활성 스팟 인스턴스를 요청한 경우, Amazon EC2에서 사용자 AWS 계정에 AWSServiceRoleForEC2Spot 역할을 이미 생성했습니다. 자세한 내용은 IAM 사용 설명서내 계정에 표시되는 새 역할을 참조하십시오.

스팟 인스턴스가 더 이상 필요 없는 경우에는 AWSServiceRoleForEC2Spot 역할을 삭제할 것을 권합니다. 계정에서 이 역할을 삭제한 후 스팟 인스턴스를 요청하면 Amazon EC2에서 다시 해당 역할을 만듭니다.

스팟 인스턴스 요청 생성

스팟 인스턴스를 요청하는 프로세스는 온디맨드 인스턴스를 시작하는 프로세스와 비슷합니다. 요청을 제출한 후에는 입찰 가격을 포함한 스팟 요청 파라미터를 변경할 수 없습니다.

여러 스팟 인스턴스를 한 번에 요청하는 경우 각 요청 상태를 개별적으로 추적할 수 있도록 Amazon EC2에서 개별 스팟 인스턴스 요청이 생성됩니다. 스팟 요청 추적에 대한 자세한 내용은 스팟 입찰 상태 단원을 참조하십시오.

사전 조건

시작하기 전에 입찰 가격, 원하는 스팟 인스턴스 수 및 사용할 인스턴스 유형을 결정합니다. 스팟 가격 추세를 검토하려면 스팟 인스턴스 요금 기록 단원을 참조하십시오.

콘솔을 사용하여 스팟 인스턴스 요청을 생성하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 [Spot Requests]를 선택합니다.

  3. 스팟 인스턴스를 처음 사용하는 경우 시작 페이지가 표시되면 [Get started]를 선택합니다. 그렇지 않다면, [Request Spot instances]를 선택합니다.

  4. [Find instance types] 페이지에서 다음을 수행하십시오.

    1. [Request type]의 기본값은 [Request]이며, 이것은 스팟 집합을 사용하여 생성되는 일회성 스팟 요청입니다. 스팟 블록을 대신 사용하려면 [Reserve for duration]을 선택합니다.

      [Request and Maintain]을 사용하려면 스팟 집합 요청 생성 단원을 참조하십시오.

    2. [Target capacity]에는 요청할 단위 수를 입력합니다. vCPU, 메모리, 스토리지 같이 애플리케이션 워크로드에 중요한 인스턴스 또는 성능 특성을 선택할 수 있습니다.

    3. [Spot block] [Reserved duration]에는 작업 완료 소요 시간을 선택합니다.

    4. [AMI]에 대해서는 AWS가 제공하는 기본 Amazon 머신 이미지(AMI) 중 하나를 선택하거나 [Use custom AMI]를 선택하여 자신의 AMI를 지정합니다.

    5. [Instance type(s)]에는 [Select]를 선택합니다. 필요한 최소한의 하드웨어 사양(vCPU, 메모리, 스토리지)을 지닌 인스턴스 유형을 선택합니다.

    6. [Spot Fleet] [Allocation strategy]에서 필요에 맞는 전략을 선택합니다. 자세한 내용은 스팟 집합 할당 전략 단원을 참조하십시오.

    7. [Network]의 경우, 계정에 따라 EC2-Classic과 EC2-VPC 플랫폼을 모두 지원하거나 EC2-VPC 플랫폼만 지원합니다. 계정에서 지원하는 플랫폼을 확인하려면 지원되는 플랫폼 단원을 참조하십시오.

      [Existing VPC] VPC를 선택합니다.

      [New VPC] Amazon VPC 콘솔로 이동하려면 [Create new VPC]를 선택합니다. 마친 후에 마법사로 돌아와 목록을 새로 고칩니다.

      [EC2-Classic] [EC2-Classic]을 선택합니다.

    8. (선택 사항) [Availability Zones]의 경우, 기본 설정은 AWS가 스팟 인스턴스에 대한 가용 영역을 선택하도록 하는 것입니다. 선호하는 경우 특정 가용 영역을 지정할 수 있습니다.

      [EC2-VPC] 하나 이상의 가용 영역을 선택합니다. 가용 영역에 두 개 이상의 서브넷이 있는 경우 [Subnet]에서 알맞은 서브넷을 선택합니다. 서브넷을 추가하려면 [Create new subnet]을 선택하여 Amazon VPC 콘솔로 이동합니다. 마친 후에 마법사로 돌아와 목록을 새로 고칩니다.

      [EC2-Classic] [Select specific zone/subnet]을 선택한 다음, 하나 이상의 가용 영역을 선택합니다.

    9. [Spot Fleet] [Maximum price]에서 자동 입찰을 사용하거나 입찰 가격을 지정할 수 있습니다. 입찰 가격이 선택한 인스턴스 유형에 대한 스팟 가격보다 낮으면 스팟 인스턴스가 시작되지 않습니다.

    10. [Next]를 선택합니다.

  5. [Configure (세부 정보 구성)] 페이지에서 다음을 수행합니다.

    1. (선택 사항) 스토리지를 추가하려면 인스턴스 유형에 따라 추가 인스턴스 스토어 볼륨이나 EBS 볼륨을 지정합니다. EBS 최적화를 활성화할 수도 있습니다.

    2. (선택 사항) 기본적으로 인스턴스에 대해 기본 모니터링 기능이 활성화됩니다. 세부 모니터링을 활성화하려면 [Enable CloudWatch detailed monitoring]을 선택합니다.

    3. (선택 사항) 전용 스팟 인스턴스를 실행하려면 [Tenancy]에 대해 [Dedicated - run a dedicated instance]를 선택합니다.

    4. (선택 사항) 시작 스크립트를 실행하려면 해당 스크립트를 [User data]에 복사합니다.

    5. [Spot Fleet] 태그를 추가하려면 [Add new tag]를 선택하고 해당 태그에 대한 키와 값을 입력합니다. 각 태그에 대해 반복합니다.

    6. (선택 사항) 인스턴스에 연결하려면 [Key pair name]을 사용하여 키 페어를 지정합니다.

    7. (선택 사항) IAM 역할로 스팟 인스턴스를 시작하려면 [IAM instance profile]을 사용하여 역할을 지정합니다.

    8. [Security groups]에서 하나 이상의 보안 그룹을 선택합니다.

    9. [EC2-VPC] VPC에서 인스턴스에 연결하려면 [Auto-assign Public IP]를 활성화합니다.

    10. (선택 사항) 특정 기간 동안만 유효한 요청을 생성하려면 [Request valid from] 및 [Request valid to]를 편집합니다.

    11. [Spot Fleet] 기본적으로 요청 만료 시 스팟 인스턴스를 종료합니다. 요청 만료 후에도 계속 실행하려면 [Terminate instances at expiration]을 선택 취소합니다.

    12. [Review]를 선택합니다.

  6. [Review] 페이지에서 시작 구성을 확인합니다. 변경하려면 [Previous]를 선택합니다. AWS CLI용 시작 구성의 사본을 다운로드하려면 [JSON config]를 선택합니다. 준비가 완료되면 [Launch]를 선택합니다.

  7. 확인 페이지에서 [OK]를 선택합니다.

    [Spot Fleet] 요청 유형은 fleet입니다. 요청이 이행되면 instance 유형의 요청이 추가되며, 그 상태는 active이고 상황은 fulfilled입니다.

    [Spot block] 요청 유형은 block이고 초기 상태는 open입니다. 요청이 이행되면 상태가 active이고 상황은 fulfilled입니다.

AWS CLI를 사용하여 스팟 인스턴스 요청을 생성하려면

다음 request-spot-instances 명령을 사용하여 일회성 요청을 생성합니다.

Copy
aws ec2 request-spot-instances --spot-price "0.05" --instance-count 5 --type "one-time" --launch-specification file://specification.json

다음 request-spot-instances 명령을 사용하여 영구 요청을 생성합니다.

Copy
aws ec2 request-spot-instances --spot-price "0.05" --instance-count 5 --type "persistent" --launch-specification file://specification.json

이러한 명령과 함께 사용할 시작 사양 파일에 대한 예시는 스팟 요청 예시 시작 사양 단원를 참조하십시오. 콘솔에서 시작 사양 파일을 다운로드하는 경우 대신 request-spot-fleet 명령을 사용해야 합니다(콘솔은 스팟 집합을 사용하여 스팟 요청을 지정함).

스팟 가격이 입찰 가격보다 낮으면 Amazon EC2가 스팟 인스턴스를 시작합니다. 스팟 인스턴스는 중단될 때까지 또는 사용자가 직접 종료할 때까지 실행됩니다. 다음 describe-spot-instance-requests 명령을 사용하여 스팟 인스턴스 요청을 모니터링합니다.

Copy
aws ec2 describe-spot-instance-requests --spot-instance-request-ids sir-08b93456

실행 중인 스팟 인스턴스 찾기

스팟 가격이 입찰 가격보다 낮으면 Amazon EC2가 스팟 인스턴스를 시작합니다. 스팟 인스턴스는 입찰 가격이 스팟 가격보다 더 이상 높지 않거나 사용자가 직접 종료할 때까지 실행됩니다. 입찰 가격이 스팟 가격과 정확히 같은 경우 수요에 따라 스팟 인스턴스가 계속 실행될 수 있습니다.

콘솔을 사용하여 실행 중인 스팟 인스턴스를 찾으려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 [Spot Requests]를 선택합니다.

    스팟 인스턴스 요청과 스팟 집합 요청을 모두 볼 수 있습니다. 스팟 인스턴스 요청이 이행된 경우 [Capacity]는 스팟 인스턴스의 ID입니다. 스팟 집합의 경우, [Capacity]는 요청된 용량 중 충족된 용량을 나타냅니다. 스팟 집합에서 인스턴스의 ID를 보려면 확장 화살표를 선택하거나 집합을 선택한 후 [Instances] 탭을 선택합니다.

  3. 또는 탐색 창에서 [Instances]를 선택합니다. 오른쪽 위에서 [Show/Hide] 아이콘을 선택한 다음 [Lifecycle]을 선택합니다. 각 인스턴스에 대해 [Lifecycle]은 normal, spot 또는 scheduled입니다.

AWS CLI를 사용하여 실행 중인 스팟 인스턴스를 찾으려면

스팟 인스턴스를 나열하려면 다음과 같이 --query 옵션으로 describe-spot-instance-requests 명령을 사용하십시오.

Copy
aws ec2 describe-spot-instance-requests --query SpotInstanceRequests[*].{ID:InstanceId}

다음은 예제 출력입니다.

[
    {
        "ID": "i-1234567890abcdef0"
    },
    {
        "ID": "i-0598c7d356eba48d7"
    }
]

아니면 다음과 같이 --filters 옵션으로 describe-instance 명령을 사용해 스팟 인스턴스를 나열할 수도 있습니다.

Copy
aws ec2 describe-instances --filters "Name=instance-lifecycle,Values=spot"

스팟 인스턴스 요청 태그 지정

스팟 인스턴스 요청을 쉽게 분류하고 관리할 수 있도록 원하는 메타데이터로 태그를 지정할 수 있습니다. 자세한 내용은 Amazon EC2 리소스에 태그 지정 단원을 참조하십시오.

요청을 만든 후 스팟 인스턴스 요청에 태그를 할당할 수 있습니다. 스팟 인스턴스 요청에 대해 생성하는 태그는 요청에만 적용됩니다. 이러한 태그는 스팟 서비스가 요청을 이행하기 위해 시작하는 스팟 인스턴스에 자동으로 추가되지 않습니다. 스팟 인스턴스가 시작된 후 스팟 인스턴스에 직접 태그를 추가해야 합니다.

AWS CLI를 사용해 스팟 인스턴스 요청 또는 스팟 인스턴스에 태그를 추가하려면

다음 create-tags 명령을 사용해 리소스에 태그를 지정하십시오.

Copy
aws ec2 create-tags --resources sir-08b93456 i-1234567890abcdef0 --tags Key=purpose,Value=test

스팟 인스턴스 요청 취소

이제 필요 없는 스팟 요청을 취소할 수 있습니다. open 또는 active 상태인 스팟 인스턴스 요청만 취소할 수 있습니다. 요청이 아직 이행되지 않았고 인스턴스가 시작되지 않았을 때 스팟 요청은 open 상태입니다. 요청이 이행되었고 결과적으로 스팟 인스턴스가 시작되었을 때 스팟 요청은 active 상태입니다. 스팟 요청이 active이고 실행 중인 스팟 인스턴스가 연결되어 있을 때 요청을 취소하면 인스턴스가 종료되지 않습니다. 실행 중인 스팟 인스턴스를 수동으로 종료해야 합니다.

스팟 요청이 영구 스팟 요청인 경우 새로운 스팟 인스턴스를 시작할 수 있도록 요청이 open 상태로 돌아갑니다. 영구 스팟 요청을 취소하고 스팟 인스턴스를 종료하려면 스팟 요청을 먼저 취소한 다음 스팟 인스턴스를 종료해야 합니다. 그렇지 않으면 스팟 요청이 새로운 인스턴스를 시작할 수 있습니다.

콘솔을 사용하여 스팟 인스턴스 요청을 취소하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 [Spot Requests]를 선택한 다음 스팟 요청을 선택합니다.

  3. [Actions]를 선택한 다음, [Cancel spot request]를 선택합니다.

  4. (선택 사항) 연결된 스팟 인스턴스가 완료되면 인스턴스를 종료할 수 있습니다. 탐색 창에서 [Instances]를 선택하고 인스턴스를 선택한 다음 [Actions]를 선택하고 [Instance State]를 선택한 후 [Stop]을 선택합니다.

AWS CLI를 사용해 스팟 인스턴스 요청을 취소하려면

다음 cancel-spot-instance-requests 명령을 사용하여 지정한 스팟 요청을 취소하십시오.

Copy
aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-08b93456

연결된 스팟 인스턴스 작업이 완료되면, 다음과 같이 terminate-instances 명령을 사용하여 해당 인스턴스를 수동으로 종료할 수 있습니다.

Copy
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0 i-0598c7d356eba48d7