

# EC2 Fleet 및 스팟 플릿
<a name="Fleets"></a>

EC2 Fleet 및 스팟 플릿은 단일 작업으로 수십, 수백 또는 수천 개의 Amazon EC2 인스턴스를 효과적으로 시작할 수 있도록 설계되었습니다. 플릿의 각 인스턴스는 [시작 템플릿](ec2-launch-templates.md) 또는 시작 시 수동으로 구성한 시작 파라미터 세트에 따라 구성됩니다.

**Topics**
+ [기능 및 이점](#ec2-fleet-features-and-benefits)
+ [어떤 플릿 방법을 사용하는 것이 최선입니까?](which-fleet-method-to-use.md)
+ [EC2 플릿 또는 스팟 플릿에 대한 구성 옵션](ec2-fleet-configuration-strategies.md)
+ [EC2 플릿 사용](manage-ec2-fleet.md)
+ [스팟 플릿 사용](work-with-spot-fleets.md)
+ [EC2 플릿 또는 스팟 플릿 모니터링](fleet-monitor.md)
+ [EC2 플릿에 대한 튜토리얼](fleet-tutorials.md)
+ [EC2 Fleet에 대한 CLI 구성 예제](ec2-fleet-examples.md)
+ [예제 CLI 구성 스팟 플릿](spot-fleet-examples.md)
+ [EC2 Fleet 및 스팟 플릿 할당량](fleet-quotas.md)

## 기능 및 이점
<a name="ec2-fleet-features-and-benefits"></a>

플릿은 다음 기능과 이점을 제공하고, 이를 통해 여러 EC2 인스턴스에서 애플리케이션을 실행할 때 비용 절감을 극대화하고 가용성과 성능을 최적화할 수 있습니다.

**다양한 인스턴스 유형**  
플릿은 단일 인스턴스 유형의 가용성에 의존하지 않도록 여러 인스턴스 유형을 시작할 수 있습니다. 이렇게 하면 플릿 내 인스턴스의 전체 가용성이 증가합니다.

**여러 가용 영역에서 인스턴스 분산**  
플릿은 여러 가용 영역에서 시작할 수 있으므로 비용을 절감하고 가용성을 개선할 수 있습니다. 플릿에 스팟 인스턴스가 포함된 경우 플릿은 요금 및 중단과 관련된 기본 설정에 따라 가용 영역을 자동으로 선택합니다.

**다양한 구매 옵션**  
플릿은 여러 구매 옵션(스팟 및 온디맨드 인스턴스)을 시작할 수 있으므로 스팟 인스턴스 사용을 통해 비용을 최적화할 수 있습니다. 플릿의 온디맨드 인스턴스와 함께 사용하여 예약 인스턴스 및 절감형 플랜의 할인 혜택을 받을 수도 있습니다.

**스팟 인스턴스의 자동 교체**  
플릿에 스팟 인스턴스가 포함된 경우, 스팟 인스턴스가 중단되면 스팟 용량을 자동으로 교체하도록 요청할 수 있습니다. 또한 플릿은 [용량 리밸런싱](ec2-fleet-capacity-rebalance.md)을 통해 중단될 위험이 높은 스팟 인스턴스를 모니터링하고 사전에 교체할 수 있습니다.

**온디맨드 용량 예약**  
플릿은 [온디맨드 용량 예약](ec2-fleet-on-demand-capacity-reservations.md)을 사용하여 온디맨드 용량을 예약할 수 있습니다. 플릿에 [ML용 용량 블록](ec2-capacity-blocks.md)이 포함되어 향후에 GPU 인스턴스를 예약하여 단기간의 ML(기계 학습) 워크로드를 지원할 수 있습니다.

# 어떤 플릿 방법을 사용하는 것이 최선입니까?
<a name="which-fleet-method-to-use"></a>

일반적으로 Amazon EC2 Auto Scaling을 사용하여 스팟 및 온디맨드 인스턴스 플릿을 시작하는 것이 좋습니다. 플릿을 관리하는 데 사용할 수 있는 추가 기능을 제공하기 때문입니다. 추가 기능 목록에는 스팟 및 온디맨드 인스턴스 모두에 대한 자동 상태 확인 교체, 애플리케이션 기반 상태 확인, 애플리케이션 트래픽을 정상 인스턴스로 균등하게 분산하기 위한 Elastic Load Balancing과의 통합이 포함됩니다. Amazon ECS, Amazon EKS(자체 관리형 노드 그룹) 및 Amazon VPC Lattice와 같은 AWS 서비스를 사용할 때도 Auto Scaling을 사용할 수 있습니다. 자세한 내용은 [Amazon EC2 Auto Scaling 사용 설명서](https://docs.aws.amazon.com/autoscaling/ec2/userguide/)를 참조하세요.

Amazon EC2 Auto Scaling을 사용할 수 없는 경우 EC2 Fleet 또는 스팟 플릿 사용을 고려해 볼 수 있습니다. EC2 Fleet과 스팟 플릿은 동일한 핵심 기능을 제공합니다. 하지만 EC2 Fleet은 명령줄을 통해서만 사용할 수 있으며 콘솔 지원은 제공하지 않습니다. 스팟 플릿은 콘솔 지원을 제공하지만 계획된 투자가 없는 레거시 API를 기반으로 합니다.

다음 표를 사용하여 사용할 플릿 방법을 결정하세요.


****  

| 플릿 방법 | 언제 사용해야 하나요? | 사용 사례: | 
| --- | --- | --- | 
|  [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/which-fleet-method-to-use.html)  |  원하는 인스턴스 수를 유지하면서 인스턴스의 수명 주기를 관리하는 Auto Scaling 그룹을 생성합니다. 지정된 최소 및 최대 한도 사이의 수평적 크기 조정(인스턴스 추가)을 지원합니다.  | 
|  [EC2 Fleet](manage-ec2-fleet.md)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/which-fleet-method-to-use.html)  |  인스턴스 유형, AMI, 가용 영역 또는 서브넷에 따라 바뀌는 여러 출시 사양을 사용하여 단일 작업으로 온디맨드 인스턴스와 스팟 인스턴스의 `instant` 플릿을 생성합니다. 스팟 인스턴스 할당 전략의 기본값은 단위당 `lowest-price`이지만, `price-capacity-optimized`로 변경하는 것이 좋습니다.  | 
|  [스팟 플릿](work-with-spot-fleets.md)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/which-fleet-method-to-use.html)  |  EC2 플릿을 사용할 경우의 사용 사례에 대한 콘솔 지원이 필요한 경우에만 스팟 플릿을 사용하세요.  | 

# EC2 플릿 또는 스팟 플릿에 대한 구성 옵션
<a name="ec2-fleet-configuration-strategies"></a>

EC2 플릿 또는 스팟 플릿을 계획할 때 플릿 구성 방법 결정 시 다음 옵션을 고려하는 것이 좋습니다.


****  

| 구성 옵션 | 질문 | 설명서 | 
| --- | --- | --- | 
| 플릿 요청 유형 |  원하는 목표 용량을 위한 일회성 요청을 제출하는 플릿을 생성합니까? 아니면 시간 경과에 따라 목표 용량을 유지하는 플릿을 생성합니까?  | [EC2 플릿 및 스팟 플릿 요청 유형](ec2-fleet-request-type.md) | 
| 스팟 인스턴스 | 플릿에 스팟 인스턴스를 포함할 계획입니까? 가능한 최저 가격으로 인스턴스를 프로비저닝할 수 있도록 플릿을 계획할 때 스팟 모범 사례를 검토하고 사용하세요. | [Amazon EC2 스팟 모범 사례](spot-best-practices.md) | 
| 플릿의 지출 한도 | 시간당 플릿에 지불할 요금을 제한하고 싶으신가요? | [EC2 플릿 또는 스팟 플릿에 지출 한도 설정](ec2-fleet-control-spending.md) | 
| 인스턴스 유형 및 속성 기반 인스턴스 유형 선택 |  플릿의 인스턴스 유형을 지정하시겠습니까? 아니면 Amazon EC2에서 애플리케이션 요구 사항을 충족하는 인스턴스 유형을 선택하도록 하시겠습니까?  | [EC2 플릿 또는 스팟 플릿의 인스턴스 유형 선택에 대한 속성 지정](ec2-fleet-attribute-based-instance-type-selection.md) | 
| 인스턴스 가중치 부여 | Amazon EC2가 원하는 목표 용량을 충족하기 위해 사용 가능한 인스턴스 유형 조합을 선택할 수 있도록 각 인스턴스 유형에 컴퓨팅 용량과 성능에 해당하는 가중치를 할당하시겠습니까? | [인스턴스 가중치를 사용하여 EC2 플릿 또는 스팟 플릿의 비용 및 성능 관리](ec2-fleet-instance-weighting.md) | 
| 할당 전략 | 플릿의 스팟 인스턴스와 온디맨드 인스턴스에 사용할 가용 용량, 가격 또는 인스턴스 유형을 최적화할지 여부를 결정하시겠습니까? | [할당 전략을 사용하여 EC2 플릿 또는 스팟 플릿이 스팟 및 온디맨드 용량을 충족하는 방법 결정](ec2-fleet-allocation-strategy.md) | 
| 용량 재조정 | 플릿에서 위험에 처한 스팟 인스턴스를 자동으로 교체하기를 원하십니까? | [EC2 플릿 및 스팟 플릿의 용량 리밸런싱을 사용하여 위험이 있는 스팟 인스턴스 교체](ec2-fleet-capacity-rebalance.md) | 
| 온디맨드 용량 예약 | 플릿의 온디맨드 인스턴스 용량을 예약하시겠습니까? | [용량 예약을 사용하여 EC2 플릿의 온디맨드 용량 예약](ec2-fleet-on-demand-capacity-reservations.md) | 

# EC2 플릿 및 스팟 플릿 요청 유형
<a name="ec2-fleet-request-type"></a>

EC2 플릿 또는 스팟 플릿에 대한 요청 유형에 따라 요청이 동기식 또는 비동기식인지, 원하는 목표 용량을 일회성으로 요청할지 또는 시간의 흐름에 따라 목표 용량을 유지하는 작업을 지속적으로 할지 여부를 정의합니다. 플릿을 구성할 때 요청 유형을 지정해야 합니다.

EC2 플릿 및 스팟 플릿 모두 두 가지 요청 유형(`request` 및`maintain`)을 제공합니다. 추가로 EC2 플릿은 `instant`라는 세 번째 요청 유형을 제공합니다.플릿 요청 유형

`instant`(EC2 플릿만 해당)  
요청 유형을 `instant`로 구성하면 EC2 집합이 원하는 용량을 얻기 위한 동기식 일회성 요청을 합니다. API 응답에서 시작된 인스턴스가 반환되고 시작할 수 없는 인스턴스에 대한 오류가 제공됩니다. 자세한 내용은 [instant 유형의 EC2 플릿 구성](instant-fleet.md) 섹션을 참조하세요.

`request`  
요청 유형을 `request`로 구성하면 플릿이 원하는 용량을 얻기 위한 비동기식 일회성 요청을 합니다. 스팟 중단으로 인해 용량이 감소할 경우 플릿은 스팟 인스턴스를 보충하려고 하지 않으며 용량을 사용할 수 없는 경우 대체 스팟 용량에서 요청을 제출하지 않습니다. 콘솔을 사용하여 `request` 유형의 스팟 플릿을 생성하는 경우 **목표 용량 유지** 확인란을 선택 취소합니다.

`maintain`(기본값)  
요청 유형을 `maintain`으로 구성하면 플릿은 원하는 용량을 얻기 위한 비동기식 요청을 하고 중단된 모든 스팟 인스턴스를 자동으로 보충해 용량을 유지합니다. 콘솔을 사용하여 `maintain` 유형의 스팟 플릿을 생성하는 경우 **목표 용량 유지** 확인란을 선택합니다.

# instant 유형의 EC2 플릿 구성
<a name="instant-fleet"></a>

*인스턴트* 유형의 EC2 플릿은 원하는 용량을 시작하는 시도를 단 한 번만 하는 동기식 일회성 요청입니다. API 응답에는 시작할 수 없는 인스턴스에 대한 오류와 함께 시작된 인스턴스가 나열됩니다. *인스턴스* 유형의 EC2 플릿을 사용하면 몇 가지 이점이 있으며, 이 문서에서는 그러한 이점을 설명합니다. 예제 구성은 문서 끝 부분에 나와 있습니다.

EC2 인스턴스를 시작하기 위해 시작 전용 API가 필요한 워크로드의 경우 RunInstances API를 사용할 수 있습니다. 하지만 RunInstances를 사용할 경우 온디맨드 인스턴스 또는 스팟 인스턴스만 시작할 수 있으며 동일한 요청으로 둘 다 시작할 수는 없습니다. 또한 RunInstances를 사용하여 스팟 인스턴스를 시작할 경우 하나의 인스턴스 유형과 하나의 가용 영역으로 스팟 인스턴스 요청이 제한됩니다. 이는 단일 스팟 용량 풀(인스턴스 유형과 가용 영역이 동일한 미사용 인스턴스의 집합)을 대상으로 합니다. 스팟 용량 풀에 요청을 처리하기에 충분한 스팟 인스턴스 용량이 없는 경우 RunInstances 호출이 실패합니다.

RunInstances를 사용하여 스팟 인스턴스를 시작하는 대신, `type` 파라미터를 `instant`로 설정하여 CreateFleet API를 사용하면 다음과 같은 이점을 얻을 수 있습니다.
+ **한 번의 요청으로 온디맨드 인스턴스와 스팟 인스턴스를 모두 시작합니다.** EC2 플릿은 온디맨드 인스턴스, 스팟 인스턴스 또는 둘 모두를 시작할 수 있습니다. 스팟 인스턴스에 대한 요청은 요청의 시간당 최대 가격이 현재 스팟 가격을 초과하고 사용 가능한 용량이 있으면 수행됩니다.
+ **스팟 인스턴스의 가용성이 높아집니다.** `instant` 유형의 EC2 플릿을 사용하여 [스팟 모범 사례](spot-best-practices.md)에 따라 스팟 인스턴스를 시작하면 다음과 같은 이점이 있습니다.
  + **스팟 모범 사례: 인스턴스 유형 및 가용 영역에 대한 유연성 유지.**

    이점: 여러 인스턴스 유형 및 가용 영역을 지정하면 스팟 용량 풀 수가 늘어납니다. 이렇게 하면 스팟 서비스에서 원하는 스팟 컴퓨팅 용량을 찾고 할당하게 될 가능성이 더 높아집니다. 일반적으로 각 워크로드에 대해 최소 10개의 인스턴스 유형을 유연하게 선택할 수 있어야 하고, 모든 가용 영역이 VPC에 사용하도록 구성되어야 합니다.
  + **스팟 모범 사례: price-capacity-optimized할당 전략 사용**

    이점: `price-capacity-optimized` 할당 전략은 가장 적합한 스팟 용량 풀에서 인스턴스를 식별한 후 이 풀 중에서 가격이 가장 낮은 것에서 인스턴스를 자동으로 프로비저닝합니다. 스팟 인스턴스 용량이 최적의 용량을 가진 풀에서 소싱되기 때문에 Amazon EC2에서 해당 용량을 다시 필요로 하여 스팟 인스턴스가 중지될 가능성이 줄어듭니다.
+ **더욱 다양한 기능 세트에 액세스할 수 있습니다.** 시작 전용 API가 필요한 워크로드의 경우나 EC2 플릿이 인스턴스를 관리하도록 하지 않고 인스턴스의 수명 주기를 직접 관리하려는 경우, [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) API 대신 `instant` 유형의 EC2 플릿을 사용합니다. 다음 예에서 보듯이 EC2 플릿은 RunInstances보다 다양한 기능 세트를 제공합니다. 다른 모든 워크로드의 경우, ELB 지원 애플리케이션, 컨테이너화된 워크로드, 대기열 처리 작업 등 다양한 워크로드를 위한 보다 포괄적인 기능 세트를 제공하는 Amazon EC2 Auto Scaling을 사용해야 합니다.

유형이 인스턴트인 EC2 플릿을 사용하여 인스턴스를 용량 블록으로 내보낼 수 있습니다.** 자세한 내용은 [튜토리얼: 인스턴스를 용량 블록으로 시작하도록 EC2 플릿을 구성](ec2-fleet-launch-instances-capacity-blocks-walkthrough.md) 섹션을 참조하세요.

Amazon EC2 Auto Scaling 및 Amazon EMR과 같은 AWS 서비스는 *인스턴트* 유형의 EC2 플릿을 사용하여 EC2 인스턴스를 시작합니다.

## 인스턴트 유형 EC2 플릿의 사전 조건
<a name="instant-fleet-prerequisites"></a>

EC2 플릿 생성을 위한 사전 조건은 [EC2 Fleet 사전 조건](ec2-fleet-prerequisites.md) 섹션을 참조하세요.

## 인스턴트 EC2 플릿의 작동 방식
<a name="how-instant-fleet-works"></a>

`instant` 유형의 EC2 플릿으로 작업할 때 발생하는 이벤트 순서는 다음과 같습니다.

1. **구성:** [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html) 요청 유형을 `instant`로 구성합니다. 자세한 내용은 [EC2 집합 생성](create-ec2-fleet.md) 섹션을 참조하세요. API 호출을 한 후에는 수정할 수 없습니다.

1. **요청:** API 직접 호출 시 Amazon EC2가 원하는 용량을 얻기 위한 동기식 일회성 요청을 합니다.

1. **응답:** API 응답에는 시작할 수 없는 인스턴스에 대한 오류와 함께 시작된 인스턴스가 나열됩니다.

1. **설명:** EC2 플릿을 설명하고, EC2 플릿과 연결된 인스턴스를 나열하고, EC2 플릿의 기록을 확인할 수 있습니다.

1. **인스턴스 종료:** 언제든지 인스턴스를 종료할 수 있습니다.

1. **플릿 요청 삭제:** 플릿 요청은 수동 또는 자동으로 삭제할 수 있습니다.
   + 수동: 인스턴스가 시작된 후 [플릿 요청을 삭제](delete-fleet.md)할 수 있습니다.

     참고: 삭제된 `instant` 플릿에서 인스턴스를 실행하는 것은 지원되지 않습니다. `instant` 플릿을 삭제하면 Amazon EC2가 모든 인스턴스를 자동으로 종료합니다. 인스턴스가 1,000개 이상인 플릿의 경우 삭제 요청이 실패할 수 있습니다. 플릿에 인스턴스가 1,000개 이상인 경우 먼저 인스턴스를 대부분 수동으로 종료하여 1,000개 이하를 남깁니다. 그런 다음 플릿을 삭제하면 나머지 인스턴스가 자동으로 종료됩니다.
   + 자동: Amazon EC2는 다음 중 하나 이후에 플릿 요청을 삭제합니다.
     + 모든 인스턴스가 종료됩니다.
     + 플릿이 인스턴스를 시작하지 못합니다.

## 예제
<a name="instant-fleet-examples"></a>

다음 예에서는 다양한 사용 사례에서 `instant` 유형의 EC2 플릿을 사용하는 방법을 보여줍니다. EC2 CreateFleet API 파라미터 사용에 대한 자세한 내용은 *Amazon EC2 API 참조*에서 [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html)을 참조하세요.

**Topics**
+ [예 1: 용량 최적화 할당 전략을 사용하여 여러 스팟 인스턴스 시작](#instant-fleet-example-1)
+ [예 2: 용량 최적화 할당 전략을 사용하여 단일 스팟 인스턴스 시작](#instant-fleet-example-2)
+ [예 3: 인스턴스 가중치를 사용하여 스팟 인스턴스 시작](#instant-fleet-example-3)
+ [예제 4: 단일 가용 영역 내에서 스팟 인스턴스 시작](#instant-fleet-example-4)
+ [예 5: 단일 가용 영역 내에서 단일 인스턴스 유형의 스팟 인스턴스 시작](#instant-fleet-example-5)
+ [예 6: 최소 목표 용량을 시작할 수 있는 경우에만 스팟 인스턴스 시작](#instant-fleet-example-6)
+ [예 7: 단일 가용 영역에서 동일한 인스턴스 유형으로 최소 목표 용량을 시작할 수 있는 경우에만 스팟 인스턴스 시작](#instant-fleet-example-7)
+ [예 8: 여러 시작 템플릿을 사용하여 인스턴스 시작](#instant-fleet-example-8)
+ [예 9: 기본 온디맨드 인스턴스를 사용하여 스팟 인스턴스 시작](#instant-fleet-example-9)
+ [예 10: 용량 예약 및 우선 순위별 할당 전략을 사용한 온디맨드 인스턴스를 기반으로 용량 최적화 할당 전략을 사용하여 스팟 인스턴스 시작](#instant-fleet-example-10)
+ [예 11: capacity-optimized-prioritized 할당 전략을 사용하여 스팟 인스턴스 시작](#instant-fleet-example-11)
+ [예제 12: AMI ID 대신 Systems Manager 파라미터 지정](#instant-fleet-example-12)

### 예 1: 용량 최적화 할당 전략을 사용하여 여러 스팟 인스턴스 시작
<a name="instant-fleet-example-1"></a>

다음 예에서는 `instant` 유형의 EC2 플릿에 필요한 파라미터, 즉 시작 템플릿, 목표 용량, 기본 구매 옵션, 시작 템플릿 재정의를 지정합니다.
+ 시작 템플릿은 시작 템플릿 이름과 버전 번호로 식별됩니다.
+ 12개의 시작 템플릿 재정의는 각각 별도의 가용 영역에 있는 4개의 서로 다른 인스턴스 유형과 3개의 서브넷을 지정합니다. 각 인스턴스 유형 및 서브넷 조합은 스팟 용량 풀을 정의하여 12개의 스팟 용량 풀을 생성합니다.
+ 플릿의 목표 용량은 인스턴스 20개입니다.
+ 기본 구매 옵션은 `spot`으로, 이 옵션을 사용하면 플릿은 시작하는 인스턴스의 수에 대한 최적의 용량을 가진 스팟 용량 풀로 스팟 인스턴스 20개를 시작하려고 시도합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 예 2: 용량 최적화 할당 전략을 사용하여 단일 스팟 인스턴스 시작
<a name="instant-fleet-example-2"></a>

TotalTargetCapacity를 1로 설정하여 `instant` 유형의 여러 EC2 플릿에 대해 API 호출을 수행하면 한 번에 하나의 스팟 인스턴스를 최적의 용량으로 시작할 수 있습니다.

다음 예에서는 인스턴트 유형의 EC2 플릿에 필요한 파라미터, 즉 시작 템플릿, 목표 용량, 기본 구매 옵션 및 시작 템플릿 재정의를 지정합니다. 시작 템플릿은 시작 템플릿 이름과 버전 번호로 식별됩니다. 12개의 시작 템플릿 재정의는 각각 별도의 가용 영역에 있는 4개의 서로 다른 인스턴스 유형과 3개의 서브넷을 사용합니다. 플릿의 목표 용량이 인스턴스 1개이고 기본 구매 옵션은 스팟입니다. 이 경우 플릿이 용량 최적화 할당 전략에 따라 12개의 스팟 용량 풀 중 하나에서 스팟 인스턴스를 시작함으로써 최적의 용량 풀에서 스팟 인스턴스를 시작하려고 시도합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 1,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 예 3: 인스턴스 가중치를 사용하여 스팟 인스턴스 시작
<a name="instant-fleet-example-3"></a>

다음 예제에서는 인스턴스 가중치를 사용하는데, 이는 곧 인스턴스 시간이 기준이 아니라 단위 시간을 기준으로 한 가격이라는 의미입니다. 각 시작 구성에는 한 단위의 워크로드에 15GB의 메모리와 4개의 vCPU가 필요하다고 가정할 때 인스턴스에서 실행할 수 있는 워크로드 단위 수에 따라 서로 다른 인스턴스 유형과 가중치가 나열됩니다. 예를 들어 m5.xlarge(vCPU 4개와 16GB 메모리)는 한 단위를 실행할 수 있으며 가중치가 1이고, m5.2xlarge(vCPU 8개와 32GB 메모리)는 두 단위를 실행할 수 있으며 가중치가 2인 식입니다. 총 목표 용량은 40단위로 설정됩니다. 기본 구매 옵션은 스팟이며 할당 전략은 용량 최적화입니다. 이 경우 용량 최적화 할당 전략에 따라 40개의 m5.xlarge(40 나누기 1), 20개의 m5.2xlarge(40 나누기 2), 10개의 m5.4xlarge(40 나누기 4), 5개의 m5.8xlarge(40 나누기 8) 또는 원하는 용량까지 가중치가 적용된 인스턴스 유형의 조합이 사용됩니다.

자세한 내용은 [인스턴스 가중치를 사용하여 EC2 플릿 또는 스팟 플릿의 비용 및 성능 관리](ec2-fleet-instance-weighting.md) 섹션을 참조하세요.

```
{
   "SpotOptions":{
      "AllocationStrategy":"capacity-optimized"
   },
   "LaunchTemplateConfigs":[
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"m5.xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":1
            },
            {
               "InstanceType":"m5.xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":1
            },
            {
               "InstanceType":"m5.xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":1
            },
            {
               "InstanceType":"m5.2xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":2
            },
            {
               "InstanceType":"m5.2xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":2
            },
            {
               "InstanceType":"m5.2xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":2
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":4
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":4
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":4
            },
            {
               "InstanceType":"m5.8xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":8
            },
            {
               "InstanceType":"m5.8xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":8
            },
            {
               "InstanceType":"m5.8xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":8
            }
         ]
      }
   ],
   "TargetCapacitySpecification":{
      "TotalTargetCapacity":40,
      "DefaultTargetCapacityType":"spot"
   },
   "Type":"instant"
}
```

### 예제 4: 단일 가용 영역 내에서 스팟 인스턴스 시작
<a name="instant-fleet-example-4"></a>

스팟 옵션 SingleAvailabilityZone을 true로 설정하여 단일 가용 영역에서 모든 인스턴스를 시작하도록 플릿을 구성할 수 있습니다.

12개의 시작 템플릿 재정의는 각각 별도의 가용 영역에 있는 서로 다른 인스턴스 유형과 서브넷을 사용하지만 가중치가 적용된 용량은 동일합니다. 총 목표 용량은 인스턴스 20개이고, 기본 구매 옵션은 스팟이며, 스팟 할당 전략은 용량 최적화입니다. EC2 플릿은 시작 사양을 사용하여 최적의 용량을 가진 스팟 용량 풀에서 단일 AZ의 스팟 인스턴스 20개를 모두 시작합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleAvailabilityZone": true
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 예 5: 단일 가용 영역 내에서 단일 인스턴스 유형의 스팟 인스턴스 시작
<a name="instant-fleet-example-5"></a>

SpotOptions SingleInstanceType을 true로 설정하고, SingleAvailabilityZone을 true로 설정하여 단일 가용 영역에서 동일한 인스턴스 유형의 인스턴스를 모두 시작하도록 플릿을 구성할 수 있습니다.

12개의 시작 템플릿 재정의는 각각 별도의 가용 영역에 있는 서로 다른 인스턴스 유형과 서브넷을 사용하지만 가중치가 적용된 용량은 동일합니다. 총 목표 용량은 인스턴스 20개이고, 기본 구매 옵션은 스팟이며, 스팟 할당 전략은 용량 최적화입니다. EC2 플릿은 시작 사양을 사용하여 최적의 용량을 가진 스팟 인스턴스 풀에서 단일 AZ의 인스턴스 유형이 동일한 스팟 인스턴스 20개를 시작합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 예 6: 최소 목표 용량을 시작할 수 있는 경우에만 스팟 인스턴스 시작
<a name="instant-fleet-example-6"></a>

스팟 옵션 MinTargetCapacity를 한 번에 시작할 최소 목표 용량으로 설정함으로써 최소 목표 용량을 시작할 수 있는 경우에만 인스턴스를 시작하도록 플릿을 구성할 수 있습니다.

MinTargetCapacity를 지정할 때는 SingleInstanceType 또는 SingleAvailabilityZone 파라미터 중 하나 이상을 지정해야 합니다. 이 예제에서는 SingleInstanceType이 지정되므로 20개 인스턴스 모두 동일한 인스턴스 유형을 사용해야 합니다.

12개의 시작 템플릿 재정의는 각각 별도의 가용 영역에 있는 서로 다른 인스턴스 유형과 서브넷을 사용하지만 가중치가 적용된 용량은 동일합니다. 총 목표 용량과 최소 목표 용량이 모두 인스턴스 20개이고, 기본 구매 옵션은 스팟이며, 스팟 할당 전략은 용량 최적화입니다. EC2 플릿은 20개의 인스턴스를 동시에 시작할 수 있는 경우에만 시작 템플릿 재정의를 사용하여 최적의 용량을 가진 스팟 용량 풀에서 20개의 스팟 인스턴스를 시작합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleInstanceType": true,
        "MinTargetCapacity": 20
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 예 7: 단일 가용 영역에서 동일한 인스턴스 유형으로 최소 목표 용량을 시작할 수 있는 경우에만 스팟 인스턴스 시작
<a name="instant-fleet-example-7"></a>

스팟 옵션 MinTargetCapacity를 한 번에 시작할 최소 목표 용량으로 설정하고 SingleInstanceType 및 SingleAvailabilityZone 옵션을 사용함으로써 단일 가용 영역에서 단일 인스턴스 유형으로 최소 목표 용량을 시작할 수 있는 경우에만 인스턴스를 시작하도록 플릿을 구성할 수 있습니다.

시작 템플릿을 재정의하는 12개의 시작 사양은 각각 별도의 가용 영역에 있는 서로 다른 인스턴스 유형과 서브넷을 사용하지만 가중치가 적용된 용량은 동일합니다. 총 목표 용량과 최소 목표 용량이 모두 인스턴스 20개이고, 기본 구매 옵션은 스팟이며, 스팟 할당 전략은 용량 최적화이고, SingleInstanceType과 SingleAvailabilityZone이 true입니다. EC2 플릿은 20개의 인스턴스를 동시에 시작할 수 있는 경우에만 시작 사양을 사용하여 최적의 용량을 가진 스팟 용량 풀에서 단일 AZ의 인스턴스 유형이 동일한 스팟 인스턴스 20개를 시작합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true,
        "MinTargetCapacity": 20
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.4xlarge",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.4xlarge",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 예 8: 여러 시작 템플릿을 사용하여 인스턴스 시작
<a name="instant-fleet-example-8"></a>

여러 시작 템플릿을 지정하여 인스턴스 유형 또는 인스턴스 유형 그룹에 따라 서로 다른 시작 사양으로 인스턴스를 시작하도록 플릿을 구성할 수 있습니다. 이 예에서는 인스턴스 유형에 따라 서로 다른 EBS 볼륨 크기를 원하며, 이는 시작 템플릿 ec2-fleet-lt-4xl, ec2-fleet-lt-9xl, ec2-fleet-lt-18xl에 구성되어 있습니다.

이 예에서는 크기에 따라 3개의 인스턴스 유형에 3개의 서로 다른 시작 템플릿을 사용하고 있습니다. 모든 시작 템플릿의 시작 사양 재정의에는 인스턴스 유형의 vCPU 수에 따라 인스턴스 가중치를 사용합니다. 총 목표 용량은 144 단위이고, 기본 구매 옵션은 스팟이며, 스팟 할당 전략은 용량 최적화입니다. EC2 플릿은 용량 최적화 할당 전략에 따라 시작 템플릿 ec2-fleet-4xl을 사용하여 9개의 c5n.4xlarge(144 나누기 16)를 시작하거나, 시작 템플릿 ec2-fleet-9xl을 사용하여 4개의 c5n.9xlarge(144 나누기 36)를 시작하거나, 시작 템플릿 ec2-fleet-18xl을 사용하여 2개의 c5n.18xlarge(144 나누기 72)를 시작하거나, 원하는 용량까지 가중치가 적용된 인스턴스 유형의 조합을 시작할 수 있습니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt-18xl",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5n.18xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":72
            },
            {
               "InstanceType":"c5n.18xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":72
            },
            {
               "InstanceType":"c5n.18xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":72
            }
         ]
      },
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt-9xl",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5n.9xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":36
            },
            {
               "InstanceType":"c5n.9xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":36
            },
            {
               "InstanceType":"c5n.9xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":36
            }
         ]
      },
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt-4xl",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5n.4xlarge",
               "SubnetId":"subnet-fae8c380",
               "WeightedCapacity":16
            },
            {
               "InstanceType":"c5n.4xlarge",
               "SubnetId":"subnet-e7188bab",
               "WeightedCapacity":16
            },
            {
               "InstanceType":"c5n.4xlarge",
               "SubnetId":"subnet-49e41922",
               "WeightedCapacity":16
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 144,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 예 9: 기본 온디맨드 인스턴스를 사용하여 스팟 인스턴스 시작
<a name="instant-fleet-example-9"></a>

다음 예제에서는 총 목표 용량인 인스턴스 20개를 플릿에 지정하고 목표 용량은 온디맨드 인스턴스 5개로 지정합니다. 기본 구매 옵션은 스팟입니다. 지정한 대로 플릿은 온디맨드 인스턴스 5개를 시작하지만 총 목표 용량을 충족하려면 인스턴스를 15개 더 시작해야 합니다. 차이에 대한 구매 옵션이 TotalTargetCapacity – OnDemandTargetCapacity = DefaultTargetCapacityType으로 계산되어 플릿이 용량 최적화 할당 전략에 따라 12개의 스팟 용량 풀 중 하나에서 15개의 스팟 인스턴스를 시작합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab"
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922"
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "OnDemandTargetCapacity": 5,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 예 10: 용량 예약 및 우선 순위별 할당 전략을 사용한 온디맨드 인스턴스를 기반으로 용량 최적화 할당 전략을 사용하여 스팟 인스턴스 시작
<a name="instant-fleet-example-10"></a>

용량 예약에 대한 사용 전략을 use-capacity-reservations-first로 설정하여 기본 목표 용량 유형이 스팟인 온디맨드 인스턴스의 기반을 시작할 때 온디맨드 용량 예약부터 사용하도록 플릿을 구성할 수 있습니다. 그리고 여러 인스턴스 풀에 미사용 용량 예약이 있는 경우, 선택한 온디맨드 할당 전략이 적용됩니다. 이 예에서 온디맨드 할당 전략은 우선 순위별입니다.

이 예에서는 사용할 수 있는 미사용 용량 예약이 6개 있습니다. 이는 플릿의 목표 온디맨드 용량인 온디맨드 인스턴스 10개보다 적습니다.

이 계정은 2개의 풀에 다음과 같은 미사용 용량 예약 6개를 가지고 있습니다. 각 풀의 용량 예약 수는 AvailableInstanceCount로 표시됩니다.

```
{
    "CapacityReservationId": "cr-111", 
    "InstanceType": "m5.large", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 3, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
 
{
    "CapacityReservationId": "cr-222", 
    "InstanceType": "c5.large", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 3, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
```

다음 플릿 구성에서는 이 예제와 관련된 구성만 보여 줍니다. 온디맨드 할당 전략은 우선 순위별이고, 용량 예약의 사용 전략은 use-capacity-reservations-first입니다. 스팟 할당 전략은 용량 최적화입니다. 총 목표 용량은 20이고, 온디맨드 목표 용량은 10이며, 기본 목표 용량 유형은 스팟입니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized"
    },
    "OnDemandOptions":{
       "CapacityReservationOptions": {
         "UsageStrategy": "use-capacity-reservations-first"
       },
       "AllocationStrategy":"prioritized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 2.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 3.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 4.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 5.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 6.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 7.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 8.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 9.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 10.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 11.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 12.0
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "OnDemandTargetCapacity": 10,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

이전 구성을 사용하여 인스턴트 플릿을 생성하면 목표 용량을 충족하기 위해 다음 20개의 인스턴스가 시작됩니다.
+ us-east-1a의 c5.large 온디맨드 인스턴스 7개 – us-east-1a의 c5.large가 첫 번째 우선 순위이고 사용 가능한 미사용 c5.large 용량 예약은 3개입니다. 먼저 용량 예약을 사용하여 온디맨드 인스턴스 3개를 시작하고, 온디맨드 할당 전략(이 예에서는 우선 순위별)에 따라 4개의 온디맨드 인스턴스를 추가로 시작합니다.
+ us-east-1a의 m5.large 온디맨드 인스턴스 3개 – us-east-1a의 m5.large가 두 번째 우선 순위이고 사용 가능한 미사용 m5.large 용량 예약은 3개입니다.
+ 용량 최적화 할당 전략에 따라 최적의 용량을 가진 12개의 스팟 용량 풀 중 하나에서 10개의 스팟 인스턴스를 시작합니다.

플릿이 시작된 후, [describe-capacity-reservations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html)를 실행하여 미사용 용량 예약이 몇 개나 남아 있는지 확인할 수 있습니다. 이 예에서는 c5.large 및 m5.large 용량 예약이 모두 사용되었음을 보여주는 다음과 같은 응답이 나타납니다.

```
{
    "CapacityReservationId": "cr-111",
    "InstanceType": "m5.large",  
    "AvailableInstanceCount": 0
}
 
{
    "CapacityReservationId": "cr-222",
    "InstanceType": "c5.large", 
    "AvailableInstanceCount": 0
}
```

### 예 11: capacity-optimized-prioritized 할당 전략을 사용하여 스팟 인스턴스 시작
<a name="instant-fleet-example-11"></a>

다음 예에서는 인스턴트 유형의 EC2 플릿에 필요한 파라미터, 즉 시작 템플릿, 목표 용량, 기본 구매 옵션 및 시작 템플릿 재정의를 지정합니다. 시작 템플릿은 시작 템플릿 이름과 버전 번호로 식별됩니다. 시작 템플릿을 재정의하는 12개의 시작 사양은 각각 별도의 가용 영역에 있는 4개의 서로 다른 인스턴스 유형(우선 순위가 서로 다름)과 3개의 서브넷을 사용합니다. 플릿의 목표 용량이 20개의 인스턴스이고 기본 구매 옵션은 스팟이므로, 플릿이 최선을 다해 우선 순위를 구현하지만 용량을 최우선으로 하는 capacity-optimized-prioritized 할당 전략에 따라 12개의 스팟 용량 풀 중 하나에서 20개의 스팟 인스턴스를 시작하려고 시도합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized-prioritized"
    },
    "LaunchTemplateConfigs": [
      {
         "LaunchTemplateSpecification":{
            "LaunchTemplateName":"ec2-fleet-lt1",
            "Version":"$Latest"
         },
         "Overrides":[
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 1.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 2.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 2.0
            },
            {
               "InstanceType":"c5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 2.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 3.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 3.0
            },
            {
               "InstanceType":"m5.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 3.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-fae8c380",
               "Priority": 4.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-e7188bab",
               "Priority": 4.0
            },
            {
               "InstanceType":"m5d.large",
               "SubnetId":"subnet-49e41922",
               "Priority": 4.0
            }
         ]
      }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

### 예제 12: AMI ID 대신 Systems Manager 파라미터 지정
<a name="instant-fleet-example-12"></a>

다음 예제에서는 시작 템플릿을 사용하여 플릿의 인스턴스에 대한 구성을 지정합니다. 이 예제에서 `ImageId`의 경우 AMI ID를 지정하는 대신 AMI가 Systems Manager 파라미터로 참조됩니다. 인스턴스 시작 시 Systems Manager 파라미터는 AMI ID로 확인됩니다.

이 예제에서 Systems Manager 파라미터는 유효한 `resolve:ssm:golden-ami` 형식으로 지정됩니다. Systems Manager 파라미터의 경우 다른 유효한 형식도 있습니다. 자세한 내용은 [AMI ID 대신 Systems Manager 파라미터 사용](create-launch-template.md#use-an-ssm-parameter-instead-of-an-ami-id) 섹션을 참조하세요.

**참고**  
플릿 유형은 `instant`여야 합니다. 다른 플릿 유형에서는 AMI ID 대신 Systems Manager 파라미터 지정을 지원하지 않습니다.

```
{
    "LaunchTemplateData": {
        "ImageId": "resolve:ssm:golden-ami",
        "InstanceType": "m5.4xlarge",
        "TagSpecifications": [{
            "ResourceType": "instance",
            "Tags": [{
                "Key": "Name",
                "Value": "webserver"
            }]
        }]
    }
}
```

# EC2 플릿 또는 스팟 플릿에 지출 한도 설정
<a name="ec2-fleet-control-spending"></a>

EC2 플릿 또는 스팟 플릿에 시간당 지출할 금액을 제한할 수 있습니다. 지출 한도에 도달하면 플릿은 목표 용량에 도달하지 않은 경우에도 인스턴스 실행을 중지합니다.

온디맨드 인스턴스와 스팟 인스턴스에는 별도의 지출 한도가 있습니다.

**EC2 플릿의 온디맨드 인스턴스 및 스팟 인스턴스에 대한 지출 한도 구성**  
[create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 명령과 다음 파라미터를 사용합니다.
+ 온디맨드 인스턴스의 경우: `OnDemandOptions` 구조의 `MaxTotalPrice` 필드에 지출 한도를 지정합니다.
+ 스팟 인스턴스의 경우: `SpotOptions` 구조의 `MaxTotalPrice` 필드에 지출 한도를 지정합니다.

**스팟 플릿의 온디맨드 인스턴스 및 스팟 인스턴스에 대한 지출 한도 구성**  
Amazon EC2 콘솔 또는 AWS CLI를 사용하여 지출 한도를 구성할 수 있습니다.

(콘솔) 스팟 플릿을 생성할 때 **스팟 인스턴스 최대 비용 설정** 확인란을 선택한 다음 **최대 비용 설정(시간당)**에 값을 입력합니다. 자세한 내용은 [정의된 파라미터를 사용하여 스팟 플릿 요청 생성](create-spot-fleet.md#create-spot-fleet-advanced)의 6.e 단계를 참조하세요.

(AWS CLI) [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 명령과 다음 파라미터를 사용합니다.
+ 온디맨드 인스턴스의 경우: `OnDemandMaxTotalPrice` 필드에 지출 한도를 지정합니다.
+ 스팟 인스턴스의 경우: `SpotMaxTotalPrice` 필드에 지출 한도를 지정합니다.

## 예제
<a name="ec2-fleet-spending-limit-examples"></a>

다음 예제와 같이 이 작업을 두 가지 시나리오로 수행할 수 있습니다. 첫 번째 예제에서 플릿은 온디맨드 인스턴스(`OnDemandTargetCapacity`)에 설정된 목표 용량에 도달하면 온디맨드 인스턴스 시작을 중지합니다. 두 번째 예제에서 플릿은 온디맨드 인스턴스(`MaxTotalPrice`)에 대해 시간당 지불할 최대 금액에 도달하면 온디맨드 인스턴스 실행을 중지합니다.

**예제: 목표 용량에 도달할 때 온디맨드 인스턴스 실행 중지**

다음과 같은 `m4.large` 온디맨드 인스턴스 요청 시:
+ 온디맨드 가격: 시간당 0.10 USD
+ `OnDemandTargetCapacity`: 10
+ `MaxTotalPrice`: 1.50 USD

플릿은 온디맨드 인스턴스의 경우 최대 1.00 USD(10개 인스턴스 x 0.10 USD)가 `MaxTotalPrice` 1.50 USD를 초과하지 않기 때문에 10개의 온디맨드 인스턴스를 시작합니다.

**예제: 최대 총 가격에 도달할 때 온디맨드 인스턴스 실행 중지**

다음과 같은 `m4.large` 온디맨드 인스턴스 요청 시:
+ 온디맨드 가격: 시간당 0.10 USD
+ `OnDemandTargetCapacity`: 10
+ `MaxTotalPrice`: 0.80 USD

플릿이 온디맨드 대상 용량(온디맨드 인스턴스 10개)을 시작하면 시간당 총 비용은 1.00 USD입니다. 온디맨드 인스턴스의 `MaxTotalPrice`에 대해 지정된 금액(0.80 USD) 보다 높습니다. 지불할 금액보다 더 많은 지출을 방지하기 위해 플릿은 8개의 온디맨드 인스턴스(온디맨드 대상 용량 미만)만 실행합니다. 더 많이 실행하면 온디맨드 인스턴스의 `MaxTotalPrice`를 초과할 수 있기 때문입니다.

## 성능 순간 확장 가능 인스턴스
<a name="ec2-fleet-burstable-spot-instances"></a>

[버스트 가능 성능 인스턴스 유형](burstable-performance-instances.md)을 사용하여 스팟 인스턴스를 시작하고 CPU 크레딧 발생에 대한 유휴 시간 없이 즉시 짧은 기간 동안 버스트 가능 성능 스팟 인스턴스를 사용할 계획인 경우 [표준 모드](burstable-performance-instances-standard-mode.md)로 시작하여 높은 비용 지불을 방지하는 것이 좋습니다. 버스팅 가능 성능 스팟 인스턴스를 [무제한 모드](burstable-performance-instances-unlimited-mode.md)로 시작하고 CPU를 즉시 버스트하는 경우 버스팅에 대한 잉여 크레딧을 소모하게 됩니다. 인스턴스를 짧은 기간 동안 사용하는 경우 인스턴스에서 잉여 크레딧을 지불할 정도의 CPU 크레딧이 발생할 시간이 없습니다. 인스턴스를 종료할 때 잉여 크레딧에 대한 요금이 청구됩니다.

무제한 모드는 버스팅에 대한 CPU 크레딧이 발생할 정도로 인스턴스 실행이 긴 경우에만 버스팅 가능 성능 스팟 인스턴스에 적합합니다. 그렇게 하지 않으면 잉여 크레딧 비용을 지불하면 버스트 가능 성능 스팟 인스턴스가 다른 인스턴스를 사용하는 것보다 비용이 많이 듭니다. 자세한 내용은 [무제한 모드 대 고정 CPU 사용 시기](burstable-performance-instances-unlimited-mode-concepts.md#when-to-use-unlimited-mode) 섹션을 참조하세요.

시작 크레딧은 효율적인 컴퓨팅 리소스를 제공하여 인스턴스를 구성함으로써 T2 인스턴스에 대한 생산적인 최초 시작 환경을 제공하는 것을 목적으로 합니다. 새 시작 크레딧에 액세스하기 위한 T2 인스턴스의 반복된 시작은 허용되지 않습니다. 지속적인 CPU가 필요한 경우 (일정 기간 동안 유휴 상태로 둠으로써) 크레딧을 얻고, T2 스팟 인스턴스에 [무제한 모드](burstable-performance-instances-unlimited-mode.md)를 사용하거나 전용 CPU를 포함한 인스턴스 유형을 사용할 수 있습니다.

# EC2 플릿 또는 스팟 플릿의 인스턴스 유형 선택에 대한 속성 지정
<a name="ec2-fleet-attribute-based-instance-type-selection"></a>

EC2 플릿 또는 스팟 플릿을 생성할 때 플릿에서 온디맨드 인스턴스 및 스팟 인스턴스를 구성하기 위해 하나 이상의 인스턴스 유형을 지정해야 합니다. 인스턴스 유형을 수동으로 지정하는 작업 대신 인스턴스에 있어야 하는 속성을 지정하면 Amazon EC2는 해당 속성으로 모든 인스턴스 유형을 식별합니다. 이를 *속성 기반 인스턴스 유형 선택*이라고 합니다. 예를 들어 인스턴스에 필요한 최소 및 최대 vCPU 수를 지정할 수 있으며, 플릿은 해당 vCPU 요구 사항을 충족하는 사용 가능한 인스턴스 유형을 사용하여 인스턴스를 시작합니다.

속성 기반 인스턴스 유형 선택은 컨테이너 또는 웹 플릿 실행, 빅 데이터 처리, 지속적 통합 및 배포(CI/CD) 도구 구현 등 사용할 인스턴스 유형을 유연하게 처리하는 워크로드 및 프레임워크에 이상적입니다.

**장점**

속성 기반 인스턴스 유형을 선택하면 다음과 같은 이점이 있습니다.
+ **쉽게 올바른 인스턴스 유형 사용** - 사용 가능한 인스턴스 유형이 너무 많기 때문에 워크로드에 적합한 인스턴스 유형을 찾는 데 시간이 많이 걸릴 수 있습니다. 인스턴스 속성을 지정하면 인스턴스 유형에는 워크로드에 필요한 속성이 자동으로 포함됩니다.
+ **단순화된 구성** - 플릿에 대해 여러 인스턴스 유형을 수동으로 지정하려면 각 인스턴스 유형에 대해 별도의 시작 템플릿 재정의를 생성해야 합니다. 그러나 속성 기반 인스턴스 유형을 선택할 경우 여러 인스턴스 유형을 제공하려면 시작 템플릿 또는 시작 템플릿 재정의에서 인스턴스 속성만 지정하면 됩니다.
+ **새 인스턴스 유형의 자동 사용** - 인스턴스 유형이 아닌 인스턴스 속성을 지정하면 플릿이 릴리스될 때 새로운 세대의 인스턴스 유형을 사용하여 플릿의 구성을 '나중에 교정'할 수 있습니다.
+ **인스턴스 유형 유연성** - 인스턴스 유형이 아닌 인스턴스 속성을 지정하면 플릿은 스팟 인스턴스를 시작하기 위해 다양한 인스턴스 유형 중에서 선택할 수 있으며, 이때 [인스턴스 유형 유연성에 대한 스팟 모범 사례](spot-best-practices.md#be-instance-type-flexible)를 따릅니다.

**Topics**
+ [속성 기반 인스턴스 유형 선택 작동 방법](#ec2fleet-abs-how-it-works)
+ [가격 보호](#ec2fleet-abs-price-protection)
+ [성능 보호](#ec2fleet-abis-performance-protection)
+ [고려 사항](#ec2fleet-abs-considerations)
+ [속성 기반 인스턴스 유형 선택으로 EC2 플릿 생성](#abs-create-ec2-fleet)
+ [속성 기반 인스턴스 유형 선택으로 스팟 플릿 생성](#abs-create-spot-fleet)
+ [유효한 EC2 플릿 구성과 유효하지 않은 구성 예제](#ec2fleet-abs-example-configs)
+ [유효한 스팟 플릿 구성과 유효하지 않은 구성 예제](#spotfleet-abs-example-configs)
+ [지정한 속성을 가진 인스턴스 유형 미리 보기](#ec2fleet-get-instance-types-from-instance-requirements)

## 속성 기반 인스턴스 유형 선택 작동 방법
<a name="ec2fleet-abs-how-it-works"></a>

플릿 구성에서 속성 기반 인스턴스 유형 선택을 사용하려면 인스턴스 유형 목록을 인스턴스에 필요한 인스턴스 속성 목록으로 바꿉니다. EC2 플릿 또는 스팟 플릿은 지정된 인스턴스 속성을 가진 사용 가능한 인스턴스 유형에서 인스턴스를 시작합니다.

**Topics**
+ [인스턴스 속성 유형](#ef-abs-instance-attribute-types)
+ [속성 기반 인스턴스 유형 선택을 구성하는 곳](#ef-abs-where-to-configure)
+ [플릿을 프로비저닝할 때 EC2 플릿 또는 스팟 플릿이 속성 기반 인스턴스 유형 선택을 사용하는 방법](#how-ef-uses-abs)

### 인스턴스 속성 유형
<a name="ef-abs-instance-attribute-types"></a>

컴퓨팅 요구 사항을 표현하기 위해 지정할 수 있는 다음과 같은 몇 가지 인스턴스 속성이 있습니다.
+ **vCPU 수** – 인스턴스당 최소 및 최대 vCPU 수입니다.
+ **메모리** - 인스턴스당 최소 및 최대 메모리 GiB입니다.
+ **로컬 스토리지** - 로컬 스토리지에 EBS를 사용할지 아니면 인스턴스 스토어 볼륨을 사용할지입니다.
+ **성능 버스트 기능** – T4g, T3a, T3 및 T2 유형을 포함한 T 인스턴스 패밀리를 사용할지 여부입니다.

각 속성 및 기본값에 대한 설명은 *Amazon EC2 API Reference*(Amazon EC2 API 레퍼런스)의 [InstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceRequirements.html)를 참조하세요.

### 속성 기반 인스턴스 유형 선택을 구성하는 곳
<a name="ef-abs-where-to-configure"></a>

콘솔을 사용하는지 아니면 AWS CLI를 사용하는지에 따라 속성 기반 인스턴스 유형 선택에 대한 인스턴스 속성을 다음과 같이 지정할 수 있습니다.

콘솔에서 다음 플릿 구성 요소에 있는 인스턴스 속성을 지정할 수 있습니다.
+ 시작 템플릿 및 플릿 요청의 시작 템플릿 참조에서
+ (스팟 플릿만 해당) 플릿 요청에서

AWS CLI에서 다음 플릿 구성 요소 중 하나 또는 모두에 인스턴스 속성을 지정할 수 있습니다.
+ 시작 템플릿 및 플릿 요청의 시작 템플릿 참조에서
+ 시작 템플릿 재정의에서

  다른 AMI를 사용하는 인스턴스를 혼합하려면 여러 시작 템플릿 재정의에서 인스턴스 속성을 지정할 수 있습니다. 예를 들어 다른 인스턴스 유형은 x86 및 ARM 기반 프로세서를 사용할 수 있습니다.
+ (스팟 플릿만 해당) 시작 사양에서

### 플릿을 프로비저닝할 때 EC2 플릿 또는 스팟 플릿이 속성 기반 인스턴스 유형 선택을 사용하는 방법
<a name="how-ef-uses-abs"></a>

EC2 플릿 또는 스팟 플릿은 다음과 같은 방식으로 플릿을 프로비저닝합니다.
+ 지정한 속성을 가진 인스턴스 유형을 식별합니다.
+ 가격 보호를 사용하여 제외할 인스턴스 유형을 결정합니다.
+ 인스턴스 유형이 일치하는 AWS 리전 또는 가용 영역을 기반으로 인스턴스 시작을 고려할 용량 풀을 결정합니다.
+ 지정된 할당 전략을 적용하여 인스턴스를 시작할 용량 풀을 결정합니다.

  속성 기반 인스턴스 유형 선택은 플릿을 프로비저닝할 용량 풀을 선택하지 않습니다. 이는 [할당 전략](ec2-fleet-allocation-strategy.md)의 작업입니다.

  할당 전략을 지정하면 플릿은 지정된 할당 전략에 따라 인스턴스를 시작합니다.
  + 스팟 인스턴스의 경우 속성 기반 인스턴스 유형 선택은 **가격 용량 최적화**, **용량 최적화** 및 **최저 가격**을 지원합니다. **최저 가격** 스팟 할당 전략은 스팟 인스턴스의 중단 위험이 가장 높기 때문에 권장하지 않습니다.
  + 온디맨드 인스턴스의 경우 속성 기반 인스턴스 유형 선택은 **최저 가격** 할당 전략을 지원합니다.
+ 지정된 인스턴스 속성을 가진 인스턴스 유형에 대한 용량이 없으면 인스턴스를 시작할 수 없으며 플릿이 오류를 반환합니다.

## 가격 보호
<a name="ec2fleet-abs-price-protection"></a>

가격 보호는 EC2 플릿 또는 스팟 플릿이 사용자가 지정한 속성에 적합하더라도 너무 비싼 인스턴스 유형을 사용하지 못하도록 방지하는 기능입니다. 가격 보호를 사용하려면 기준 금액을 설정합니다. 그런 다음, Amazon EC2가 해당 속성이 있는 인스턴스 유형을 선택하면 임곗값 이상의 가격이 책정된 인스턴스 유형을 제외합니다.

Amazon EC2가 기준 금액을 계산하는 방법은 다음과 같습니다.
+ Amazon EC2는 먼저 속성과 일치하는 인스턴스 유형 중에서 가장 저렴한 인스턴스 유형을 식별합니다.
+ 그러면 Amazon EC2는 가격 보호 파라미터에 지정한 값(백분율로 표시)을 가져와 식별된 인스턴스 유형의 가격과 곱합니다. 결과는 기준 금액으로 사용되는 가격입니다.

온디맨드 인스턴스와 스팟 인스턴스에는 별도의 기준 금액이 있습니다.

속성 기반 인스턴스 유형 선택으로 플릿을 생성하면 기본적으로 가격 보호가 사용됩니다. 기본값을 유지할 수도 있고 직접 지정할 수도 있습니다.

가격 보호를 끌 수도 있습니다. 가격 보호 기준이 없음을 나타내려면 `999999`와 같은 높은 백분율 값을 지정합니다.

**Topics**
+ [최저 가격의 인스턴스 유형을 식별하는 방법](#ec2fleet-abs-price-protection-lowest-priced)
+ [온디맨드 인스턴스 가격 보호](#ec2fleet-abs-on-demand-price-protection)
+ [스팟 인스턴스 가격 보호](#ec2fleet-abs-spot-price-protection)
+ [가격 보호 임곗값 지정](#ec2fleet-abs-specify-price-protection)

### 최저 가격의 인스턴스 유형을 식별하는 방법
<a name="ec2fleet-abs-price-protection-lowest-priced"></a>

Amazon EC2는 지정된 속성과 일치하는 인스턴스 유형 중 가격이 가장 낮은 인스턴스 유형을 식별하여 기준 금액의 기준이 될 가격을 결정합니다. 이는 다음과 같은 방식으로 수행됩니다.
+ 먼저 속성과 일치하는 현재 세대 C, M 또는 R 인스턴스 유형을 살펴봅니다. 일치하는 항목이 발견되면 가격이 가장 낮은 인스턴스 유형을 식별합니다.
+ 일치하는 항목이 없으면 속성과 일치하는 현재 세대 인스턴스 유형을 모두 찾습니다. 일치하는 항목이 발견되면 가격이 가장 낮은 인스턴스 유형을 식별합니다.
+ 일치하는 항목이 없으면 속성과 일치하는 이전 세대 인스턴스 유형을 찾아 가격이 가장 낮은 인스턴스 유형을 식별합니다.

### 온디맨드 인스턴스 가격 보호
<a name="ec2fleet-abs-on-demand-price-protection"></a>

온디맨드 인스턴스 유형의 가격 보호 기준은 식별된 가격이 가장 낮은 온디맨드 인스턴스 유형(`OnDemandMaxPricePercentageOverLowestPrice`)보다 *높은 백분율*로 계산됩니다. 지불할 의사가 있는 비율을 더 높게 지정합니다. 이 파라미터를 지정하지 않으면 식별된 가격보다 20% 더 높은 가격 보호 기준을 계산하는 데 기본값 `20`이 사용됩니다.

예를 들어 식별된 온디맨드 인스턴스 가격이 `0.4271`이고 `25`를 지정하는 경우 가격 기준 금액은 `0.4271`보다 25% 높습니다. 이는 `0.4271 * 1.25 = 0.533875`로 계산됩니다. 계산된 가격은 온디맨드 인스턴스에 대해 지불할 의사가 있는 최대 가격이며, 이 예제에서 Amazon EC2는 비용이 `0.533875`를 초과하는 모든 온디맨드 인스턴스 유형을 제외합니다.

### 스팟 인스턴스 가격 보호
<a name="ec2fleet-abs-spot-price-protection"></a>

기본적으로 Amazon EC2는 다양한 인스턴스 유형 중에서 일관되게 선택할 수 있도록 최적의 스팟 인스턴스 가격 보호를 자동으로 적용합니다. 가격 보호를 직접 수동으로 설정할 수도 있습니다. 하지만 Amazon EC2가 자동으로 수행하면 스팟 용량이 충족될 가능성을 높일 수 있습니다.

다음 옵션 중 하나를 사용하여 가격 보호를 수동으로 지정할 수 있습니다. 가격 보호를 수동으로 설정하는 경우 첫 번째 옵션을 사용하는 것이 좋습니다.
+ **식별된 최저 가격의 *온디맨드* 인스턴스 유형 *비율***[`MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`]

  예를 들어 식별된 온디맨드 인스턴스 가격이 `0.4271`이고 `60`을 지정하는 경우 가격 기준 금액은 `0.4271`의 60%입니다. 이는 `0.4271 * 0.60 = 0.25626`으로 계산됩니다. 계산된 가격은 스팟 인스턴스에 대해 지불할 의사가 있는 최대 가격이며, 이 예제에서 Amazon EC2는 비용이 `0.25626`를 초과하는 모든 스팟 인스턴스 유형을 제외합니다.
+ **식별된 최저 가격보다 높은 가격의 *스팟* 인스턴스 유형 *비율***[`SpotMaxPricePercentageOverLowestPrice`]

  예를 들어 식별된 스팟 인스턴스 유형 가격이 `0.1808`이고 `25`를 지정하는 경우 가격 기준 금액은 `0.1808`보다 25% 높습니다. 이는 `0.1808 * 1.25 = 0.226`으로 계산됩니다. 계산된 가격은 스팟 인스턴스에 대해 지불할 의사가 있는 최대 가격이며, 이 예제에서 Amazon EC2는 비용이 `0.266`를 초과하는 모든 스팟 인스턴스 유형을 제외합니다. 스팟 가격은 변동될 수 있으므로 가격 보호 기준도 변동될 수 있으므로 이 파라미터를 사용하지 않는 것이 좋습니다.

### 가격 보호 임곗값 지정
<a name="ec2fleet-abs-specify-price-protection"></a>

**AWS CLI를 사용하여 가격 보호 임곗값 지정**

AWS CLI를 사용하여 EC2 플릿 또는 스팟 플릿을 생성하는 동안 속성 기반 인스턴스 유형 선택을 위해 플릿을 구성하고 다음을 수행합니다.
+ 온디맨드 인스턴스 가격 보호 임곗값을 지정하려면 JSON 구성 파일의 `InstanceRequirements` 구조에서 `OnDemandMaxPricePercentageOverLowestPrice`에 대해 가격 보호 임곗값을 백분율로 입력합니다.
+ 스팟 인스턴스 가격 보호 기준을 지정하려면 JSON 구성 파일의 `InstanceRequirements` 구조에서 다음 파라미터 중 **하나를 지정합니다.
  + `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice`에 가격 보호 기준을 백분율로 입력합니다.
  + `SpotMaxPricePercentageOverLowestPrice`에 가격 보호 기준을 백분율로 입력합니다.

자세한 내용은 [속성 기반 인스턴스 유형 선택으로 EC2 플릿 생성](#abs-create-ec2-fleet) 또는 [속성 기반 인스턴스 유형 선택으로 스팟 플릿 생성](#abs-create-spot-fleet) 섹션을 참조하세요.

**(스팟 플릿만 해당) 콘솔을 사용하여 가격 보호 임곗값 지정**

콘솔에서 스팟 플릿을 생성하는 동안 속성 기반 인스턴스 유형 선택을 위해 플릿을 구성하고 다음을 수행합니다.
+ 온디맨드 인스턴스 가격 보호 임곗값을 지정하려면 **추가 인스턴스 속성**에서 **온디맨드 가격 보호**를 선택하고, **속성 추가**를 선택한 다음 가격 보호 임곗값을 백분율로 입력합니다.
+ 스팟 인스턴스 가격 보호 임곗값을 지정하려면 **추가 인스턴스 속성**에서 **스팟 가격 보호**를 선택하고, **속성 추가**를 선택하고 가격 기준이 될 기준 값을 선택한 다음 가격 보호 임곗값을 백분율로 입력합니다.

**참고**  
플릿을 생성할 때 `TargetCapacityUnitType`을 `vcpu` 또는 `memory-mib`로 설정하면 가격 보호 임곗값이 인스턴스당 가격 대신 vCPU당 또는 메모리당 가격을 기준으로 적용됩니다.

## 성능 보호
<a name="ec2fleet-abis-performance-protection"></a>

*성능 보호*는 EC2 플릿 또는 스팟 플릿이 지정된 성능 기준과 비슷하거나 초과하는 인스턴스 유형을 사용하도록 하는 기능입니다. 성능 보호를 사용하려면 인스턴스 패밀리를 기준 참조로 지정합니다. 지정된 인스턴스 패밀리의 기능에 따라 허용 가능한 최저 수준의 성능이 정해집니다. Amazon EC2는 플릿의 인스턴스 유형을 선택할 때 사용자가 지정한 속성과 성능 기준을 고려합니다. 성능 기준보다 낮은 인스턴스 유형은 사용자가 지정한 다른 속성과 일치하더라도 선택에서 자동으로 제외됩니다. 이렇게 하면 선택한 모든 인스턴스 유형이 지정된 인스턴스 패밀리에서 설정한 기준과 비슷하거나 더 나은 성능을 제공할 수 있습니다. Amazon EC2는 이 기준을 사용하여 인스턴스 유형 선택을 안내하지만 선택한 인스턴스 유형이 모든 애플리케이션의 기준을 항상 초과한다는 보장은 없습니다.

현재 이 기능은 CPU 성능만 기준 성능 요소로 지원합니다. 지정된 인스턴스 패밀리의 CPU 프로세서의 CPU 성능은 성능 기준 역할을 하며 선택한 인스턴스 유형이 이 기준과 비슷하거나 이를 초과하도록 합니다. CPU 프로세서가 동일한 인스턴스 패밀리는 네트워크 또는 디스크 성능이 다르더라도 필터링 결과가 동일합니다. 예를 들어 `c6in` 또는 `c6i`를 기준 참조로 지정하면 두 인스턴스 패밀리가 동일한 CPU 프로세서를 사용하기 때문에 동일한 성능 기반 필터링 결과가 생성됩니다.

**지원되지 않는 인스턴스 패밀리**  
다음 인스턴스 패밀리는 성능 보호에서 **지원되지 않습니다**.
+ **범용:** Mac1 \$1 Mac2 \$1 Mac2-m1ultra \$1 Mac2-m2 \$1 Mac2-m2pro \$1 M1 \$1 M2 \$1 T1
+ **컴퓨팅 최적화:** C1
+ **메모리 최적화:** U-3tb1 \$1 U-6tb1 \$1 U-9tb1 \$1 U-12tb1 \$1 U-18tb1 \$1 u-24tb1 \$1 U7i-12tb \$1 U7in-16tb \$1 U7in-24tb \$1 U7in-32tb
+ **가속 컴퓨팅:** G3 \$1 G3s \$1 P3dn \$1 P4d \$1 P5
+ **고성능 컴퓨팅**: Hpc7g

지원되는 인스턴스 패밀리를 지정하여 성능 보호를 활성화하면 위의 지원되지 않는 인스턴스 패밀리는 반환되는 인스턴스 유형에서 제외됩니다.

지원되지 않는 인스턴스 패밀리를 기준 성능 값으로 지정하면 API는 [GetInstanceTypesFromInstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html)에 대한 빈 응답과 [CreateFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html), [RequestSpotFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html), [ModifyFleet](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyFleet.html), [ModifySpotFleetRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifySpotFleetRequest.html)에 대한 예외를 반환합니다.

**예: CPU 성능 기준 설정**  
다음 예제에서 인스턴스 요구 사항은 `c6i` 인스턴스 패밀리만큼 성능이 뛰어난 CPU 코어가 있는 인스턴스 유형으로 시작하는 것입니다. 이렇게 하면 vCPU 수 등 지정된 다른 인스턴스 요구 사항을 충족하더라도 CPU 성능이 이보다 낮은 인스턴스 유형은 필터링됩니다. 예를 들어 지정된 인스턴스 속성에 vCPU 4개와 메모리 16GB가 포함된 경우 이러한 속성이 있지만 CPU 성능이 `c6i`보다 낮은 인스턴스 유형은 선택에서 제외됩니다.

```
"BaselinePerformanceFactors": {
        "Cpu": {
            "References": [
                {
                    "InstanceFamily": "c6i"
                }
            ]
        }
```

## 고려 사항
<a name="ec2fleet-abs-considerations"></a>
+ EC2 플릿 또는 스팟 플릿에서 인스턴스 유형 또는 인스턴스 속성을 지정할 수 있지만 둘 다 동시에 지정할 수는 없습니다.

  CLI를 사용할 때 시작 템플릿 재정의가 시작 템플릿을 재정의합니다. 예를 들어 시작 템플릿에 인스턴스 유형이 포함되어 있고 시작 템플릿 재정의에 인스턴스 속성이 포함되어 있는 경우 인스턴스 속성으로 식별되는 인스턴스는 시작 템플릿의 인스턴스 유형을 재정의합니다.
+ CLI를 사용하고 인스턴스 속성을 재정의로 지정할 때 가중치나 우선순위를 지정할 수도 없습니다.
+ 요청 구성에서 최대 4개의 `InstanceRequirements` 구조를 지정할 수 있습니다.

## 속성 기반 인스턴스 유형 선택으로 EC2 플릿 생성
<a name="abs-create-ec2-fleet"></a>

속성 기반 인스턴스 유형 선택을 사용하도록 EC2 플릿을 구성할 수 있습니다. Amazon EC2 콘솔을 사용하여 EC2 플릿을 생성할 수는 없습니다.

속성 기반 인스턴스 유형 선택을 위한 속성은 `InstanceRequirements` 구조에 지정되어 있습니다. `InstanceRequirements`가 플릿 구성에 포함되어 있으면 `InstanceType` 및 `WeightedCapacity`는 인스턴스 속성과 동시에 플릿 구성을 결정할 수 없으므로 제외되어야 합니다.

AWS CLI 및 PowerShell 예제에서는 다음 속성이 지정됩니다.
+ `VCpuCount` - 최소 2개의 vCPU와 최대 4개의 vCPU. 최대 한도가 필요하지 않은 경우 최댓값을 생략할 수 있습니다.
+ `MemoryMiB` - 최소 8GiB의 메모리와 최대 16GiB의 메모리. 최대 한도가 필요하지 않은 경우 최댓값을 생략할 수 있습니다.

이 구성은 2\$14개의 vCPU와 8\$116GiB의 메모리를 탑재한 인스턴스 유형을 모두 식별합니다. 단, [EC2 Fleet에서 플릿을 제공](#how-ef-uses-abs)하는 경우 가격 보호 및 할당 전략에서 일부 인스턴스 유형이 제외될 수 있습니다.

------
#### [ AWS CLI ]

**속성 기반 인스턴스 유형 선택으로 EC2 플릿을 생성하려면**  
[create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 명령을 사용하여 EC2 플릿을 생성합니다. JSON 파일에 플릿 구성을 지정합니다.

```
aws ec2 create-fleet \
    --region us-east-1 \
    --cli-input-json file://file_name.json
```

다음 예제 `file_name.json` 파일에는 속성 기반 인스턴스 유형 선택 방식을 사용하도록 EC2 플릿을 구성하는 파라미터가 포함되어 있습니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "price-capacity-optimized"
    },
    "LaunchTemplateConfigs": [{
        "LaunchTemplateSpecification": {
            "LaunchTemplateName": "my-launch-template",
            "Version": "1"
        },
        "Overrides": [{
            "InstanceRequirements": {
                "VCpuCount": {
                    "Min": 2,
                    "Max": 4
                },
                "MemoryMiB": {
                    "Min": 8192,
                    "Max": 16384
                }
            }
        }]
    }],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

------
#### [ PowerShell ]

**속성 기반 인스턴스 유형 선택으로 EC2 플릿을 생성하려면**  
[New-EC2Fleet](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Fleet.html) cmdlet을 사용합니다.

```
$vcpuCount = New-Object Amazon.EC2.Model.VCpuCountRangeRequest
$vcpuCount.Min = 2 
$vcpuCount.Max = 4  
$memoryMiB = New-Object Amazon.EC2.Model.MemoryMiBRequest
$memoryMiB.Min = 8192  
$memoryMiB.Max = 16384  
$instanceRequirements = New-Object Amazon.EC2.Model.InstanceRequirementsRequest
$instanceRequirements.VCpuCount = $vcpuCount
$instanceRequirements.MemoryMiB = $memoryMiB

$launchTemplateSpec = New-Object Amazon.EC2.Model.FleetLaunchTemplateSpecificationRequest
$launchTemplateSpec.LaunchTemplateName = "my-launch-template" 
$launchTemplateSpec.Version = "1"
$override = New-Object Amazon.EC2.Model.FleetLaunchTemplateOverridesRequest
$override.InstanceRequirements = $instanceRequirements
$launchTemplateConfig = New-Object Amazon.EC2.Model.FleetLaunchTemplateConfigRequest
$launchTemplateConfig.LaunchTemplateSpecification = $launchTemplateSpec
$launchTemplateConfig.Overrides = @($override)

New-EC2Fleet `
    -SpotOptions_AllocationStrategy "price-capacity-optimized" `
    -LaunchTemplateConfig @($launchTemplateConfig) `
    -TargetCapacitySpecification_DefaultTargetCapacityType "spot" `
    -TargetCapacitySpecification_TotalTargetCapacity 20 `
    -Type "instant"
```

------

## 속성 기반 인스턴스 유형 선택으로 스팟 플릿 생성
<a name="abs-create-spot-fleet"></a>

속성 기반 인스턴스 유형 선택을 사용하도록 플릿을 구성할 수 있습니다.

속성 기반 인스턴스 유형 선택을 위한 속성은 `InstanceRequirements` 구조에 지정되어 있습니다. `InstanceRequirements`가 플릿 구성에 포함되어 있으면 `InstanceType` 및 `WeightedCapacity`는 인스턴스 속성과 동시에 플릿 구성을 결정할 수 없으므로 제외되어야 합니다.

AWS CLI 및 PowerShell 예제에서는 다음 속성이 지정됩니다.
+ `VCpuCount` - 최소 2개의 vCPU와 최대 4개의 vCPU. 최대 한도가 필요하지 않은 경우 최댓값을 생략할 수 있습니다.
+ `MemoryMiB` - 최소 8GiB의 메모리와 최대 16GiB의 메모리. 최대 한도가 필요하지 않은 경우 최댓값을 생략할 수 있습니다.

이 구성은 2\$14개의 vCPU와 8\$116GiB의 메모리를 탑재한 인스턴스 유형을 모두 식별합니다. 단, [스팟 플릿에서 플릿을 제공](#how-ef-uses-abs)하는 경우 가격 보호 및 할당 전략에서 일부 인스턴스 유형이 제외될 수 있습니다.

------
#### [ Console ]

**속성 기반 인스턴스 유형 선택을 위해 스팟 플릿을 구성하려면**

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

1. 탐색 창에서 **스팟 요청(Spot Requests)**을 선택한 다음 **스팟 인스턴스 요청(Request Spot Instance)**을 선택합니다.

1. 단계에 따라 스팟 플릿을 생성합니다. 자세한 내용은 [정의된 파라미터를 사용하여 스팟 플릿 요청 생성](create-spot-fleet.md#create-spot-fleet-advanced) 섹션을 참조하세요.

   스팟 플릿을 생성하는 동안 다음과 같이 속성 기반 인스턴스 유형 선택을 위해 플릿을 구성합니다.

   1. **인스턴스 유형 요구 사항(Instance type requirements)**에서 **컴퓨팅 요구 사항에 맞는 인스턴스 속성 지정(Specify instance attributes that match your compute requirements)**을 선택합니다.

   1. **vCPU(vCPUs)**에 원하는 최소 및 최대 vCPU 수를 입력합니다. 무한을 지정하려면 **최소 없음(No minimum)**, **최대 없음(No maximum)** 또는 둘 다 선택합니다.

   1. **메모리(GiB)(Memory (GiB))**에 원하는 최소 및 최대 메모리 양을 입력합니다. 무한을 지정하려면 **최소 없음(No minimum)**, **최대 없음(No maximum)** 또는 둘 다 선택합니다.

   1. (선택 사항) **추가 인스턴스 속성(Additional instance attributes)**에서 필요에 따라 하나 이상의 속성을 지정하여 컴퓨팅 요구 사항을 더 자세히 표현할 수 있습니다. 각 추가 속성은 요청에 제약 조건을 추가합니다.

   1. (선택 사항) 지정한 속성을 가진 인스턴스 유형을 보려면 **일치하는 인스턴스 유형 미리 보기(Preview matching instance types)**를 확장합니다.

------
#### [ AWS CLI ]

**속성 기반 인스턴스 유형 선택을 위해 스팟 플릿을 구성하려면**  
[request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 명령을 사용하여 스팟 플릿을 생성합니다. JSON 파일에 플릿 구성을 지정합니다.

```
aws ec2 request-spot-fleet \
    --region us-east-1 \
    --spot-fleet-request-config file://file_name.json
```

다음 예제 `file_name.json` 파일에는 속성 기반 인스턴스 유형 선택 방식을 사용하도록 스팟 플릿을 구성하는 파라미터가 포함되어 있습니다.

```
{
    "AllocationStrategy": "priceCapacityOptimized",
    "TargetCapacity": 20,
    "Type": "request",
    "LaunchTemplateConfigs": [{
        "LaunchTemplateSpecification": {
            "LaunchTemplateName": "my-launch-template",
            "Version": "1"
        },
        "Overrides": [{
            "InstanceRequirements": {
                "VCpuCount": {
                    "Min": 2,
                    "Max": 4
                },
                "MemoryMiB": {
                    "Min": 8192,
                    "Max": 16384
                }
            }
        }]
    }]
}
```

------
#### [ PowerShell ]

**속성 기반 인스턴스 유형 선택을 위해 스팟 플릿을 구성하려면**  
[Request-EC2SpotFleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Request-EC2SpotFleet.html) cmdlet을 사용합니다.

```
$vcpuCount = New-Object Amazon.EC2.Model.VCpuCountRange
$vcpuCount.Min = 2 
$vcpuCount.Max = 4  
$memoryMiB = New-Object Amazon.EC2.Model.MemoryMiB
$memoryMiB.Min = 8192  
$memoryMiB.Max = 16384  
$instanceRequirements = New-Object Amazon.EC2.Model.InstanceRequirements
$instanceRequirements.VCpuCount = $vcpuCount
$instanceRequirements.MemoryMiB = $memoryMiB

$launchTemplateSpec = New-Object Amazon.EC2.Model.FleetLaunchTemplateSpecification
$launchTemplateSpec.LaunchTemplateName = "my-launch-template" 
$launchTemplateSpec.Version = "1"
$override = New-Object Amazon.EC2.Model.LaunchTemplateOverrides
$override.InstanceRequirements = $instanceRequirements
$launchTemplateConfig = New-Object Amazon.EC2.Model.LaunchTemplateConfig
$launchTemplateConfig.LaunchTemplateSpecification = $launchTemplateSpec
$launchTemplateConfig.Overrides = @($override)

Request-EC2SpotFleet `
    -SpotFleetRequestConfig_AllocationStrategy "PriceCapacityOptimized" `
    -SpotFleetRequestConfig_TargetCapacity 20 `
    -SpotFleetRequestConfig_Type "Request" `
    -SpotFleetRequestConfig_LaunchTemplateConfig $launchTemplateConfig
```

------

## 유효한 EC2 플릿 구성과 유효하지 않은 구성 예제
<a name="ec2fleet-abs-example-configs"></a>

AWS CLI를 사용하여 EC2 플릿을 생성하려면 플릿 구성이 유효한지 확인해야 합니다. 다음 예에서는 유효한 구성과 유효하지 않은 구성을 보여줍니다.

다음을 포함하는 구성은 유효하지 않은 것으로 간주됩니다.
+ 둘 다 `InstanceRequirements` 및 `InstanceType`인 단일 `Overrides` 구조
+ 하나는 `InstanceRequirements`이고 다른 하나는 `InstanceType`인 2개의 `Overrides` 구조
+ 동일한 `LaunchTemplateSpecification` 내에서 겹치는 속성 값을 갖는 2개의 `InstanceRequirements` 구조

**Topics**
+ [유효한 구성: 재정의가 있는 단일 시작 템플릿](#ef-abs-example-config1)
+ [유효한 구성: 여러 InstanceRequirements가 있는 단일 시작 템플릿](#ef-abs-example-config2)
+ [유효한 구성: 각각 재정의가 있는 2개의 시작 템플릿](#ef-abs-example-config3)
+ [유효한 구성: `InstanceRequirements`만 지정, 겹치는 속성 값 없음](#ef-abs-example-config4)
+ [구성이 유효하지 않음: `Overrides`가 `InstanceRequirements` 및 `InstanceType` 포함](#ef-abs-example-config5)
+ [구성이 유효하지 않음: 2개의 `Overrides`가 `InstanceRequirements` 및 `InstanceType` 포함](#ef-abs-example-config6)
+ [구성이 유효하지 않음: 속성 값 겹침](#ef-abs-example-config7)

### 유효한 구성: 재정의가 있는 단일 시작 템플릿
<a name="ef-abs-example-config1"></a>

다음 구성은 유효합니다. 여기에는 하나의 시작 템플릿과 하나의 `InstanceRequirements` 구조를 갖는 하나의 `Overrides` 구조가 포함됩니다. 예제 구성에 대한 텍스트 설명은 다음과 같습니다.

```
{
        "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "My-launch-template",
                "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 2,
                            "Max": 8
                        },
                        "MemoryMib": {
                            "Min": 0,
                            "Max": 10240
                        },
                        "MemoryGiBPerVCpu": {
                            "Max": 10000
                        },
                        "RequireHibernateSupport": true
                    }
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 5000,
        "DefaultTargetCapacityType": "spot",
        "TargetCapacityUnitType": "vcpu"
        }
    }
}
```

****`InstanceRequirements`****  
속성 기반 인스턴스 선택을 사용하려면 플릿 구성에 `InstanceRequirements` 구조를 포함하고 플릿의 인스턴스에 대해 원하는 속성을 지정합니다.

앞의 예제에서 다음과 같은 인스턴스 속성이 지정됩니다.
+ `VCpuCount` - 인스턴스 유형에 최소 2개, 최대 8개의 vCPU가 있어야 합니다.
+ `MemoryMiB` - 인스턴스 유형에 최대 10,240MiB의 메모리가 있어야 합니다. 최솟값 0은 최소 제한이 없음을 나타냅니다.
+ `MemoryGiBPerVCpu` - 인스턴스 유형에 vCPU당 최대 10,000GiB의 메모리가 있어야 합니다. `Min` 파라미터는 선택 항목입니다. 생략하면 최소 제한이 없음을 나타냅니다.

**`TargetCapacityUnitType`**  
`TargetCapacityUnitType` 파라미터는 목표 용량의 단위를 지정합니다. 이 예에서 목표 용량은 `5000`이고 목표 용량 단위 유형은 `vcpu`입니다. 이들은 함께 원하는 목표 용량 vCPU 5,000개를 지정합니다. EC2 플릿은 플릿의 총 vCPU 수가 5,000개가 되도록 충분한 인스턴스를 시작합니다.

### 유효한 구성: 여러 InstanceRequirements가 있는 단일 시작 템플릿
<a name="ef-abs-example-config2"></a>

다음 구성은 유효합니다. 하나의 시작 템플릿과 2개의 `InstanceRequirements` 구조를 갖는 하나의 `Overrides` 구조가 포함됩니다. `InstanceRequirements`에 지정된 속성은 값이 겹치지 않기 때문에 유효합니다. 첫 번째 `InstanceRequirements` 구조는 vCPU 0\$12개의 `VCpuCount`를 지정하고 두 번째 `InstanceRequirements` 구조는 vCPU 4\$18개를 지정합니다.

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 유효한 구성: 각각 재정의가 있는 2개의 시작 템플릿
<a name="ef-abs-example-config3"></a>

다음 구성은 유효합니다. 각각 하나의 `InstanceRequirements` 구조를 포함하는 하나의 `Overrides` 구조가 있는 2개의 시작 템플릿이 포함됩니다. 이 구성은 동일한 플릿에서 `arm` 및 `x86` 아키텍처 지원에 유용합니다.

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "armLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "x86LaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 유효한 구성: `InstanceRequirements`만 지정, 겹치는 속성 값 없음
<a name="ef-abs-example-config4"></a>

다음 구성은 유효합니다. 각각 시작 템플릿이 있고 `InstanceRequirements` 구조가 포함된 `Overrides` 구조가 있는 2개의 `LaunchTemplateSpecification` 구조가 포함됩니다. `InstanceRequirements`에 지정한 속성은 값이 겹치지 않기 때문에 유효합니다. 첫 번째 `InstanceRequirements` 구조는 vCPU 0\$12개의 `VCpuCount`를 지정하고 두 번째 `InstanceRequirements` 구조는 vCPU 4\$18개를 지정합니다.

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 구성이 유효하지 않음: `Overrides`가 `InstanceRequirements` 및 `InstanceType` 포함
<a name="ef-abs-example-config5"></a>

다음 구성은 유효하지 않습니다. `Overrides` 구조에 `InstanceRequirements` 및 `InstanceType`이 모두 포함됩니다. `Overrides`에서 `InstanceRequirements` 또는 `InstanceType` 중 하나를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 구성이 유효하지 않음: 2개의 `Overrides`가 `InstanceRequirements` 및 `InstanceType` 포함
<a name="ef-abs-example-config6"></a>

다음 구성은 유효하지 않습니다. `Overrides` 구조에 `InstanceRequirements` 및 `InstanceType`이 모두 포함됩니다. `InstanceRequirements` 또는 `InstanceType` 중 하나를 지정할 수 있지만 다른 `Overrides` 구조라고 하더라도 둘 다 지정할 수는 없습니다.

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

### 구성이 유효하지 않음: 속성 값 겹침
<a name="ef-abs-example-config7"></a>

다음 구성은 유효하지 않습니다. 2개의 `InstanceRequirements` 구조는 각각 `"VCpuCount": {"Min": 0, "Max": 2}`를 포함합니다. 이러한 속성의 값이 겹치므로 용량 풀이 중복됩니다.

```
{
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    },
                    {
                      "InstanceRequirements": {
                          "VCpuCount": {
                              "Min": 0,
                              "Max": 2
                          },
                          "MemoryMiB": {
                              "Min": 0
                          }
                      }
                  }
                }
              ]
            }
        ],
         "TargetCapacitySpecification": {
            "TotalTargetCapacity": 1,
            "DefaultTargetCapacityType": "spot"
        }
    }
}
```

## 유효한 스팟 플릿 구성과 유효하지 않은 구성 예제
<a name="spotfleet-abs-example-configs"></a>

AWS CLI를 사용하여 스팟 플릿을 생성하려면 플릿 구성이 유효한지 확인해야 합니다. 다음 예에서는 유효한 구성과 유효하지 않은 구성을 보여줍니다.

다음을 포함하는 구성은 유효하지 않은 것으로 간주됩니다.
+ 둘 다 `InstanceRequirements` 및 `InstanceType`인 단일 `Overrides` 구조
+ 하나는 `InstanceRequirements`이고 다른 하나는 `InstanceType`인 2개의 `Overrides` 구조
+ 동일한 `LaunchTemplateSpecification` 내에서 겹치는 속성 값을 갖는 2개의 `InstanceRequirements` 구조

**Topics**
+ [유효한 구성: 재정의가 있는 단일 시작 템플릿](#sf-abs-example-config1)
+ [유효한 구성: 여러 InstanceRequirements가 있는 단일 시작 템플릿](#sf-abs-example-config2)
+ [유효한 구성: 각각 재정의가 있는 2개의 시작 템플릿](#sf-abs-example-config3)
+ [유효한 구성: `InstanceRequirements`만 지정, 겹치는 속성 값 없음](#sf-abs-example-config4)
+ [구성이 유효하지 않음: `Overrides`가 `InstanceRequirements` 및 `InstanceType` 포함](#sf-abs-example-config5)
+ [구성이 유효하지 않음: 2개의 `Overrides`가 `InstanceRequirements` 및 `InstanceType` 포함](#sf-abs-example-config6)
+ [구성이 유효하지 않음: 속성 값 겹침](#sf-abs-example-config7)

### 유효한 구성: 재정의가 있는 단일 시작 템플릿
<a name="sf-abs-example-config1"></a>

다음 구성은 유효합니다. 여기에는 하나의 시작 템플릿과 하나의 `InstanceRequirements` 구조를 갖는 하나의 `Overrides` 구조가 포함됩니다. 예제 구성에 대한 텍스트 설명은 다음과 같습니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "My-launch-template",
                "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 2,
                            "Max": 8
                        },
                        "MemoryMib": {
                            "Min": 0,
                            "Max": 10240
                        },
                        "MemoryGiBPerVCpu": {
                            "Max": 10000
                        },
                        "RequireHibernateSupport": true
                    }
                }
            ]
        }
    ],
        "TargetCapacity": 5000,
            "OnDemandTargetCapacity": 0,
            "TargetCapacityUnitType": "vcpu"
    }
}
```

****`InstanceRequirements`****  
속성 기반 인스턴스 선택을 사용하려면 플릿 구성에 `InstanceRequirements` 구조를 포함하고 플릿의 인스턴스에 대해 원하는 속성을 지정합니다.

앞의 예제에서 다음과 같은 인스턴스 속성이 지정됩니다.
+ `VCpuCount` - 인스턴스 유형에 최소 2개, 최대 8개의 vCPU가 있어야 합니다.
+ `MemoryMiB` - 인스턴스 유형에 최대 10,240MiB의 메모리가 있어야 합니다. 최솟값 0은 최소 제한이 없음을 나타냅니다.
+ `MemoryGiBPerVCpu` - 인스턴스 유형에 vCPU당 최대 10,000GiB의 메모리가 있어야 합니다. `Min` 파라미터는 선택 항목입니다. 생략하면 최소 제한이 없음을 나타냅니다.

**`TargetCapacityUnitType`**  
`TargetCapacityUnitType` 파라미터는 목표 용량의 단위를 지정합니다. 이 예에서 목표 용량은 `5000`이고 목표 용량 단위 유형은 `vcpu`입니다. 이들은 함께 원하는 목표 용량 vCPU 5,000개를 지정합니다. 스팟 플릿은 플릿의 총 vCPU 수가 5,000개가 되도록 충분한 인스턴스를 시작합니다.

### 유효한 구성: 여러 InstanceRequirements가 있는 단일 시작 템플릿
<a name="sf-abs-example-config2"></a>

다음 구성은 유효합니다. 하나의 시작 템플릿과 2개의 `InstanceRequirements` 구조를 갖는 하나의 `Overrides` 구조가 포함됩니다. `InstanceRequirements`에 지정된 속성은 값이 겹치지 않기 때문에 유효합니다. 첫 번째 `InstanceRequirements` 구조는 vCPU 0\$12개의 `VCpuCount`를 지정하고 두 번째 `InstanceRequirements` 구조는 vCPU 4\$18개를 지정합니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 유효한 구성: 각각 재정의가 있는 2개의 시작 템플릿
<a name="sf-abs-example-config3"></a>

다음 구성은 유효합니다. 각각 하나의 `InstanceRequirements` 구조를 포함하는 하나의 `Overrides` 구조가 있는 2개의 시작 템플릿이 포함됩니다. 이 구성은 동일한 플릿에서 `arm` 및 `x86` 아키텍처 지원에 유용합니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "armLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "x86LaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 유효한 구성: `InstanceRequirements`만 지정, 겹치는 속성 값 없음
<a name="sf-abs-example-config4"></a>

다음 구성은 유효합니다. 각각 시작 템플릿이 있고 `InstanceRequirements` 구조가 포함된 `Overrides` 구조가 있는 2개의 `LaunchTemplateSpecification` 구조가 포함됩니다. `InstanceRequirements`에 지정한 속성은 값이 겹치지 않기 때문에 유효합니다. 첫 번째 `InstanceRequirements` 구조는 vCPU 0\$12개의 `VCpuCount`를 지정하고 두 번째 `InstanceRequirements` 구조는 vCPU 4\$18개를 지정합니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 4,
                            "Max": 8
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 구성이 유효하지 않음: `Overrides`가 `InstanceRequirements` 및 `InstanceType` 포함
<a name="sf-abs-example-config5"></a>

다음 구성은 유효하지 않습니다. `Overrides` 구조에 `InstanceRequirements` 및 `InstanceType`이 모두 포함됩니다. `Overrides`에서 `InstanceRequirements` 또는 `InstanceType` 중 하나를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                },
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 구성이 유효하지 않음: 2개의 `Overrides`가 `InstanceRequirements` 및 `InstanceType` 포함
<a name="sf-abs-example-config6"></a>

다음 구성은 유효하지 않습니다. `Overrides` 구조에 `InstanceRequirements` 및 `InstanceType`이 모두 포함됩니다. `InstanceRequirements` 또는 `InstanceType` 중 하나를 지정할 수 있지만 다른 `Overrides` 구조라고 하더라도 둘 다 지정할 수는 없습니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    }
                }
              ]
            },
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyOtherLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceType": "m5.large"
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

### 구성이 유효하지 않음: 속성 값 겹침
<a name="sf-abs-example-config7"></a>

다음 구성은 유효하지 않습니다. 2개의 `InstanceRequirements` 구조는 각각 `"VCpuCount": {"Min": 0, "Max": 2}`를 포함합니다. 이러한 속성의 값이 겹치므로 용량 풀이 중복됩니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "MyLaunchTemplate",
                    "Version": "1"
                },
                "Overrides": [
                {
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 2
                        },
                        "MemoryMiB": {
                            "Min": 0
                        }
                    },
                    {
                      "InstanceRequirements": {
                          "VCpuCount": {
                              "Min": 0,
                              "Max": 2
                          },
                          "MemoryMiB": {
                              "Min": 0
                          }
                      }
                  }
                }
              ]
            }
        ],
        "TargetCapacity": 1,
        "OnDemandTargetCapacity": 0,
        "Type": "maintain"
    }
}
```

## 지정한 속성을 가진 인스턴스 유형 미리 보기
<a name="ec2fleet-get-instance-types-from-instance-requirements"></a>

[get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) 명령을 사용하여 지정한 속성과 일치하는 인스턴스 유형을 미리 봅니다. 이 기능은 인스턴스를 시작하지 않고 요청 구성에서 지정할 속성을 계산할 때 특히 유용합니다. 이 명령은 사용 가능한 용량을 고려하지 않습니다.

**AWS CLI로 속성을 지정하여 인스턴스 유형 목록 미리 보기**

1. (선택 사항) 지정할 수 있는 모든 가능한 속성을 생성하려면 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) 명령과 `--generate-cli-skeleton` 파라미터를 사용합니다. 선택적으로 `input > attributes.json`을 사용하여 출력을 파일로 지정하여 저장할 수 있습니다.

   ```
   aws ec2 get-instance-types-from-instance-requirements \
       --region us-east-1 \
       --generate-cli-skeleton input > attributes.json
   ```

   예상 결과

   ```
   {
       "DryRun": true,
       "ArchitectureTypes": [
           "i386"
       ],
       "VirtualizationTypes": [
           "hvm"
       ],
       "InstanceRequirements": {
           "VCpuCount": {
               "Min": 0,
               "Max": 0
           },
           "MemoryMiB": {
               "Min": 0,
               "Max": 0
           },
           "CpuManufacturers": [
               "intel"
           ],
           "MemoryGiBPerVCpu": {
               "Min": 0.0,
               "Max": 0.0
           },
           "ExcludedInstanceTypes": [
               ""
           ],
           "InstanceGenerations": [
               "current"
           ],
           "SpotMaxPricePercentageOverLowestPrice": 0,
           "OnDemandMaxPricePercentageOverLowestPrice": 0,
           "BareMetal": "included",
           "BurstablePerformance": "included",
           "RequireHibernateSupport": true,
           "NetworkInterfaceCount": {
               "Min": 0,
               "Max": 0
           },
           "LocalStorage": "included",
           "LocalStorageTypes": [
               "hdd"
           ],
           "TotalLocalStorageGB": {
               "Min": 0.0,
               "Max": 0.0
           },
           "BaselineEbsBandwidthMbps": {
               "Min": 0,
               "Max": 0
           },
           "AcceleratorTypes": [
               "gpu"
           ],
           "AcceleratorCount": {
               "Min": 0,
               "Max": 0
           },
           "AcceleratorManufacturers": [
               "nvidia"
           ],
           "AcceleratorNames": [
               "a100"
           ],
           "AcceleratorTotalMemoryMiB": {
               "Min": 0,
               "Max": 0
           },
           "NetworkBandwidthGbps": {
               "Min": 0.0,
               "Max": 0.0
           },
           "AllowedInstanceTypes": [
               ""
           ]
       },
       "MaxResults": 0,
       "NextToken": ""
   }
   ```

1. 이전 단계의 출력을 사용하여 JSON 구성 파일을 생성하고 다음과 같이 구성합니다.
**참고**  
`ArchitectureTypes`, `VirtualizationTypes`, `VCpuCount` 및 `MemoryMiB`의 값을 입력해야 합니다. 다른 속성을 생략할 수 있으며 생략 시 기본값이 사용됩니다.  
각 속성과 기본값에 대한 설명은 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html)를 참조하세요.

   1. `ArchitectureTypes`에 대해 하나 이상의 프로세서 아키텍처 유형을 지정합니다.

   1. `VirtualizationTypes`에 대해 하나 이상의 가상화 유형을 지정합니다.

   1. `VCpuCount`에 대해 최소 및 최대 vCPU 수를 지정합니다. 최소 제한을 지정하지 않으려면 `Min`에 대해 `0`을 지정합니다. 최대 제한을 지정하지 않으려면 `Max` 파라미터를 생략합니다.

   1. `MemoryMiB`에 대해 최소 및 최대 메모리 양(MiB)을 지정합니다. 최소 제한을 지정하지 않으려면 `Min`에 대해 `0`을 지정합니다. 최대 제한을 지정하지 않으려면 `Max` 파라미터를 생략합니다.

   1. 선택적으로 하나 이상의 다른 속성을 지정하여 반환되는 인스턴스 유형 목록을 추가로 제한할 수 있습니다.

1. JSON 파일에서 지정한 속성이 있는 인스턴스 유형을 미리 보려면 [get-instance-types-from-instance-requirements](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-types-from-instance-requirements.html) 명령을 사용하고 `--cli-input-json` 파라미터를 통해 JSON 파일의 이름과 경로를 지정합니다. 필요에 따라 테이블 형식으로 표시되도록 출력 형식을 지정할 수 있습니다.

   ```
   aws ec2 get-instance-types-from-instance-requirements \
       --cli-input-json file://attributes.json \
       --output table
   ```

   예제 *attributes.json* 파일

   이 예에서는 필수 속성이 JSON 파일에 포함되어 있습니다. 이들은 `ArchitectureTypes`, `VirtualizationTypes`, `VCpuCount` 및 `MemoryMiB`입니다. 또한 선택적인 `InstanceGenerations` 속성도 포함되어 있습니다. 참고로 `MemoryMiB`에 대해 `Max` 값을 생략하여 제한이 없음을 나타낼 수 있습니다.

   ```
   {
       
       "ArchitectureTypes": [
           "x86_64"
       ],
       "VirtualizationTypes": [
           "hvm"
       ],
       "InstanceRequirements": {
           "VCpuCount": {
               "Min": 4,
               "Max": 6
           },
           "MemoryMiB": {
               "Min": 2048
           },
           "InstanceGenerations": [
               "current"
           ]
       }
   }
   ```

    출력 예시

   ```
   ------------------------------------------
   |GetInstanceTypesFromInstanceRequirements|
   +----------------------------------------+
   ||             InstanceTypes            ||
   |+--------------------------------------+|
   ||             InstanceType             ||
   |+--------------------------------------+|
   ||  c4.xlarge                           ||
   ||  c5.xlarge                           ||
   ||  c5a.xlarge                          ||
   ||  c5ad.xlarge                         ||
   ||  c5d.xlarge                          ||
   ||  c5n.xlarge                          ||
   ||  d2.xlarge                           ||
   ...
   ```

1. 필요에 맞는 인스턴스 유형을 식별한 후 플릿 요청을 구성할 때 사용할 수 있도록 사용한 인스턴스 속성을 기록해 둡니다.

# 인스턴스 가중치를 사용하여 EC2 플릿 또는 스팟 플릿의 비용 및 성능 관리
<a name="ec2-fleet-instance-weighting"></a>

인스턴스 가중치를 사용하면 EC2 플릿 또는 스팟 플릿의 각 인스턴스 유형에 가중치를 할당하여 서로 상대적인 컴퓨팅 용량과 성능을 반영합니다. 가중치를 기반으로 플릿은 원하는 목표 용량을 충족할 수 있는 한 지정된 인스턴스 유형을 원하는 대로 조합하여 사용할 수 있습니다. 이는 플릿의 비용과 성능 관리에 도움이 될 수 있습니다.

가중치는 인스턴스 유형이 총 목표 용량을 구성하는 용량 단위를 나타냅니다.

**예제: 성능 관리를 위한 인스턴스 가중치 사용**

플릿에 두 개의 인스턴스 유형이 있고, 다음과 같이 동일한 성능을 달성하기 위해 각 인스턴스 유형에 필요한 가중치를 반영하여 각 인스턴스 유형에 다른 가중치를 할당한다고 가정해 보겠습니다.
+  `m5.large` – 가중치: 1
+ `m5.2xlarge` – 가중치: 4

이 가중치를 할당하면 1개의 `m5.2xlarge`와 동일한 성능을 달성하려면 `m5.large` 인스턴스 4개가 필요하다는 뜻입니다.

주어진 목표 용량에 필요한 각 인스턴스 유형의 인스턴스 수를 계산하려면 다음 공식을 사용합니다.

`target capacity / weight = number of instances`

목표 용량 단위가 8개인 경우 플릿은 다음과 같이 `m5.large` 또는 `m5.2xlarge`, 아니면 두 가지를 혼합하여 목표 용량을 충족할 수 있습니다.
+ `m5.large` 인스턴스 8개(용량 8/가중치 1 = 인스턴스 8개)
+ `m5.2xlarge` 인스턴스 2개(용량 8/가중치 4 = 인스턴스 2개)
+ `m5.large` 4개 및 `m5.2xlarge` 1개

**예제: 비용 관리를 위한 인스턴스 가중치 사용**

기본적으로, 사용자가 지정하는 가격은 *인스턴스 시간당* 가격입니다. 인스턴스 가중치 기능을 사용할 때, 사용자가 지정하는 가격은 *단위 시간당* 가격입니다. 단위 시간당 가격은 인스턴스 유형에 따른 가격을 인스턴스가 나타내는 유닛 수로 나누어 계산할 수 있습니다. 플릿은 목표 용량을 인스턴스 가중치로 나누어 시작할 인스턴스의 수를 계산합니다. 결과가 정수가 아닌 경우 플릿은 결과를 다음 정수로 반올림하므로 플릿 크기가 목표 용량을 밑돌지는 않습니다. 시작된 인스턴스의 용량이 요청된 목표 용량을 초과하더라도 플릿은 시작 사양에 지정한 어떤 풀이든 선택할 수 있습니다.

다음 표에는 목표 용량이 10인 플릿의 단위당 가격을 결정하기 위한 계산의 예제가 있습니다.


| 인스턴스 유형 | 인스턴스 가중치 | 목표 용량 | 시작된 인스턴스의 수 | 인스턴스 시간당 가격 | 단위 시간당 가격 | 
| --- | --- | --- | --- | --- | --- | 
| r3.xlarge |  2  | 10 |  5 (10을 2로 나눈 값)  |  0.05 USD  |  0.025 USD (0.05를 2로 나눈 값)  | 
| r3.8xlarge |  8  | 10 |  2 (10을 8로 나눈 후 올림한 결과)  |  0.10 USD  |  0.0125 USD (0.10을 8로 나눈 값)  | 

플릿 인스턴스 가중치를 사용하여 다음과 같이 원하는 목표 용량을 충족 시점의 단위당 최저 가격으로 풀에서 프로비저닝합니다.

1. 플릿의 목표 용량을 인스턴스(기본값) 또는 선택한 단위(예: vCPU 수, 메모리, 스토리지 또는 처리량)로 설정합니다.

1. 단위당 가격을 설정합니다.

1. 목표 용량에 대해 인스턴스 유형이 나타내는 단위 수를 의미하는 가중치를 시작 사양마다 지정합니다.

**인스턴스 가중치 부여의 예**  
다음과 같은 구성의 플릿 요청을 고려하세요.
+ 목표 용량은 24
+ 인스턴스 유형이 `r3.2xlarge`이고 가중치가 6인 시작 사양
+ 인스턴스 유형이 `c3.xlarge`이고 가중치가 5인 시작 사양

가중치는 목표 용량에 대하여 인스턴스 유형이 나타내는 단위 수를 의미합니다. 첫 번째 시작 사양에서 단위당 최저 가격(인스턴스 시간당 `r3.2xlarge`의 가격을 6으로 나눈 값)을 제공하는 경우 플릿은 이 인스턴스 중 4개(24를 6으로 나눈 값)를 시작합니다.

두 번째 시작 사양에서 단위당 최저 가격(인스턴스 시간당 `c3.xlarge`에 대한 가격을 5로 나눈 값)을 제공하는 경우 플릿은 이들 인스턴스 중 5개(24를 5로 나눈 결과를 올림한 값)를 시작합니다.

**인스턴스 가중치 부여 및 할당 전략**  
다음과 같은 구성의 플릿 요청을 고려하세요.
+ 목표 용량 스팟 인스턴스 30개
+ 인스턴스 유형이 `c3.2xlarge`이고 가중치가 8인 시작 사양
+ 인스턴스 유형이 `m3.xlarge`이고 가중치가 8인 시작 사양
+ 인스턴스 유형이 `r3.xlarge`이고 가중치가 8인 시작 사양

플릿은 4개의 인스턴스(30을 8로 나눈 결과를 올림한 값)를 시작합니다. `diversified` 전략 사용 시 플릿은 풀 3개에서 각각 인스턴스 1개를 시작하고 풀 3개 중 어디에 있든 네 번째 인스턴스가 단위당 최저 가격을 제공합니다.

# 할당 전략을 사용하여 EC2 플릿 또는 스팟 플릿이 스팟 및 온디맨드 용량을 충족하는 방법 결정
<a name="ec2-fleet-allocation-strategy"></a>

EC2 플릿 또는 스팟 플릿에서 여러 용량 풀(각각 인스턴스 유형과 가용 영역으로 구성)을 사용하는 경우 **할당 전략을 사용하여 Amazon EC2가 해당 용량 풀에서 스팟 및 온디맨드 용량을 충족하는 방식을 관리할 수 있습니다. 할당 전략을 통해 가용 용량, 가격 및 사용할 인스턴스 유형을 최적화할 수 있습니다. 스팟 인스턴스 및 온디맨드 인스턴스에 대한 할당 전략은 서로 다릅니다.

**Topics**
+ [스팟 인스턴스를 위한 할당 전략](#ec2-fleet-allocation-strategies-for-spot-instances)
+ [온디맨드 인스턴스 할당 전략](#ec2-fleet-allocation-strategies-for-on-demand-instances)
+ [적합한 스팟 할당 전략 선택](#ec2-fleet-allocation-use-cases)
+ [스팟 인스턴스의 목표 용량 유지](#ec2-fleet-maintain-fleet-capacity)
+ [온디맨드 용량에 대한 인스턴스 유형 우선순위 지정](#ec2-fleet-on-demand-priority)

## 스팟 인스턴스를 위한 할당 전략
<a name="ec2-fleet-allocation-strategies-for-spot-instances"></a>

시작 구성은 EC2 플릿 또는 스팟 플릿이 스팟 인스턴스를 시작할 수 있는 모든 스팟 용량 풀(인스턴스 유형, 가용 영역)을 결정합니다. 하지만 인스턴스를 시작할 때 플릿은 지정한 할당 전략을 사용하여 가능한 풀에서 특정 풀을 선택합니다.

**참고**  
(Linux 인스턴스만 해당) [AMD SEV-SNP](sev-snp.md)가 켜진 상태에서 스팟 인스턴스를 시작하도록 구성하면 선택한 인스턴스 유형의 [온디맨드 시간당 요금](https://aws.amazon.com/ec2/pricing/on-demand/)의 10%에 해당하는 시간당 사용 요금이 추가로 부과됩니다. 할당 전략에서 가격을 입력으로 사용하는 경우 플릿에는 이 추가 요금이 포함되지 않습니다. 스팟 가격만 사용됩니다.

스팟 인스턴스에는 다음 할당 전략 중 하나를 지정할 수 있습니다.

**가격 용량 최적화**(권장)  
플릿은 시작하는 인스턴스의 수에 맞추어 용량 가용성이 가장 높은 풀을 가져옵니다. 즉, 가까운 시일 내에 중단될 가능성이 가장 낮다고 판단되는 풀에서 스팟 인스턴스를 요청합니다. 그러면 플릿이 해당 풀에서 가장 가격이 낮은 스팟 인스턴스를 요청합니다.  
**가격 용량 최적화** 할당 전략은 컨테이너화된 상태 비저장 애플리케이션, 마이크로서비스, 웹 애플리케이션, 데이터 및 분석 작업, 배치 처리와 같은 대부분의 스팟 워크로드에 가장 적합합니다.  
AWS CLI를 사용하는 경우 파라미터 이름은 EC2 플릿의 경우 `price-capacity-optimized`, 스팟 플릿의 경우 `priceCapacityOptimized`입니다.

**용량 최적화**  
플릿은 시작하는 인스턴스의 수에 맞추어 용량 가용성이 가장 높은 풀을 가져옵니다. 즉, 가까운 시일 내에 중단될 가능성이 가장 낮다고 판단되는 풀에서 스팟 인스턴스를 요청합니다.  
스팟 인스턴스에서 요금은 시간이 지나면서 수요 및 공급의 장기 추세에 따라 서서히 변화하지만 용량은 실시간으로 변동합니다. **용량 최적화** 전략은 실시간 용량 데이터를 기준으로 가장 가용성이 높은 풀을 예측하여 자동으로 스팟 인스턴스를 가장 가용성이 높은 풀로 시작합니다. 이 전략은 작업 재시작 시 중단으로 인한 비용이 상대적으로 높을 수 있는 워크로드에 유용합니다. 이 전략은 긴 지속적 통합(CI), 이미지 및 미디어 렌더링, 딥 러닝, 고성능 컴퓨팅(HPC)과 같이 작업 재시작 비용이 상대적으로 높을 수 있는 워크로드에 유용합니다. **용량 최적화** 전략은 중단을 줄일 수 있는 가능성을 제공함으로써 전체 워크로드 비용을 낮출 수 있습니다.  
사용자는 **용량 최적화 우선** 할당 전략과 우선순위 파라미터를 사용하여 우선순위가 높은 순서에서 낮은 순서로 인스턴스 유형 우선순위를 지정할 수 있습니다. 여러 인스턴스 유형에 동일한 우선순위를 설정할 수 있습니다. 플릿은 용량을 우선으로 최적화하지만 최선의 노력을 기준으로 인스턴스 유형 우선순위를 따릅니다. 예를 들어 플릿에서 최적 용량으로 프로비저닝하는 데 우선순위가 큰 영향을 미치지 않을 수 있습니다. 이 옵션은 중단 가능성을 최소화해야 하고 특정 인스턴스 유형에 대한 선호도가 중요한 워크로드에 적합합니다. 스팟 용량의 인스턴스 유형에 대한 우선순위를 설정할 때 온디맨드 할당 전략이 **우선순위**로 설정되어 있으면 온디맨드 인스턴스에도 동일한 우선순위가 적용됩니다. 스팟 플릿의 경우 우선순위 사용은 플릿이 시작 템플릿을 사용하는 경우에만 지원됩니다.  
AWS CLI를 사용하는 경우 파라미터 이름은 EC2 플릿의 경우 `capacity-optimized`와 `capacity-optimized-prioritized`, 스팟 플릿의 경우 `capacityOptimized`와 `capacityOptimizedPrioritized`입니다.

**다각화**  
스팟 인스턴스는 모든 스팟 용량 풀에 걸쳐 분산됩니다. AWS CLI를 사용하는 경우 파라미터 이름은 EC2 플릿과 스팟 플릿 모두에서 `diversified`입니다.

**최저 가격**(권장되지 않음)  
**최저 가격** 할당 전략은 스팟 인스턴스의 중단 위험이 가장 높기 때문에 권장하지 않습니다.
스팟 인스턴스는 용량이 있는 최저 가격 풀에서 제공됩니다. AWS CLI를 사용하는 경우에는 기본 전략입니다. 하지만 **가격 용량 최적화** 할당 전략을 지정하여 기본값을 재정의하는 것이 좋습니다.  
최저 가격 전략을 사용하면 가장 낮은 가격의 풀에 사용 가능한 용량이 없는 경우 스팟 인스턴스는 사용 가능한 용량이 있는 다음으로 가장 낮은 가격의 풀에서 제공됩니다. 목표 용량을 충족하기 전에 풀에 용량이 부족해질 경우 플릿은 다음으로 가격이 낮은 풀에서 끌어와 요청을 계속 이행합니다. 목표 용량이 충족되었는지 확인하기 위해 여러 풀에서 스팟 인스턴스를 받을 수도 있습니다.  
이 전략은 인스턴스 가격만 고려하고 용량 가용성은 고려하지 않기 때문에 중단률이 높아질 수 있습니다.  
최저 가격 할당 전략은 AWS CLI를 사용하는 경우에만 제공됩니다. 파라미터 이름은 EC2 플릿의 경우 `lowest-price`, 스팟 플릿의 경우 `lowestPrice`입니다.

**사용할 풀 수**  
대상 스팟 용량을 할당할 스팟 풀 수입니다. 스팟 할당 전략이 **최저 가격**으로 설정된 경우에만 유효합니다. 플릿에서 가격이 가장 낮은 스팟 풀을 선택하고 지정한 스팟 풀 수에 걸쳐 대상 스팟 용량을 균등하게 할당합니다.  
플릿은 가능한 한도에서 지정한 풀 수에서 스팟 인스턴스를 끌어오려고 합니다. 목표 용량을 충족하기 전에 풀에 스팟 용량이 부족해질 경우 플릿은 다음으로 가격이 낮은 풀에서 끌어와 요청을 계속 이행합니다. 목표 용량이 충족되도록 하기 위해 지정한 풀 수보다 많은 수의 스팟 인스턴스를 받게 될 수 있습니다. 마찬가지로 대부분의 풀에 스팟 용량이 없는 경우 지정한 풀 수보다 적은 수의 풀에서 전체 목표 용량을 받을 수 있습니다.  
이 파라미터는 **최저 가격** 할당 전략을 지정하고 AWS CLI를 사용하는 경우에만 제공됩니다. 파라미터 이름은 EC2 플릿과 스팟 플릿 모두에서 `InstancePoolsToUseCount`입니다.

## 온디맨드 인스턴스 할당 전략
<a name="ec2-fleet-allocation-strategies-for-on-demand-instances"></a>

시작 구성은 EC2 플릿 또는 스팟 플릿이 온디맨드 인스턴스를 시작할 수 있는 모든 용량 풀(인스턴스 유형, 가용 영역)을 결정합니다. 하지만 인스턴스를 시작할 때 플릿은 지정한 할당 전략을 사용하여 가능한 풀에서 특정 풀을 선택합니다.

온디맨드 인스턴스에는 다음 할당 전략 중 하나를 지정할 수 있습니다.

**최저 가격**  
온디맨드 인스턴스는 용량이 있는 최저 가격 풀에서 제공됩니다. 이는 기본 전략입니다.  
가장 낮은 가격의 풀에 사용 가능한 용량이 없는 경우 온디맨드 인스턴스는 사용 가능한 용량이 있는 다음으로 가장 낮은 가격의 풀에서 제공됩니다.  
목표 용량을 충족하기 전에 풀에 용량이 부족해질 경우 플릿은 다음으로 가격이 낮은 풀에서 끌어와 요청을 계속 이행합니다. 목표 용량이 충족되었는지 확인하기 위해 여러 풀에서 온디맨드 인스턴스를 받을 수도 있습니다.

**우선순위**  
플릿은 각 시작 템플릿 재정의에 할당한 우선순위를 사용하여 최우선순위 순서로 인스턴스 유형을 시작합니다. 이 전략은 속성 기반 인스턴스 유형 선택과 함께 사용할 수 없습니다. 이 할당 전략을 사용하는 방법에 대한 예제는 [온디맨드 용량에 대한 인스턴스 유형 우선순위 지정](#ec2-fleet-on-demand-priority)의 내용을 참조하세요.

## 적합한 스팟 할당 전략 선택
<a name="ec2-fleet-allocation-use-cases"></a>

적절한 스팟 할당 전략을 선택하여 사용 사례에 따라 플릿을 최적화할 수 있습니다.

### 최저 가격과 용량 가용성의 균형
<a name="ec2-fleet-strategy-balance-price-and-capacity-availability"></a>

가장 가격이 낮은 스팟 용량 풀과 용량 가용성이 가장 높은 스팟 용량 풀 간의 균형을 맞추려면 **가격 용량 최적화** 할당 전략을 사용하는 것이 좋습니다. 이 전략은 풀 가격과 해당 풀에 있는 스팟 인스턴스의 용량 가용성을 기준으로 스팟 인스턴스를 요청할 풀을 결정합니다. 즉, 가격을 고려하는 동시에 가까운 시일 내에 중단될 가능성이 가장 낮다고 판단되는 풀에서 스팟 인스턴스를 요청합니다.

플릿이 컨테이너화된 애플리케이션, 마이크로서비스, 웹 애플리케이션, 데이터 및 분석 작업, 배치 처리 등 복원력이 뛰어난 상태 비저장 워크로드를 실행하는 경우, **가격 용량 최적화** 할당 전략을 사용하여 최적의 비용과 용량 가용성을 확보하세요.

플릿에서 작업 재시작 시 중단으로 인한 비용이 상대적으로 높을 수 있는 워크로드를 실행하는 경우, 애플리케이션이 중단되었을 때 해당 시점부터 다시 시작할 수 있도록 체크포인트를 구현해야 합니다. 체크포인트를 사용하면 가격이 가장 낮으면서 스팟 인스턴스 중단률도 낮은 풀에서 용량이 할당되므로, **가격 용량 최적화** 할당 전략이 이러한 워크로드에도 적합하게 될 수 있습니다.

**가격 용량 최적화** 할당 전략을 사용하는 JSON 구성의 예제는 다음을 참조하세요.
+ EC2 플릿 - [예제 10: price-capacity-optimized 플릿에서 스팟 인스턴스 시작](ec2-fleet-examples.md#ec2-fleet-config11)
+ 스팟 플릿 - [예제 11: priceCapacityOptimized 플릿에서 스팟 인스턴스 시작](spot-fleet-examples.md#fleet-config11)

### 워크로드의 중단 비용이 높은 경우
<a name="ec2-fleet-strategy-capacity-optimized"></a>

비슷한 가격의 인스턴스 유형을 사용하는 워크로드를 실행하거나 중단 비용이 너무 높아 중단이 미미하게 증가하는 데도 비용 절감 효과가 너무 적은 워크로드를 실행하는 경우, **용량 최적화** 전략을 선택적으로 사용할 수 있습니다. 이 전략은 중단을 줄일 수 있는 가능성을 제공하는 가용성이 가장 높은 스팟 용량 풀에서 용량을 할당하므로, 전체 워크로드 비용을 낮출 수 있습니다.

중단 가능성을 최소화해야 하지만 특정 인스턴스 유형을 우선적으로 사용해야 하는 경우, **용량 최적화 우선** 할당 전략을 사용한 다음 사용할 인스턴스 유형의 순서를 가장 높은 우선순위에서 가장 낮은 우선순위로 설정하여 풀 우선순위를 표현할 수도 있습니다.

**용량 최적화 우선**에 대한 우선순위를 설정할 때 온디맨드 할당 전략이 **우선순위**로 설정되어 있으면 온디맨드 인스턴스에도 동일한 우선순위가 적용됩니다. 또한 스팟 플릿의 경우 우선순위 사용은 플릿이 시작 템플릿을 사용하는 경우에만 지원됩니다.

**용량 최적화** 할당 전략을 사용하는 JSON 구성의 예제는 다음을 참조하세요.
+ EC2 플릿 - [예제 8: 용량 최적화 플릿에서 스팟 인스턴스 시작](ec2-fleet-examples.md#ec2-fleet-config9)
+ 스팟 플릿 - [예제 9: 용량 최적화 플릿에서 스팟 인스턴스 시작](spot-fleet-examples.md#fleet-config9)

**용량 최적화 우선** 할당 전략을 사용하는 JSON 구성의 예제는 다음을 참조하세요.
+ EC2 플릿 - [예제 9: 용량 최적화 플릿에서 우선순위를 사용하여 스팟 인스턴스 시작](ec2-fleet-examples.md#ec2-fleet-config10)
+ 스팟 플릿 - [예제 10: 용량 최적화 플릿에서 우선순위를 사용하여 스팟 인스턴스 시작](spot-fleet-examples.md#fleet-config10)

### 시간이 유동적이고 용량 가용성이 중요하지 않은 워크로드의 경우
<a name="ec2-fleet-strategy-time-flexible-workload"></a>

플릿이 작거나 짧은 시간 동안 실행될 경우, **가격 용량 최적화**를 사용하여 가용성을 고려하면서 비용 절감 효과를 극대화할 수 있습니다.

### 플릿 규모가 크거나 장시간 실행되는 경우
<a name="ec2-fleet-strategy-large-workload-long-time"></a>

플릿이 크거나 장시간 실행될 경우 **다각화** 전략을 사용하여 여러 풀에 걸쳐 스팟 인스턴스를 분산하여 플릿의 가용성을 높일 수 있습니다. 예를 들어 플릿이 풀 10개와 인스턴스 100개의 목표 용량을 지정하는 경우 플릿은 각 풀에서 스팟 인스턴스 10개를 시작합니다. 풀에서 스팟 가격이 최고 가격을 초과하는 경우, 플릿 중 10%만 영향을 받습니다. 이 전략을 사용하면 플릿이 시간이 지나면서 어느 한 풀에서 발생하는 스팟 가격의 상승에 덜 민감해집니다. **다각화** 전략을 사용하면 플릿은 [온디맨드 가격](https://aws.amazon.com/ec2/pricing/)보다 높거나 이 가격과 동일한 스팟 가격의 풀로 스팟 인스턴스를 시작하지 않습니다.

## 스팟 인스턴스의 목표 용량 유지
<a name="ec2-fleet-maintain-fleet-capacity"></a>

스팟 가격 또는 스팟 용량 풀의 가용 용량 변화로 인해 스팟 인스턴스가 종료된 후 `maintain` 유형의 플릿은 대체 스팟 인스턴스를 시작합니다. 이 할당 전략은 다음과 같이 대체 인스턴스를 시작할 풀을 결정합니다.
+ **가격 용량 최적화** 할당 전략을 사용하는 경우, 플릿은 스팟 인스턴스 용량 가용성이 가장 높은 풀에서 대체 인스턴스를 시작하면서 동시에 가격도 고려합니다. 즉, 용량 가용성이 높으면서 가격이 가장 낮은 풀을 식별합니다.
+ 할당 전략이 **용량 최적화**인 경우, 플릿은 스팟 인스턴스 용량의 가용성이 가장 높은 풀에서 대체 인스턴스를 시작합니다.
+ 할당 전략이 **다각화**인 경우 플릿은 나머지 풀에 대체 스팟 인스턴스를 배포합니다.

## 온디맨드 용량에 대한 인스턴스 유형 우선순위 지정
<a name="ec2-fleet-on-demand-priority"></a>

EC2 플릿 또는 스팟 플릿이 온디맨드 용량을 채우려고 시도하는 경우 기본적으로 최저 가격의 인스턴스 유형을 먼저 시작합니다. 온디맨드 할당 전략이 **우선순위**로 설정된 경우 플릿은 온디맨드 용량을 충족할 때 먼저 사용할 인스턴스 유형을 우선순위를 사용하여 결정합니다. 시작 템플릿 재정의에 우선순위를 할당하고 우선순위가 가장 높은 것을 먼저 시작합니다.

**예: 인스턴스 유형 우선순위**

예를 들어, 서로 다른 인스턴스 유형을 각각 지닌 3개의 시작 템플릿 재정의를 구성했다고 가정해 보겠습니다.

인스턴스 유형에 대한 온디맨드 요금 가격 범위. 다음은 이 예제에서 사용된 인스턴스 유형이며, 가격이 가장 낮은 인스턴스 유형부터 가격 순서대로 나열되어 있습니다.
+ `m4.large` - 가장 낮은 가격
+ `m5.large`
+ `m5a.large`

우선순위를 사용해 순서를 결정하지 않는 경우 플릿은 가격이 가장 낮은 인스턴스 유형으로 시작하여 온디맨드 용량을 채웁니다.

하지만 가장 먼저 사용하려는 `m5.large` 예약 인스턴스를 사용하지 않았다고 가정해 보겠습니다. 다음과 같이 인스턴스 유형이 우선순위에 따라 사용되도록 시작 템플릿 재정의 우선순위를 설정할 수 있습니다.
+ `m5.large` - 우선순위 1
+ `m4.large` - 우선순위 2
+ `m5a.large` - 우선순위 3

# EC2 플릿 및 스팟 플릿의 용량 리밸런싱을 사용하여 위험이 있는 스팟 인스턴스 교체
<a name="ec2-fleet-capacity-rebalance"></a>

용량 리밸런싱을 통해 EC2 플릿 또는 스팟 플릿은 중단 위험이 있는 스팟 인스턴스를 사전에 교체하여 원하는 스팟 용량을 유지할 수 있습니다. 스팟 인스턴스의 중단 위험이 높아질 때 Amazon EC2는 [재조정 권고](rebalance-recommendations.md)를 전송합니다. 용량 리밸런싱이 활성화된 경우 재조정 권고에 따라 위험이 있는 인스턴스가 중단되기 전에 새 스팟 인스턴스가 시작됩니다.

용량 리밸런싱을 사용하면 실행 중인 인스턴스가 Amazon EC2에 의해 중단되기 전에 미리 새 스팟 인스턴스로 플릿을 보강할 수 있으므로 워크로드 가용성을 유지하는 데 도움이 됩니다.

**대체 스팟 인스턴스를 시작하도록 용량 리밸런싱을 사용하여 EC2 플릿 구성**  
[create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 명령과 `MaintenanceStrategies` 구조의 관련 파라미터를 사용합니다. 예제 JSON 구성은 [예제 7: 대체 스팟 인스턴스를 시작하도록 용량 리밸런싱 구성](ec2-fleet-examples.md#ec2-fleet-config8)의 내용을 참조하세요.

**대체 스팟 인스턴스를 시작하도록 용량 리밸런싱을 사용하여 스팟 플릿 구성**  
Amazon EC2 콘솔 또는 AWS CLI를 사용하여 용량 리밸런싱을 구성할 수 있습니다.

(콘솔) 스팟 플릿을 생성할 때 **용량 재조정** 확인란을 선택합니다. 자세한 내용은 [정의된 파라미터를 사용하여 스팟 플릿 요청 생성](create-spot-fleet.md#create-spot-fleet-advanced)의 6.d 단계를 참조하세요.

(AWS CLI) [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 명령과 `SpotMaintenanceStrategies` 구조의 관련 파라미터를 사용합니다. 예제 JSON 구성은 [예제 8: 대체 스팟 인스턴스를 시작하도록 용량 리밸런싱 구성](spot-fleet-examples.md#fleet-config8)의 내용을 참조하세요.

**Topics**
+ [제한 사항](#ec2-fleet-capacity-rebalance-limitations)
+ [구성 옵션](#ec2-fleet-capacity-rebalance-config-options)
+ [고려 사항](#ec2-fleet-capacity-rebalance-considerations)

## 제한 사항
<a name="ec2-fleet-capacity-rebalance-limitations"></a>
+ 용량 재분배는 `maintain` 유형의 플릿에만 사용할 수 있습니다.
+ 플릿이 실행 중인 경우 용량 리밸런싱 설정을 수정할 수 없습니다. 용량 리밸런싱 설정을 변경하려면 플릿을 삭제하고 새 플릿을 생성해야 합니다.

## 구성 옵션
<a name="ec2-fleet-capacity-rebalance-config-options"></a>

EC2 플릿 및 스팟 플릿에 대한 `ReplacementStrategy`는 다음 두 값을 지원합니다.

`launch-before-terminate`  
Amazon EC2는 새로운 대체 스팟 인스턴스가 시작된 후 리밸런싱 알림을 받는 스팟 인스턴스를 종료합니다. `launch-before-terminate`를 지정하면 `termination-delay`에 대한 값도 함께 지정해야 합니다. 새 대체 인스턴스가 시작된 후 Amazon EC2는 `termination-delay` 기간 동안 기다린 다음 이전 인스턴스를 종료합니다. `termination-delay`에 대해 최솟값은 120초(2분)이고 최댓값은 7,200초(2시간)입니다.  
인스턴스 종료 절차가 완료되는 데 걸리는 시간을 예측할 수 있는 경우에만 `launch-before-terminate`를 사용하는 것이 좋습니다. 이렇게 하면 종료 절차가 완료된 후에만 이전 인스턴스가 종료됩니다. Amazon EC2는 `termination-delay` 전 2분 경고를 통해 기존 인스턴스를 중단할 수 있습니다.  
중단 위험이 높은 교체 스팟 인스턴스를 피하기 위해 `launch-before-terminate`와 함께 `lowest-price`(EC2 플릿) 또는 `lowestPrice`(스팟 플릿) 할당 전략을 사용하지 않는 것이 좋습니다.

`launch`  
Amazon EC2는 기존 스팟 인스턴스에 대해 리밸런싱 알림이 전송될 때 대체 스팟 인스턴스를 시작합니다. Amazon EC2는 리밸런싱 알림을 수신하는 인스턴스를 종료하지 않습니다. 이전 인스턴스를 종료하거나 실행 중인 상태로 둘 수 있습니다. 두 인스턴스가 실행되는 동안에는 두 인스턴스에 대해 요금이 청구됩니다.

## 고려 사항
<a name="ec2-fleet-capacity-rebalance-considerations"></a>

용량 리밸런싱을 위해 EC2 플릿 또는 스팟 플릿을 구성하는 경우 다음을 고려하세요.

**요청에 가능한 한 많은 스팟 용량 풀 제공**  
여러 인스턴스 유형 및 가용 영역을 사용하도록 플릿을 구성합니다. 이렇게 하면 다양한 스팟 용량 풀의 스팟 인스턴스를 유연하게 시작할 수 있습니다. 자세한 내용은 [인스턴스 유형 및 가용 영역에 대한 유연성 유지](spot-best-practices.md#be-instance-type-flexible) 섹션을 참조하세요.

**대체 스팟 인스턴스의 중단 위험 증가 방지**  
서비스 중단 위험이 높아지는 것을 방지하려면 `capacity-optimized` 또는 `capacity-optimized-prioritized` 할당 전략을 사용하는 것이 좋습니다. 이러한 전략을 통해 대체 스팟 인스턴스가 최적의 스팟 용량 풀에서 시작되므로 가까운 시일 내에 중단될 가능성이 줄어듭니다. 자세한 내용은 [가격 및 용량 최적화 할당 전략 사용](spot-best-practices.md#use-capacity-optimized-allocation-strategy) 섹션을 참조하세요.  
`lowest-price` 할당 전략을 사용하는 경우, 교체 스팟 인스턴스가 중단될 위험이 높아질 수도 있습니다. 이는 교체 스팟 인스턴스가 시작된 직후 중단될 가능성이 높더라도 Amazon EC2는 항상 그 순간에 가용 용량이 있는 최저 가격의 풀에서 인스턴스를 시작하기 때문입니다.

**Amazon EC2는 가용성이 동일하거나 더 나은 경우에만 새 인스턴스를 시작함**  
용량 리밸런싱의 목표 중 하나는 스팟 인스턴스의 가용성을 개선하는 것입니다. 기존 스팟 인스턴스에 대한 리밸런싱 권장 사항이 있는 경우, Amazon EC2는 새 인스턴스가 기존 인스턴스와 동일하거나 더 나은 가용성을 제공하는 경우에만 새 인스턴스를 시작합니다. 새 인스턴스의 중단 위험이 기존 인스턴스보다 더 높은 경우 Amazon EC2는 새 인스턴스를 시작하지 않습니다. 하지만 Amazon EC2는 스팟 용량 풀을 계속 평가하여 가용성이 향상되면 새 인스턴스를 시작합니다.  
Amazon EC2가 사전에 새 인스턴스를 시작하지 않은 채로 기존 인스턴스가 중단될 수 있습니다. 이 경우 Amazon EC2는 새 인스턴스가 중단될 위험이 높은지 여부에 관계없이 새 인스턴스를 시작하려고 시도합니다.

**용량 리밸런싱은 스팟 인스턴스의 간섭 속도를 증가시키지 않음**  
용량 리밸런싱을 활성화하면 [스팟 인스턴스 중단 속도](spot-interruptions.md)(Amazon EC2가 용량을 회수해야 할 때 회수되는 스팟 인스턴스의 수)가 증가하지 않습니다. 그러나 용량 리밸런싱에서 중단 위험이 있는 인스턴스를 탐지할 경우, Amazon EC2가 즉시 새로운 인스턴스를 시작하려고 시도합니다. 위험한 인스턴스가 중단된 후 Amazon EC2가 시작되기를 기다리면 새 인스턴스를 시작하는 것보다 더 많은 인스턴스가 교체될 수 있습니다.  
용량 리밸런싱을 활성화하면 더 많은 인스턴스를 교체하게 될 수도 있지만, 인스턴스가 중단되기 전까지 조치를 취할 시간 여유가 늘어나 미리 대비할 수 있어 도움이 됩니다. [스팟 인스턴스 중단 알림](spot-instance-termination-notices.md)이 오면 일반적으로 최대 2분 이내에 인스턴스를 적절히 종료해야 합니다. 용량 리밸런싱이 미리 새 인스턴스를 시작할 경우, 기존 프로세스에서 위험한 인스턴스를 완료하여 인스턴스 종료 절차를 시작할 기회가 커지므로 위험한 인스턴스에 새 작업이 예약되지 않도록 방지할 수 있습니다. 또한, 새로 시작한 인스턴스가 애플리케이션을 가져가도록 준비를 시작할 수도 있습니다. 용량 리밸런싱에서 미리 인스턴스를 교체하기 때문에 적절한 연속성을 누릴 수 있습니다.  
용량 리밸런싱을 사용할 때의 위험과 장점을 보여주는 이론적 예시로써 다음의 시나리오를 보여드리겠습니다.  
+ 오후 2:00 – 인스턴스-A에 대한 리밸런싱 권고를 받고, Amazon EC2가 즉시 교체 인스턴스-B를 시작하려고 시도하므로 종료 절차를 시작할 시간이 마련됩니다.\$1
+ 오후 2:30 – 인스턴스-B에 대한 리밸런싱 권고를 받고 인스턴스-C로 교체하므로 종료 절차를 시작할 시간이 마련됩니다.\$1
+ 오후 2:32 – 용량 리밸런싱을 활성화하지 않았고 인스턴스-A에 대한 스팟 인스턴스 간섭 알림을 오후 2:32에 받지 않은 경우, 조치를 취할 시간이 2분에 불과하지만 인스턴스-A는 이 시점까지 계속 실행 중입니다.
\$1 `launch-before-terminate`를 지정한 경우, 교체 인스턴스가 실행된 후 Amazon EC2가 위험한 인스턴스를 종료합니다.

**Amazon EC2는 이행 용량이 목표 용량의 두 배가 되기 전까지 새 대체 스팟 인스턴스를 시작할 수 있음**  
플릿에 용량 리밸런싱이 구성된 경우 리밸런싱 권고를 수신하는 모든 스팟 인스턴스에 대해 새로운 대체 스팟 인스턴스를 시작합니다. 재분배 권고를 수신하는 스팟 인스턴스는 더 이상 이행 용량의 일부로 계산되지 않습니다. 대체 전략에 따라 Amazon EC2는 사전 구성된 종료 지연 후에 인스턴스를 종료하거나 실행 중인 상태로 둡니다. 그러면 인스턴스에서 [리밸런싱 작업](rebalance-recommendations.md#rebalancing-actions)을 수행할 수 있습니다.  
플릿이 목표 용량의 두 배에 도달하면 대체 인스턴스 자체가 리밸런싱 권고를 수신하더라도 새 대체 인스턴스의 시작이 중지됩니다.  
예를 들어 100개의 스팟 인스턴스를 목표 용량으로 하는 플릿을 생성할 수 있습니다. 모든 스팟 인스턴스가 재분배 권고를 수신하고 Amazon EC2가 100개의 대체 스팟 인스턴스를 시작합니다. 그러면 이행된 스팟 인스턴스의 수가 200으로 증가하여 목표 용량의 두 배가 됩니다. 대체 인스턴스 중 일부는 리밸런싱 권고를 수신하지만, 플릿이 목표 용량의 두 배를 초과할 수 없기 때문에 더 이상 대체 인스턴스가 시작되지 않습니다.  
인스턴스가 실행되는 동안에는 모든 인스턴스에 대해 요금이 청구됩니다.

**리밸런싱 권고를 수신하는 스팟 인스턴스를 종료하는 스팟 플릿을 구성하는 것이 권장됨**  
용량 리밸런싱을 플릿을 구성하는 경우 인스턴스 종료 절차가 완료되는 데 걸리는 시간을 예측할 수 있는 경우에만 적절한 종료 지연으로 `launch-before-terminate`를 선택합니다. 이렇게 하면 종료 절차가 완료된 후에만 이전 인스턴스가 종료됩니다.  
재분배를 위해 권장되는 인스턴스를 직접 종료하도록 선택하는 경우 플릿의 스팟 인스턴스에 수신되는 재분배 권고 신호를 모니터링하는 것이 좋습니다. 신호를 모니터링하면 Amazon EC2에서 중단하기 전에 영향을 받는 인스턴스에 대해 [리밸런싱 작업](rebalance-recommendations.md#rebalancing-actions)을 신속하게 수행한 다음 수동으로 종료할 수 있습니다. 인스턴스를 종료하지 않으면 인스턴스가 실행되는 동안 계속 비용을 지불하게 됩니다. Amazon EC2는 리밸런싱 권고를 수신하는 인스턴스를 자동으로 종료하지 않습니다.  
Amazon EventBridge 또는 인스턴스 메타데이터를 사용하여 알림을 설정할 수 있습니다. 자세한 내용은 [리밸런싱 권고 신호 모니터링](rebalance-recommendations.md#monitor-rebalance-recommendations) 섹션을 참조하세요.

**플릿은 확장 또는 축소 중에 이행 용량을 계산할 때 리밸런싱 권고를 수신하는 인스턴스를 계산하지 않음**  
플릿에 용량 리밸런싱이 구성되어 있고 목표 용량을 축소 또는 확장으로 변경하는 경우 다음과 같이 플릿은 리밸런싱으로 표시된 인스턴스를 이행 용량의 일부로 계산하지 않습니다.  
+ 스케일 인 – 원하는 목표 용량을 줄이는 경우 Amazon EC2는 원하는 용량에 도달할 때까지 리밸런싱으로 표시되지 않은 인스턴스를 종료합니다. 리밸런싱으로 표시된 인스턴스는 이행 용량으로 계산되지 않습니다.

  예를 들어 스팟 인스턴스 100개의 목표 용량으로 플릿을 생성하는 경우 10개의 인스턴스에서 리밸런싱 권고를 수신하면 Amazon EC2가 10개의 새로운 대체 인스턴스를 시작하므로 결과적으로 이행 용량은 110개 인스턴스가 됩니다. 그런 다음 목표 용량을 50으로 줄이면(스케일 인) 이행 용량은 실제로 60개 인스턴스가 됩니다. Amazon EC2가 리밸런싱으로 표시된 10개 인스턴스가 종료되지 않기 때문입니다. 이러한 인스턴스를 수동으로 종료하거나 실행 상태로 둘 수 있습니다.
+ 스케일 아웃 – 원하는 목표 용량을 늘리면 원하는 용량에 도달할 때까지 Amazon EC2가 새 인스턴스를 시작합니다. 리밸런싱으로 표시된 인스턴스는 이행 용량으로 계산되지 않습니다.

  예를 들어 스팟 인스턴스 100개의 목표 용량으로 플릿을 생성하는 경우 10개의 인스턴스에서 리밸런싱 권고를 수신하면 플릿이 10개의 새로운 대체 인스턴스를 시작하므로 결과적으로 이행 용량은 110개 인스턴스가 됩니다. 그런 다음 목표 용량을 200으로 늘리면(확장) 이행 용량은 실제로 210개 인스턴스가 됩니다. 플릿에서 리밸런싱으로 표시된 10개 인스턴스가 목표 용량의 일부로 계산되지 않기 때문입니다. 이러한 인스턴스를 수동으로 종료하거나 실행 상태로 둘 수 있습니다.

# 용량 예약을 사용하여 EC2 플릿의 온디맨드 용량 예약
<a name="ec2-fleet-on-demand-capacity-reservations"></a>

온디맨드 용량 예약을 사용하면 특정 가용 영역의 온디맨드 인스턴스에 대해 원하는 기간만큼 컴퓨팅 용량을 예약할 수 있습니다. 먼저 온디맨드 인스턴스를 시작할 때 용량 예약을 사용하도록 EC2 플릿을 구성할 수 있습니다.

온디맨드 용량 예약은 요청 유형이 `instant`로 설정된 EC2 플릿에만 사용할 수 있습니다.

용량 예약은 `open` 또는 `targeted`로 구성됩니다. EC2 플릿은 다음과 같이 온디맨드 인스턴스를 `open` 또는 `targeted` 용량 예약으로 시작할 수 있습니다.
+ 용량 예약이 `open`이면 일치하는 속성이 있는 온디맨드 인스턴스는 예약 용량으로 자동 실행됩니다.
+ 용량 예약이 `targeted`이면 인스턴스를 예약 용량으로 실행하도록 대상을 구체적으로 지정해야 합니다. 이 기능은 특정 용량 예약을 사용하거나 특정 용량 예약을 사용할 시기를 제어할 때 유용합니다.

EC2 플릿의 `targeted` 용량 예약을 사용하는 경우, 목표 온디맨드 용량을 처리할 수 있는 충분한 용량 예약이 있어야 합니다. 그렇게 하지 않으면 시작이 실패합니다. 시작 실패를 방지하려면 `targeted` 용량 예약을 리소스 그룹에 추가한 후 리소스 그룹을 대상으로 지정합니다. 리소스 그룹에 충분한 용량 예약이 필요하지 않습니다. 목표 온디맨드 용량이 처리되기 전에 용량 예약이 부족하면 플릿이 나머지 목표 용량을 일반 온디맨드 용량으로 시작할 수 있습니다.

**EC2 플릿에서 용량 예약을 사용하려면**

1. 플릿을 `instant` 유형으로 구성합니다. 다른 유형의 플릿에는 용량 예약을 사용할 수 없습니다.

1. 용량 예약에 대한 사용 전략을 `use-capacity-reservations-first`로 구성합니다.

1. 시작 템플릿의 **용량 예약**에서 **열기(Open)** 또는 **그룹별 대상(Target by group)**을 선택합니다. **그룹별 대상(Target by group)**을 선택한 경우 용량 예약 리소스 그룹 ID를 지정합니다.

플릿이 온디맨드 용량을 처리하려고 할 때 여러 인스턴스 풀에 일치하는 용량 예약이 사용되지 않는 것으로 확인되면 온디맨드 할당 전략(`lowest-price` 또는 `prioritized`)에 따라 온디맨드 인스턴스를 시작할 풀을 결정합니다.

**관련 리소스**
+ 온디맨드 용량을 처리하기 위해 용량 예약을 사용하도록 플릿을 구성하는 방법의 CLI 예제는 [EC2 Fleet에 대한 CLI 구성 예제](ec2-fleet-examples.md) 섹션, 특히 예제 5\$17을 참조하세요.
+ 용량 예약을 생성하고, 플릿에서 용량 예약을 사용하고, 남은 용량 예약 수를 확인하는 단계를 안내하는 튜토리얼은 [튜토리얼: 대상으로 지정된 용량 예약을 사용하여 온디맨드 인스턴스를 시작하도록 EC2 플릿 구성](ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough.md) 섹션을 참조하세요.
+ 용량 예약 구성에 대한 자세한 내용은 [EC2 온디맨드 용량 예약으로 컴퓨팅 용량 예약](ec2-capacity-reservations.md) 및 [온디맨드 용량 예약 FAQ](https://aws.amazon.com/ec2/faqs/#On-Demand_Capacity_Reservation)를 참조하세요.

# EC2 플릿 사용
<a name="manage-ec2-fleet"></a>

EC2 Fleet 사용을 시작하려면 총 목표 용량, 온디맨드 용량, 스팟 용량 및 플릿의 인스턴스 구성을 지정하는 시작 템플릿을 포함하는 요청을 생성합니다. 추가 파라미터를 지정하거나 플릿에서 기본값을 사용하도록 할 수도 있습니다. 또한 플릿을 생성할 때 플릿 요청과 해당 인스턴스 및 볼륨에 태그를 지정할 수 있습니다.

플릿은 가용 용량이 있을 때 온디맨드 인스턴스를 시작하며, 최고 가격이 스팟 가격을 초과하고 가용 용량이 있을 때 스팟 인스턴스를 시작합니다.

플릿이 시작되면 플릿 요청, 플릿의 인스턴스, 모든 플릿 이벤트를 설명할 수 있습니다. 필요에 따라 추가 태그를 할당할 수도 있습니다.

총 대상 용량 등의 플릿 파라미터를 변경해야 하는 경우 용량을 유지하도록 구성된 플릿만 수정하면 됩니다. 일회성 요청이 제출된 후에는 해당 요청의 용량을 수정할 수 없습니다.

플릿 요청은 요청이 만료되거나 삭제될 때까지 활성 상태로 유지됩니다. 플릿 요청을 삭제할 때 인스턴스를 종료하거나 실행 중인 상태로 둘 수 있습니다 실행 중인 상태로 둘 경우 온디맨드 인스턴스는 사용자가 종료할 때까지 실행되고 스팟 인스턴스는 중단되거나 사용자가 종료할 때까지 실행됩니다.

**Topics**
+ [EC2 집합 요청 상태](EC2-fleet-states.md)
+ [EC2 Fleet 사전 조건](ec2-fleet-prerequisites.md)
+ [EC2 집합 생성](create-ec2-fleet.md)
+ [신규 또는 기존 EC2 Fleet 요청과 이를 통해 시작되는 인스턴스 및 볼륨 태그 지정](tag-ec2-fleet.md)
+ [EC2 Fleet, 해당 인스턴스 및 해당 이벤트 설명](describe-ec2-fleet.md)
+ [EC2 Fleet 수정](modify-ec2-fleet.md)
+ [EC2 Fleet 요청 및 플릿의 인스턴스 삭제](delete-fleet.md)

# EC2 집합 요청 상태
<a name="EC2-fleet-states"></a>

EC2 Fleet 요청 상태는 다음 중 하나일 수 있으며, 각 상태는 요청 수명 주기 및 인스턴스 관리의 서로 다른 단계를 나타냅니다.

EC2 Fleet 요청은 다음 상태 중 하나일 수 있습니다.

`submitted`  
EC2 집합 요청을 평가 중이며 Amazon EC2에서 목표 개수의 인스턴스를 시작하기 위해 준비 중입니다. 요청이 플릿 제한을 초과하면 즉시 해당 요청이 삭제됩니다.

`active`  
EC2 집합 요청이 확인되었으며 Amazon EC2가 실행 중인 인스턴스를 목표 개수만큼 유지하려고 시도하고 있습니다. 요청은 수정하거나 삭제할 때까지 이 상태로 유지됩니다.

`modifying`  
EC2 집합 요청을 수정하고 있습니다. 수정이 완전히 처리되거나 요청이 삭제될 때까지 요청이 이 상태로 유지됩니다. `maintain` 플릿 유형만 수정할 수 있습니다. 이 상태는 다른 요청 유형에는 적용되지 않습니다.

`deleted_running`  
EC2 Fleet 요청이 삭제되었고 추가 스팟 인스턴스를 시작하지 않습니다. 수동으로 중단되거나 종료될 때까지 기존 인스턴스가 계속 실행됩니다. 그 요청은 모든 인스턴스가 중단 또는 종료될 때까지 계속 이 상태로 유지됩니다. EC2 Fleet 요청이 삭제된 후에는 `maintain` 또는 `request` 유형의 EC2 Fleet에서만 인스턴스를 실행할 수 있습니다. 삭제된 `instant` 플릿에서 인스턴스를 실행하는 것은 지원되지 않습니다. 이 상태는 `instant` 플릿에는 적용되지 않습니다.

`deleted_terminating`  
EC2 집합 요청이 삭제되었고 해당 인스턴스를 종료하는 중입니다. 그 요청은 모든 인스턴스가 종료될 때까지 계속 이 상태로 유지됩니다.

`deleted`  
EC2 집합 요청이 삭제되었고 실행 중인 인스턴스가 없습니다. 인스턴스가 종료되고 2일 후 요청이 삭제됩니다.

# EC2 Fleet 사전 조건
<a name="ec2-fleet-prerequisites"></a>

**Topics**
+ [시작 템플릿](#ec2-fleet-prerequisites-launch-template)
+ [EC2 Fleet의 서비스 연결 역할](#ec2-fleet-service-linked-role)
+ [암호화된 AMI 및 EBS 스냅샷에 사용할 고객 관리형 키에 대한 액세스 권한 부여](#ec2-fleet-service-linked-roles-access-to-cmks)
+ [EC2 Fleet 사용자의 권한](#ec2-fleet-iam-users)

## 시작 템플릿
<a name="ec2-fleet-prerequisites-launch-template"></a>

시작 템플릿은 인스턴스 유형과 가용 영역 등 시작할 인스턴스에 대한 구성 정보를 지정합니다. 시작 템플릿에 대한 자세한 내용은 [Amazon EC2 시작 템플릿에 인스턴스 시작 파라미터 저장](ec2-launch-templates.md)의 내용을 참조하세요.

## EC2 Fleet의 서비스 연결 역할
<a name="ec2-fleet-service-linked-role"></a>

`AWSServiceRoleForEC2Fleet` 역할은 EC2 Fleet에 사용자 대신 인스턴스를 요청, 시작, 종료 및 태깅할 수 있는 권한을 부여합니다. Amazon EC2는 이 서비스 연결 역할을 사용하여 다음 작업을 완료합니다.
+ `ec2:RunInstances` – 인스턴스를 시작합니다.
+ `ec2:RequestSpotInstances` – 스팟 인스턴스 요청.
+ `ec2:TerminateInstances` – 인스턴스를 종료합니다.
+ `ec2:DescribeImages` - 인스턴스에 대한 Amazon Machine Image(AMI) 설명
+ `ec2:DescribeInstanceStatus` - 인스턴스 상태 설명
+ `ec2:DescribeSubnets` - 인스턴스의 서브넷 설명
+ `ec2:CreateTags` – EC2 Fleet, 인스턴스 및 볼륨에 태그를 추가합니다.

AWS CLI 또는 API를 사용하여 EC2 Fleet을 생성하려면 먼저 이 역할이 있어야 합니다.

**참고**  
`instant` EC2 Fleet에는 이 역할이 필요하지 않습니다.

역할을 생성하려면 다음과 같이 IAM 콘솔을 사용하세요.

**EC2 Fleet에 대한 AWSServiceRoleForEC2Fleet 역할 생성**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 **역할**을 선택합니다.

1. **역할 생성(Create role)**을 선택합니다.

1. **신뢰할 수 있는 엔터티 선택** 페이지에서 다음을 수행합니다.

   1. **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다.

   1. **사용 사례**에서 **서비스 또는 사용 사례**로 **EC2 - 플릿**을 선택합니다.
**작은 정보**  
**EC2 - 플릿**을 선택해야 합니다. **EC2**를 선택하면 **EC2 - 플릿** 사용 사례가 **사용 사례** 목록에 나타나지 않습니다. **EC2 - 플릿** 사용 사례는 필요한 IAM 권한으로 정책을 자동으로 생성하고 **AWSServiceRoleForEC2Fleet**을 역할 이름으로 제안합니다.

   1. **다음**을 선택합니다.

1. **권한 추가** 페이지에서 **다음**을 선택합니다.

1. **이름 지정, 검토 및 생성** 페이지에서 **역할 생성**을 선택합니다.

EC2 Fleet이 더 이상 필요 없으면 **AWSServiceRoleForEC2Fleet** 역할을 삭제하는 것이 좋습니다. 계정에서 이 역할을 삭제한 후 다른 플릿을 생성하면 다시 역할을 만들 수 있습니다.

자세한 내용은 IAM 사용 설명서**의 [서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html)을 참조하세요.

## 암호화된 AMI 및 EBS 스냅샷에 사용할 고객 관리형 키에 대한 액세스 권한 부여
<a name="ec2-fleet-service-linked-roles-access-to-cmks"></a>

EC2 Fleet에 [암호화된 AMI](AMIEncryption.md) 또는 암호화된 Amazon EBS 스냅샷을 지정하고 암호화에 AWS KMS 키를 사용하는 경우 Amazon EC2에서 자동으로 인스턴스를 시작하려면 고객 관리형 키를 사용할 권한을 **AWSServiceRoleForEC2Fleet** 역할에 부여해야 합니다. 이렇게 하려면 다음 절차에 표시된 바와 같이 고객 관리형 키에 대한 권한 부여를 추가해야 합니다.

권한을 제공할 때 권한 부여는 키 정책을 대체합니다. 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [권한 부여 사용](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) 및 [AWS KMS의 키 정책 사용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)을 참조하세요.

**AWSServiceRoleForEC2Fleet 역할에 고객 관리형 키를 사용할 수 있는 권한을 부여하려면**
+ [create-grant](https://docs.aws.amazon.com/cli/latest/reference/kms/create-grant.html) 명령을 사용하여 고객 관리형 키에 대한 권한 부여를 추가하고 허용된 작업을 수행할 수 있는 권한이 부여된 보안 주체(**AWSServiceRoleForEC2Fleet** 서비스 연결 역할)를 지정합니다. 고객 관리형 키는 `key-id` 파라미터와 고객 관리형 키의 ARN으로 지정됩니다. 보안 주체는 **AWSServiceRoleForEC2Fleet** 서비스 연결 역할의 `grantee-principal` 파라미터 및 ARN에 의해 지정됩니다.

  ```
  aws kms create-grant \
      --region us-east-1 \
      --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \
      --grantee-principal arn:aws:iam::111122223333:role/AWSServiceRoleForEC2Fleet \
      --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"
  ```

## EC2 Fleet 사용자의 권한
<a name="ec2-fleet-iam-users"></a>

EC2 Fleet을 생성하거나 관리하는 사용자에게 필요한 권한을 부여해야 합니다.

**EC2 Fleet에 대한 정책 생성**

1. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. 탐색 창에서 **Policies**를 선택합니다.

1. [**Create policy**]를 선택합니다.

1. **정책 생성** 페이지에서 **JSON** 탭을 선택한 다음, 텍스트를 다음과 같이 바꾸고 **정책 검토**를 선택합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:*"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                 "iam:ListRoles",
                 "iam:PassRole",
                 "iam:ListInstanceProfiles"
               ],
               "Resource":"arn:aws:iam::123456789012:role/DevTeam*"
           }
       ]
   }
   ```

------

   `ec2:*`는 모든 Amazon EC2 API 작업을 호출할 수 있는 사용자 권한을 부여합니다. 사용자를 특정 Amazon EC2 API 작업으로 제한하려면 해당 작업을 대신 지정하세요.

   사용자에는 기존 IAM 역할을 열거하는 `iam:ListRoles` 작업, EC2 Fleet 역할을 지정하는 `iam:PassRole` 작업 및 기존 인스턴스 프로파일을 열거하는 `iam:ListInstanceProfiles` 작업을 호출할 수 있는 권한이 있어야 합니다.

   (선택 사항) 사용자가 IAM 콘솔을 사용하여 역할 또는 인스턴스 프로파일을 생성할 수 있도록 하려면 정책에 다음 작업도 추가해야 합니다.
   + `iam:AddRoleToInstanceProfile`
   + `iam:AttachRolePolicy`
   + `iam:CreateInstanceProfile`
   + `iam:CreateRole`
   + `iam:GetRole`
   + `iam:ListPolicies`

1. **정책 검토** 페이지에 정책 이름과 설명을 입력한 다음 **정책 생성**을 선택합니다.

1. 액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요.
   + AWS IAM Identity Center의 사용자 및 그룹:

     권한 세트를 생성합니다. *AWS IAM Identity Center 사용자 안내서*에서 [권한 세트 생성](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)의 지침을 따릅니다.
   + ID 제공업체를 통해 IAM에서 관리되는 사용자:

     ID 페더레이션을 위한 역할을 생성합니다. *IAM 사용자 설명서*의 [Create a role for a third-party identity provider (federation)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)의 지침을 따릅니다.
   + IAM 사용자:
     + 사용자가 맡을 수 있는 역할을 생성합니다. *IAM 사용자 설명서*에서 [Create a role for an IAM user](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)의 지침을 따릅니다.
     + (권장되지 않음) 정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. *IAM 사용 설명서*에서 [사용자(콘솔)에 권한 추가](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)의 지침을 따릅니다.

# EC2 집합 생성
<a name="create-ec2-fleet"></a>

EC2 Fleet을 생성하려면 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 명령을 사용하여 JSON 파일에서 플릿 구성을 정의하고 파일을 참조합니다. JSON 파일에서 플릿의 총 목표 용량, 스팟 인스턴스 및 온디맨드 인스턴스에 대한 개별 목표 용량, AMI, 인스턴스 유형, 서브넷 또는 가용 영역, 하나 이상의 보안 그룹과 같은 구성을 정의하는 시작 템플릿을 지정해야 합니다. 시작 템플릿 구성을 재정의하는 파라미터, EC2 용량 풀에서 스팟 인스턴스 및 온디맨드 인스턴스를 선택하기 위한 할당 전략, 플릿에 대해 지불하려는 최대 금액 등의 추가 구성을 지정할 수도 있습니다. 자세한 내용은 [EC2 플릿 또는 스팟 플릿에 대한 구성 옵션](ec2-fleet-configuration-strategies.md) 섹션을 참조하세요.

EC2 Fleet은 가용 용량이 있을 때 온디맨드 인스턴스를 시작하고, 최고 가격이 스팟 가격을 초과하고 가용 용량이 있을 때 스팟 인스턴스를 시작합니다.

플릿에 스팟 인스턴스가 포함되어 있고 유형이 `maintain`인 경우 Amazon EC2에서 스팟 인스턴스가 중단되어도 플릿 목표 용량을 유지하려고 합니다.

## EC2 집합 제한 사항
<a name="EC2-fleet-limitations"></a>

EC2 Fleet에는 다음과 같은 제한이 적용됩니다.
+ EC2 Fleet 생성은 [Amazon EC2 API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html), [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html), [AWS SDK](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html#API_CreateFleet_SeeAlso), [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html)을 통해서만 사용 가능합니다.
+ EC2 Fleet 요청을 AWS 리전으로 확장할 수 없습니다. 리전마다 따로 EC2 Fleet을 생성해야 합니다.
+ EC2 Fleet 요청으로 동일한 가용 영역의 서로 다른 서브넷을 확장할 수 없습니다.

## EC2 집합 생성
<a name="create-ec2-fleet-procedure"></a>

EC2 Fleet을 사용하여 인스턴스 플릿을 시작하려면 플릿 요청에서 다음 파라미터만 지정하면 되고, 플릿은 다른 파라미터에 대한 기본값을 사용합니다.
+ `LaunchTemplateId` 또는 `LaunchTemplateName` - 사용할 시작 템플릿을 지정합니다(인스턴스 유형 및 가용 영역 등 시작할 인스턴스에 대한 파라미터 포함).
+ `TotalTargetCapacity` - 플릿의 총 목표 용량을 지정합니다.
+ `DefaultTargetCapacityType` - 기본 구매 옵션이 온디맨드 또는 스팟인지 여부를 지정합니다.

시작 템플릿에 지정된 파라미터를 재정의하기 위해 하나 이상의 재정의를 지정할 수 있습니다. 각각은 인스턴스 유형, 가용 영역, 서브넷, 최고 가격에 따라 달라질 수 있으며 다른 가중치 용량을 포함할 수 있습니다. 인스턴스 유형을 지정하는 대신 인스턴스에 있어야 하는 속성을 지정하면 Amazon EC2는 해당 속성으로 모든 인스턴스 유형을 식별할 수 있습니다. 자세한 내용은 [EC2 플릿 또는 스팟 플릿의 인스턴스 유형 선택에 대한 속성 지정](ec2-fleet-attribute-based-instance-type-selection.md) 단원을 참조하세요.

`instant` 유형의 EC2 Fleet의 경우 AMI ID 대신 Systems Manager 파라미터를 지정할 수 있습니다. 재정의 또는 시작 템플릿에서 Systems Manager 파라미터를 지정할 수 있습니다. 자세한 내용은 [AMI ID 대신 Systems Manager 파라미터 사용](create-launch-template.md#use-an-ssm-parameter-instead-of-an-ami-id) 섹션을 참조하세요.

JSON 파일의 플릿 파라미터를 지정할 수 있습니다. 지정할 수 있는 모든 파라미터에 대한 내용은 [모든 EC2 Fleet 구성 옵션 보기](#ec2-fleet-cli-skeleton)의 내용을 참조하세요.

플릿 구성 예제는 [EC2 Fleet에 대한 CLI 구성 예제](ec2-fleet-examples.md)의 내용을 참조하세요.

현재 콘솔에서 EC2 Fleet 생성은 지원되지 않습니다.

**EC2 Fleet을 생성하려면**  
[create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 명령을 사용하여 플릿을 생성하고 플릿 구성 파라미터를 포함하는 JSON 파일을 지정합니다.

```
aws ec2 create-fleet --cli-input-json file://file_name.json
```

다음은 `request` 또는 `maintain` 유형의 플릿에 대한 예제 출력입니다.

```
{
    "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE"
}
```

다음은 목표 용량을 시작한 `instant` 유형의 플릿에 대한 예제 출력입니다.

```
{
  "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE",
  "Errors": [],
  "Instances": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c5.large",
          "AvailabilityZone": "us-east-1a"
        }
      },
      "Lifecycle": "on-demand",
      "InstanceIds": [
        "i-1234567890abcdef0",
        "i-9876543210abcdef9" 
      ],
      "InstanceType": "c5.large",
      "Platform": null
    },
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c4.large",
          "AvailabilityZone": "us-east-1a"
        }
      },
      "Lifecycle": "on-demand",
      "InstanceIds": [
        "i-5678901234abcdef0",
        "i-5432109876abcdef9" 
      ]
  ]
}
```

다음은 시작되지 않은 인스턴스에 대한 오류와 함께 목표 용량의 일부를 시작한 `instant` 유형의 플릿에 대한 예제 출력입니다.

```
{
  "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE",
  "Errors": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c4.xlarge",
          "AvailabilityZone": "us-east-1a",
        }
      },
      "Lifecycle": "on-demand",
      "ErrorCode": "InsufficientInstanceCapacity",
      "ErrorMessage": ""
    },
  ],
  "Instances": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c5.large",
          "AvailabilityZone": "us-east-1a"
        }
      },
      "Lifecycle": "on-demand",
      "InstanceIds": [
        "i-1234567890abcdef0",
        "i-9876543210abcdef9" 
      ]
  ]
}
```

어떤 인스턴스도 시작하지 않은 `instant` 유형의 플릿에 대한 예제 출력입니다.

```
{
  "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE",
  "Errors": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c4.xlarge",
          "AvailabilityZone": "us-east-1a",
        }
      },
      "Lifecycle": "on-demand",
      "ErrorCode": "InsufficientCapacity",
      "ErrorMessage": ""
    },
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c5.large",
          "AvailabilityZone": "us-east-1a",
        }
      },
      "Lifecycle": "on-demand",
      "ErrorCode": "InsufficientCapacity",
      "ErrorMessage": ""
    },
  ],
  "Instances": []
}
```

## 비정상 스팟 인스턴스를 교체하는 EC2 Fleet 생성
<a name="ec2-fleet-health-checks"></a>

EC2 Fleet은 분마다 플릿의 인스턴스 상태를 확인합니다. 인스턴스의 상태는 `healthy` 또는 `unhealthy`입니다.

EC2 Fleet은 Amazon EC2에서 제공하는 상태 확인을 사용하여 인스턴스의 상태를 판단합니다. 세 번의 연속 상태 확인에서 인스턴스 상태 또는 시스템 상태가 `unhealthy`인 경우, 해당 인스턴스의 상태는 `impaired`으로 확인됩니다. 자세한 내용은 [Amazon EC2 인스턴스 상태 확인](monitoring-system-instance-status-check.md) 섹션을 참조하세요.

플릿을 구성하여 비정상 스팟 인스턴스를 교체할 수 있습니다. `ReplaceUnhealthyInstances`를 `true`로 설정한 이후 스팟 인스턴스는 `unhealthy`로 보고될 때 교체됩니다. 플릿은 비정상 스팟 인스턴스가 교체되는 동안 최대 몇 분간 목표 용량을 밑돌 수 있습니다.

**요구 사항**
+ 상태 확인 교체는 목표 용량을 유지하는 EC2 Fleet(`maintain` 유형 플릿)에만 지원되지만 `request` 또는 `instant` 유형 플릿에서는 지원되지 않습니다.
+ 상태 확인 교체는 스팟 인스턴스에 대해서만 지원됩니다. 이 기능은 온디맨드 인스턴스에 대해 지원되지 않습니다.
+ 비정상 인스턴스를 생성할 경우에만 이를 교체하도록 EC2 Fleet을 구성할 수 있습니다.
+ 사용자는 `ec2:DescribeInstanceStatus` 작업을 호출할 권한이 있는 경우에만 상태 확인 대체를 사용할 수 있습니다.

**비정상 스팟 인스턴스를 교체하도록 EC2 Fleet을 구성하려면**

1. [EC2 집합 생성](#create-ec2-fleet-procedure)에서 EC2 Fleet 생성을 위한 정보를 사용합니다.

1. 비정상 스팟 인스턴스를 교체하도록 플릿을 구성하려면 JSON 파일에서 `ReplaceUnhealthyInstances`에 대해 `true`를 지정합니다.

## 모든 EC2 Fleet 구성 옵션 보기
<a name="ec2-fleet-cli-skeleton"></a>

EC2 Fleet 구성 파라미터의 전체 목록을 보려면 JSON 파일을 생성할 수 있습니다. 각 파라미터에 대한 설명은 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 섹션을 참조하세요.

**가능한 모든 EC2 Fleet 파라미터가 포함된 JSON 파일을 생성하려면**  
[create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html)(AWS CLI) 명령 및 `--generate-cli-skeleton` 파라미터를 사용하여 EC2 Fleet JSON 파일을 생성하고 파일에 출력을 향하게 하여 저장합니다.

```
aws ec2 create-fleet \
    --generate-cli-skeleton input > ec2createfleet.json
```

다음은 예제 출력입니다.

```
{
    "DryRun": true,
    "ClientToken": "",
    "SpotOptions": {
        "AllocationStrategy": "price-capacity-optimized",
        "MaintenanceStrategies": {
            "CapacityRebalance": {
                "ReplacementStrategy": "launch"
            }
        },
        "InstanceInterruptionBehavior": "hibernate",
        "InstancePoolsToUseCount": 0,
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true,
        "MinTargetCapacity": 0,
        "MaxTotalPrice": ""
    },
    "OnDemandOptions": {
        "AllocationStrategy": "prioritized",
        "CapacityReservationOptions": {
            "UsageStrategy": "use-capacity-reservations-first"
        },
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true,
        "MinTargetCapacity": 0,
        "MaxTotalPrice": ""
    },
    "ExcessCapacityTerminationPolicy": "termination",
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "",
                "LaunchTemplateName": "",
                "Version": ""
            },
            "Overrides": [
                {
                    "InstanceType": "r5.metal",
                    "MaxPrice": "",
                    "SubnetId": "",
                    "AvailabilityZone": "",
                    "WeightedCapacity": 0.0,
                    "Priority": 0.0,
                    "Placement": {
                        "AvailabilityZone": "",
                        "Affinity": "",
                        "GroupName": "",
                        "PartitionNumber": 0,
                        "HostId": "",
                        "Tenancy": "dedicated",
                        "SpreadDomain": "",
                        "HostResourceGroupArn": ""
                    },
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 0
                        },
                        "MemoryMiB": {
                            "Min": 0,
                            "Max": 0
                        },
                        "CpuManufacturers": [
                            "amd"
                        ],
                        "MemoryGiBPerVCpu": {
                            "Min": 0.0,
                            "Max": 0.0
                        },
                        "ExcludedInstanceTypes": [
                            ""
                        ],
                        "InstanceGenerations": [
                            "previous"
                        ],
                        "SpotMaxPricePercentageOverLowestPrice": 0,
                        "OnDemandMaxPricePercentageOverLowestPrice": 0,
                        "BareMetal": "included",
                        "BurstablePerformance": "required",
                        "RequireHibernateSupport": true,
                        "NetworkInterfaceCount": {
                            "Min": 0,
                            "Max": 0
                        },
                        "LocalStorage": "excluded",
                        "LocalStorageTypes": [
                            "ssd"
                        ],
                        "TotalLocalStorageGB": {
                            "Min": 0.0,
                            "Max": 0.0
                        },
                        "BaselineEbsBandwidthMbps": {
                            "Min": 0,
                            "Max": 0
                        },
                        "AcceleratorTypes": [
                            "inference"
                        ],
                        "AcceleratorCount": {
                            "Min": 0,
                            "Max": 0
                        },
                        "AcceleratorManufacturers": [
                            "amd"
                        ],
                        "AcceleratorNames": [
                            "a100"
                        ],
                        "AcceleratorTotalMemoryMiB": {
                            "Min": 0,
                            "Max": 0
                        }
                    }
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 0,
        "OnDemandTargetCapacity": 0,
        "SpotTargetCapacity": 0,
        "DefaultTargetCapacityType": "on-demand",
        "TargetCapacityUnitType": "memory-mib"
    },
    "TerminateInstancesWithExpiration": true,
    "Type": "instant",
    "ValidFrom": "1970-01-01T00:00:00",
    "ValidUntil": "1970-01-01T00:00:00",
    "ReplaceUnhealthyInstances": true,
    "TagSpecifications": [
        {
            "ResourceType": "fleet",
            "Tags": [
                {
                    "Key": "",
                    "Value": ""
                }
            ]
        }
    ],
    "Context": ""
}
```

# 신규 또는 기존 EC2 Fleet 요청과 이를 통해 시작되는 인스턴스 및 볼륨 태그 지정
<a name="tag-ec2-fleet"></a>

EC2 Fleet 요청과 이를 통해 시작되는 인스턴스와 볼륨을 분류 및 관리하는 데 도움이 되도록 사용자 지정 메타데이터로 이 요청에 태그를 지정할 수 있습니다. EC2 Fleet 요청을 만들 때 또는 만든 후 요청에 태그를 지정할 수 있습니다. 마찬가지로 플릿에서 인스턴스와 볼륨이 시작될 때 또는 그 이후에 인스턴스와 볼륨에 태그를 할당할 수 있습니다.

플릿 요청에 태그를 지정할 때 플릿에서 시작한 인스턴스 및 볼륨에는 태그가 자동으로 지정되지 않습니다. 플릿에서 시작한 인스턴스 및 볼륨에 명시적으로 태그를 지정해야 합니다. 플릿 요청에만, 플릿에서 시작한 인스턴스에만, 플릿에서 시작한 인스턴스에 연결된 볼륨에만, 또는 모두에 태그를 할당하도록 선택할 수 있습니다.

**참고**  
`instant` 플릿 유형의 경우 온디맨드 인스턴스 및 스팟 인스턴스에 연결된 볼륨에 태그를 지정할 수 있습니다. `request` 또는 `maintain` 플릿 유형의 경우 온디맨드 인스턴스에 연결된 볼륨에만 태그를 지정할 수 있습니다.

태그 작동 방식에 대한 자세한 내용은 [Amazon EC2 리소스 태깅](Using_Tags.md) 섹션을 참조하세요.

**사전 조건**

사용자에게 리소스에 태그를 지정할 수 있는 권한을 부여합니다. 자세한 내용은 [예: 태그 리소스](ExamplePolicies_EC2.md#iam-example-taggingresources) 섹션을 참조하세요.

**사용자에게 리소스에 태그를 지정할 수 있는 권한을 부여하려면**  
다음을 포함하는 IAM 정책을 만듭니다.
+ `ec2:CreateTags` 작업 사용자에게 태그 생성 권한이 부여됩니다.
+ `ec2:CreateFleet` 작업 사용자에게 EC2 Fleet 요청 생성 권한이 부여됩니다.
+ `Resource`의 경우 `"*"`를 지정하는 것이 좋습니다. 이를 통해 사용자는 모든 리소스 유형에 태그를 지정할 수 있습니다.

액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요.
+ AWS IAM Identity Center의 사용자 및 그룹:

  권한 세트를 생성합니다. *AWS IAM Identity Center 사용자 안내서*에서 [권한 세트 생성](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)의 지침을 따릅니다.
+ ID 제공업체를 통해 IAM에서 관리되는 사용자:

  ID 페더레이션을 위한 역할을 생성합니다. *IAM 사용자 설명서*의 [Create a role for a third-party identity provider (federation)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)의 지침을 따릅니다.
+ IAM 사용자:
  + 사용자가 맡을 수 있는 역할을 생성합니다. *IAM 사용자 설명서*에서 [Create a role for an IAM user](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)의 지침을 따릅니다.
  + (권장되지 않음) 정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. *IAM 사용 설명서*에서 [사용자(콘솔)에 권한 추가](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)의 지침을 따릅니다.

**새 EC2 Fleet 요청에 태그를 지정하려면**  
EC2 Fleet 요청 생성 시 요청에 태그를 지정하려면 플릿을 생성하는 데 사용되는 [JSON 파일](create-ec2-fleet.md#ec2-fleet-cli-skeleton)에 키-값 페어를 지정하세요. `ResourceType`의 값은 `fleet`이어야 합니다. 다른 값을 지정하면 플릿 요청이 실패합니다.

**EC2 Fleet에서 시작한 인스턴스 및 볼륨에 태그를 지정하려면**  
플릿이 시작하는 해당 인스턴스 및 볼륨에 태그를 지정하려면 EC2 Fleet 요청에서 참조되는 [시작 템플릿](create-launch-template.md)에서 태그를 지정하세요.

**참고**  
`request` 또는 `maintain` 플릿 유형에서 시작한 스팟 인스턴스에 연결된 볼륨에는 태그를 지정할 수 없습니다.

**기존 EC2 Fleet 요청, 인스턴스 및 볼륨에 태그를 지정하려면**  
[create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html) 명령을 사용하여 기존 리소스에 태그를 지정합니다.

```
aws ec2 create-tags \
    --resources fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE i-1234567890abcdef0 vol-1234567890EXAMPLE \
    --tags Key=purpose,Value=test
```

# EC2 Fleet, 해당 인스턴스 및 해당 이벤트 설명
<a name="describe-ec2-fleet"></a>

EC2 Fleet 구성, EC2 Fleet의 인스턴스 및 EC2 Fleet의 이벤트 기록을 설명할 수 있습니다.

**Topics**
+ [EC2 Fleet 설명](#describe-all-ec2-fleets)
+ [EC2 Fleet의 모든 인스턴스 설명](#describe-instances-in-ec2-fleet)
+ [EC2 Fleet의 이벤트 기록 설명](#describe-ec2-fleet-event-history)

## EC2 Fleet 설명
<a name="describe-all-ec2-fleets"></a>

------
#### [ AWS CLI ]

**EC2 플릿을 설명하려면**  
[describe-fleets](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-fleets.html) 명령을 사용합니다.

```
aws ec2 describe-fleets \
    --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

다음은 예제 출력입니다.

```
{
    "Fleets": [
        {
            "ActivityStatus": "fulfilled",
            "CreateTime": "2022-02-09T03:35:52+00:00",
            "FleetId": "fleet-364457cd-3a7a-4ed9-83d0-7b63e51bb1b7",
            "FleetState": "active",
            "ExcessCapacityTerminationPolicy": "termination",
            "FulfilledCapacity": 2.0,
            "FulfilledOnDemandCapacity": 0.0,
            "LaunchTemplateConfigs": [
                {
                    "LaunchTemplateSpecification": {
                        "LaunchTemplateName": "my-launch-template",
                        "Version": "$Latest"
                    }
                }
            ],
            "TargetCapacitySpecification": {
                "TotalTargetCapacity": 2,
                "OnDemandTargetCapacity": 0,
                "SpotTargetCapacity": 2,
                "DefaultTargetCapacityType": "spot"
            },
            "TerminateInstancesWithExpiration": false,
            "Type": "maintain",
            "ReplaceUnhealthyInstances": false,
            "SpotOptions": {
                "AllocationStrategy": "capacity-optimized",
                "InstanceInterruptionBehavior": "terminate"
            },
            "OnDemandOptions": {
                "AllocationStrategy": "lowestPrice"
            }
        }
    ]
}
```

------
#### [ PowerShell ]

**EC2 플릿을 설명하려면**  
[Get-EC2FleetList](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2FleetList.html) cmdlet을 사용합니다.

```
Get-EC2FleetList `
    -FleetId fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

------

## EC2 Fleet의 모든 인스턴스 설명
<a name="describe-instances-in-ec2-fleet"></a>

반환되는 실행 중 인스턴스 목록은 주기적으로 새로 고쳐지며 최신 상태가 아닐 수도 있습니다.

------
#### [ AWS CLI ]

**지정된 EC2 플릿의 인스턴스를 설명하려면**  
[describe-fleet-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-fleet-instances.html) 명령을 사용합니다.

```
aws ec2 describe-fleet-instances \
    --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

다음은 예제 출력입니다.

```
{
    "ActiveInstances": [
        {
            "InstanceId": "i-09cd595998cb3765e", 
            "InstanceHealth": "healthy", 
            "InstanceType": "m4.large", 
            "SpotInstanceRequestId": "sir-86k84j6p"
        }, 
        {
            "InstanceId": "i-09cf95167ca219f17", 
            "InstanceHealth": "healthy", 
            "InstanceType": "m4.large", 
            "SpotInstanceRequestId": "sir-dvxi7fsm"
        }
    ], 
    "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE"
}
```

------
#### [ PowerShell ]

**지정된 EC2 플릿의 인스턴스를 설명하려면**  
[Get-EC2FleetInstanceList](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2FleetInstanceList.html) cmdlet을 사용합니다.

```
Get-EC2FleetInstanceList `
    -FleetId fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

------

## EC2 Fleet의 이벤트 기록 설명
<a name="describe-ec2-fleet-event-history"></a>

이벤트 기록의 이벤트에 대한 자세한 내용은 [EC2 Fleet 이벤트 유형](monitor-ec2-fleet-using-eventbridge.md#ec2-fleet-event-types) 섹션을 참조하세요.

------
#### [ AWS CLI ]

**지정된 EC2 플릿에 대한 이벤트를 설명하려면**  
[describe-fleet-history](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-fleet-history.html) 명령을 사용합니다.

```
aws ec2 describe-fleet-history \
    --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --start-time 2020-06-01T00:00:00Z
```

다음은 예제 출력입니다.

```
{
    "HistoryRecords": [
        {
            "EventInformation": {
                "EventSubType": "submitted"
            },
            "EventType": "fleetRequestChange",
            "Timestamp": "2020-09-01T18:26:05.000Z"
        },
        {
            "EventInformation": {
                "EventSubType": "active"
            },
            "EventType": "fleetRequestChange",
            "Timestamp": "2020-09-01T18:26:15.000Z"
        },
        {
            "EventInformation": {
                "EventDescription": "t2.small, ami-07c8bc5c1ce9598c3, ...",
                "EventSubType": "progress"
            },
            "EventType": "fleetRequestChange",
            "Timestamp": "2020-09-01T18:26:17.000Z"
        },
        {
            "EventInformation": {
                "EventDescription": "{\"instanceType\":\"t2.small\", ...}",
                "EventSubType": "launched",
                "InstanceId": "i-083a1c446e66085d2"
            },
            "EventType": "instanceChange",
            "Timestamp": "2020-09-01T18:26:17.000Z"
        },
        {
            "EventInformation": {
                "EventDescription": "{\"instanceType\":\"t2.small\", ...}",
                "EventSubType": "launched",
                "InstanceId": "i-090db02406cc3c2d6"
            },
            "EventType": "instanceChange",
            "Timestamp": "2020-09-01T18:26:17.000Z"
        }
    ], 
    "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", 
    "LastEvaluatedTime": "1970-01-01T00:00:00.000Z", 
    "StartTime": "2020-06-01T00:00:00.000Z"
}
```

------
#### [ PowerShell ]

**지정된 EC2 플릿에 대한 이벤트를 설명하려면**  
[Get-EC2FleetHistory](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2FleetHistory.html) cmdlet을 사용합니다.

```
Get-EC2FleetHistory `
    -FleetId fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE `
    -UtcStartTime 2020-06-01T00:00:00Z
```

------

# EC2 Fleet 수정
<a name="modify-ec2-fleet"></a>

EC2 Fleet의 총 목표 용량, 스팟 용량 및 온디맨드 용량을 수정할 수 있습니다. 총 목표 용량이 플릿의 현재 크기보다 작아지면 실행 중인 인스턴스를 종료할지 여부를 수정할 수도 있습니다.

## 고려 사항
<a name="modify-ec2-fleet-considerations"></a>

EC2 Fleet 수정 시 고려할 사항:
+ **플릿 유형** - 유형이 `maintain`인 EC2 Fleet만 수정할 수 있습니다. 유형이 `request` 또는 `instant`인 EC2 Fleet은 수정할 수 없습니다.
+ **플릿 파라미터** - EC2 Fleet의 다음 파라미터를 수정할 수 있습니다.
  + `target-capacity-specification` – 다음의 목표 용량 증가 또는 감소:
    + `TotalTargetCapacity`
    + `OnDemandTargetCapacity`
    + `SpotTargetCapacity`
  + `excess-capacity-termination-policy` – EC2 Fleet의 총 목표 용량이 플릿의 현재 크기보다 작아지면 실행 중인 인스턴스를 종료할지 여부입니다. 유효한 값은 다음과 같습니다.
    + `no-termination`
    + `termination`
+ **총 목표 용량 증가 시 플릿 동작** - 총 목표 용량을 늘리면 EC2 Fleet은 `DefaultTargetCapacityType`에 대해 지정된 인스턴스 구매 옵션(온디맨드 인스턴스 또는 스팟 인스턴스), 그리고 지정된 [할당 전략](ec2-fleet-allocation-strategy.md)에 따라 추가 인스턴스를 시작합니다.
+ **스팟 목표 용량 감소 시 플릿 동작** - 스팟 목표 용량을 줄이면 EC2 Fleet이 새 목표 용량을 초과하는 모든 열린 요청을 삭제합니다. 플릿의 크기가 새 목표 용량에 도달할 때까지 플릿에서 스팟 인스턴스를 종료하도록 요청할 수 있습니다. 목표 용량이 줄어 EC2 Fleet이 스팟 인스턴스를 종료하면 해당 인스턴스는 스팟 인스턴스 중단 공지를 받습니다.

  인스턴스는 할당 전략에 따라 종료 대상이 선택됩니다.
  + `capacity-optimized` - 사용 가능한 용량이 가장 적은 풀에서 인스턴스를 종료합니다.
  + `price-capacity-optimized` - 가격과 사용 가능한 용량의 조합을 사용합니다. 즉, 사용 가능한 용량이 가장 적은 풀에 속하고 해당 풀에서 가격이 가장 높은 인스턴스를 종료합니다.
  + `diversified` - 모든 풀에서 인스턴스를 종료합니다.
  + `lowest-price` - 최고 가격의 풀에서 인스턴스를 종료합니다.

  또는 EC2 Fleet이 플릿을 현재 크기로 유지하되, 중단되거나 수동으로 종료하는 스팟 인스턴스를 교체하지 않도록 요청할 수 있습니다.
+ **플릿 상태** - `submitted` 또는 `active` 상태인 EC2 Fleet을 수정할 수 있습니다. 플릿을 수정할 때 플릿은 `modifying` 상태가 됩니다.

## EC2 Fleet 수정 명령
<a name="modify-ec2-fleet-commands"></a>

------
#### [ AWS CLI ]

**EC2 Fleet의 총 목표 용량을 수정하려면**  
[modify-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-fleet.html) 명령을 사용합니다.

```
aws ec2 modify-fleet \
    --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --target-capacity-specification TotalTargetCapacity=20
```

목표 용량을 줄이고 플릿은 현재 크기로 유지하려는 경우 다음과 같이 이전 예제를 수정할 수 있습니다.

```
aws ec2 modify-fleet \
    --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --target-capacity-specification TotalTargetCapacity=10 \
    --excess-capacity-termination-policy no-termination
```

------
#### [ PowerShell ]

**EC2 Fleet의 총 목표 용량을 수정하려면**  
[Edit-EC2Fleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2Fleet.html) cmdlet을 사용합니다.

```
Edit-EC2Fleet `
    -FleetId "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TargetCapacitySpecification_TotalTargetCapacity 20
```

목표 용량을 줄이고 플릿은 현재 크기로 유지하려는 경우 다음과 같이 이전 예제를 수정할 수 있습니다.

```
Edit-EC2Fleet `
    -FleetId "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TargetCapacitySpecification_TotalTargetCapacity 20 `
    -ExcessCapacityTerminationPolicy "NoTermination"
```

------

# EC2 Fleet 요청 및 플릿의 인스턴스 삭제
<a name="delete-fleet"></a>

EC2 Fleet 요청이 더 이상 필요하지 않으면 삭제할 수 있습니다. 플릿 요청을 삭제하면 플릿과 연결된 모든 스팟 요청이 취소되어 새 스팟 인스턴스가 시작되지 않습니다.

EC2 Fleet 요청을 삭제하는 경우 해당 인스턴스도 모두 종료할지 여부를 지정해야 합니다. 여기에는 온디맨드 인스턴스와 스팟 인스턴스가 모두 포함됩니다. `instant` 플릿의 경우, EC2 Fleet은 플릿이 삭제될 때 인스턴스를 종료해야 합니다. 삭제된 `instant` 플릿에서 인스턴스를 실행하는 것은 지원되지 않습니다.

**주의**  
**인스턴스 종료는 영구적이며 취소할 수 없습니다.**  
종료한 인스턴스는 더 이상 연결할 수 없으며 복구할 수 없습니다. 연결된 Amazon EBS 볼륨도 종료 시 삭제하도록 구성한 경우 영구적으로 삭제되며 복구할 수 없습니다. 인스턴스 저장소 볼륨에 저장된 데이터는 모두 영구적으로 손실됩니다. 자세한 내용은 [인스턴스 종료 작동 방식](how-ec2-instance-termination-works.md) 섹션을 참조하세요.  
인스턴스를 종료하기 전에 종료 후에도 보존해야 하는 모든 데이터를 영구 스토리지에 백업했는지 확인하세요.

플릿 요청이 삭제되면 인스턴스가 종료되도록 지정할 경우 플릿 요청이 `deleted_terminating` 상태가 됩니다. 그렇게 하지 않으면 `deleted_running` 상태가 되어 인스턴스가 중단되거나 수동으로 종료될 때까지 계속 실행됩니다.

**제한 사항**
+ 단일 작업으로 `instant` 유형의 플릿을 25개까지 삭제할 수 있습니다.
+ 단일 작업으로 `maintain` 또는 `request` 유형의 플릿을 100개까지 삭제할 수 있습니다.
+ 위에서 지정한 대로 각 플릿 유형의 할당량을 초과하지 않는 경우 단일 작업으로 최대 125개의 플릿을 삭제할 수 있습니다.
+ 삭제할 플릿의 지정된 수를 초과하면 플릿이 삭제되지 않습니다.
+ 삭제된 `instant` 플릿에서 인스턴스를 실행하는 것은 지원되지 않습니다. `instant` 플릿을 삭제하면 Amazon EC2가 모든 인스턴스를 자동으로 종료합니다. 인스턴스가 1,000개 이상인 `instant` 플릿의 경우 삭제 요청이 실패할 수 있습니다. 플릿에 인스턴스가 1,000개 이상인 경우 먼저 인스턴스를 대부분 수동으로 종료하여 1,000개 이하를 남깁니다. 그런 다음 플릿을 삭제하면 나머지 인스턴스가 자동으로 종료됩니다.

------
#### [ AWS CLI ]

**EC2 플릿 요청을 삭제하고 해당 인스턴스를 종료하려면**  
[delete-fleets](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-fleets.html) 명령을 `--terminate-instances` 옵션과 함께 사용합니다.

```
aws ec2 delete-fleets \
    --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --terminate-instances
```

다음은 예제 출력입니다.

```
{
    "UnsuccessfulFleetDeletions": [], 
    "SuccessfulFleetDeletions": [
        {
            "CurrentFleetState": "deleted_terminating", 
            "PreviousFleetState": "active", 
            "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE"
        }
    ]
}
```

**인스턴스 종료 없이 EC2 플릿 요청을 삭제하려면**  
`--no-terminate-instances` 옵션을 대신 사용하여 이전 예제를 수정합니다. `--no-terminate-instances`는 `instant` 플릿에 지원되지 않습니다.

```
aws ec2 delete-fleets \
    --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --no-terminate-instances
```

다음은 예제 출력입니다.

```
{
    "UnsuccessfulFleetDeletions": [], 
    "SuccessfulFleetDeletions": [
        {
            "CurrentFleetState": "deleted_running", 
            "PreviousFleetState": "active", 
            "FleetId": "fleet-4b8aaae8-dfb5-436d-a4c6-3dafa4c6b7dcEXAMPLE"
        }
    ]
}
```

------
#### [ PowerShell ]

**EC2 플릿 요청을 삭제하고 해당 인스턴스를 종료하려면**  
[Remove-EC2Fleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2Fleet.html) cmdlet을 `-TerminateInstance` 파라미터와 함께 사용합니다.

```
Remove-EC2Fleet `
    -FleetId "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TerminateInstance $true
```

**인스턴스 종료 없이 EC2 플릿 요청을 삭제하려면**  
`-TerminateInstance` 파라미터 값을 변경하여 이전 예제를 수정합니다.

```
Remove-EC2Fleet `
    -FleetId "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TerminateInstance $false
```

------

## 플릿 삭제 실패 시 문제 해결
<a name="troubleshoot-delete-fleet"></a>

EC2 Fleet 요청이 삭제에 실패하는 경우 출력의 `UnsuccessfulFleetDeletions`에서 EC2 Fleet의 ID, 오류 코드 및 오류 메시지를 반환합니다.

오류 코드는 다음과 같습니다.
+ `ExceededInstantFleetNumForDeletion`
+ `fleetIdDoesNotExist`
+ `fleetIdMalformed`
+ `fleetNotInDeletableState`
+ `NoTerminateInstancesNotSupported`
+ `UnauthorizedOperation`
+ `unexpectedError`

**`ExceededInstantFleetNumForDeletion` 문제 해결**  
단일 요청에서 25개 이상의 `instant` 플릿을 삭제하려고 하면 `ExceededInstantFleetNumForDeletion` 오류가 반환됩니다. 다음은 이 오류의 예제 출력입니다.

```
{
    "UnsuccessfulFleetDeletions": [
     {
          "FleetId": " fleet-5d130460-0c26-bfd9-2c32-0100a098f625",
          "Error": {
                  "Message": "Can’t delete more than 25 instant fleets in a single request.",
                  "Code": "ExceededInstantFleetNumForDeletion"
           }
     },
     {
           "FleetId": "fleet-9a941b23-0286-5bf4-2430-03a029a07e31",
           "Error": {
                  "Message": "Can’t delete more than 25 instant fleets in a single request.",
                  "Code": "ExceededInstantFleetNumForDeletion"
            }
     }
     .
     .
     .
     ],
     "SuccessfulFleetDeletions": []
}
```

**`NoTerminateInstancesNotSupported` 문제 해결**  
플릿을 삭제할 때 `instant` 플릿의 인스턴스를 종료하지 않도록 지정하면 `NoTerminateInstancesNotSupported` 오류가 반환됩니다. `--no-terminate-instances`는 `instant` 플릿에 대해 지원되지 않습니다. 다음은 이 오류의 예제 출력입니다.

```
{
      "UnsuccessfulFleetDeletions": [
            {
                  "FleetId": "fleet-5d130460-0c26-bfd9-2c32-0100a098f625",
                  "Error": {
                          "Message": "NoTerminateInstances option is not supported for instant fleet",
                          "Code": "NoTerminateInstancesNotSupported"
                   }
            }
       ],
       "SuccessfulFleetDeletions": []
}
```

**`UnauthorizedOperation` 문제 해결**  
인스턴스 종료 권한이 없는 경우 인스턴스를 종료해야 하는 플릿을 삭제할 때 `UnauthorizedOperation` 오류가 발생합니다. 다음은 오류 응답입니다.

```
<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this 
operation. Encoded authorization failure message: VvuncIxj7Z_CPGNYXWqnuFV-YjByeAU66Q9752NtQ-I3-qnDLWs6JLFd
KnSMMiq5s6cGqjjPtEDpsnGHzzyHasFHOaRYJpaDVravoW25azn6KNkUQQlFwhJyujt2dtNCdduJfrqcFYAjlEiRMkfDHt7N63SKlweKUl
BHturzDK6A560Y2nDSUiMmAB1y9UNtqaZJ9SNe5sNxKMqZaqKtjRbk02RZu5V2vn9VMk6fm2aMVHbY9JhLvGypLcMUjtJ76H9ytg2zRlje
VPiU5v2s-UgZ7h0p2yth6ysUdhlONg6dBYu8_y_HtEI54invCj4CoK0qawqzMNe6rcmCQHvtCxtXsbkgyaEbcwmrm2m01-EMhekLFZeJLr
DtYOpYcEl4_nWFX1wtQDCnNNCmxnJZAoJvb3VMDYpDTsxjQv1PxODZuqWHs23YXWVywzgnLtHeRf2o4lUhGBw17mXsS07k7XAfdPMP_brO
PT9vrHtQiILor5VVTsjSPWg7edj__1rsnXhwPSu8gI48ZLRGrPQqFq0RmKO_QIE8N8s6NWzCK4yoX-9gDcheurOGpkprPIC9YPGMLK9tug
</Message></Error></Errors><RequestID>89b1215c-7814-40ae-a8db-41761f43f2b0</RequestID></Response>
```

이 오류를 해결하려면 다음 예제와 같이 IAM 정책에 `ec2:TerminateInstances` 작업을 추가해야 합니다.

# 스팟 플릿 사용
<a name="work-with-spot-fleets"></a>

스팟 플릿 사용을 시작하기 위해 선택적 온디맨드 부분인 스팟 인스턴스의 총 대상 용량을 포함하는 요청을 생성하고 AMI와 키 페어를 수동으로 지정하거나 플릿의 인스턴스에 대한 구성을 포함하는 시작 템플릿을 지정합니다. 추가 파라미터를 지정하거나 플릿에서 기본값을 사용하도록 할 수도 있습니다. 또한 플릿을 생성할 때 플릿 요청과 해당 인스턴스 및 볼륨에 태그를 지정할 수 있습니다.

플릿은 가용 용량이 있을 때 온디맨드 인스턴스를 시작하며, 최고 가격이 스팟 가격을 초과하고 가용 용량이 있을 때 스팟 인스턴스를 시작합니다.

플릿이 시작되면 플릿 요청, 플릿의 인스턴스, 모든 플릿 이벤트를 설명할 수 있습니다. 필요에 따라 추가 태그를 할당할 수도 있습니다.

총 대상 용량 등의 플릿 파라미터를 변경해야 하는 경우 용량을 유지하도록 구성된 플릿만 수정하면 됩니다. 일회성 요청이 제출된 후에는 해당 요청의 용량을 수정할 수 없습니다.

플릿 요청은 요청이 만료되거나 취소(삭제)될 때까지 활성 상태로 유지됩니다. 플릿 요청을 취소할 때 인스턴스를 종료하거나 실행 중인 상태로 둘 수 있습니다 실행 중인 상태로 둘 경우 온디맨드 인스턴스는 사용자가 종료할 때까지 실행되고 스팟 인스턴스는 중단되거나 사용자가 종료할 때까지 실행됩니다.

**Topics**
+ [스팟 플릿 요청 상태](spot-fleet-states.md)
+ [스팟 플릿 권한](spot-fleet-prerequisites.md)
+ [스팟 플릿 생성](create-spot-fleet.md)
+ [신규 또는 기존 스팟 플릿 요청과 이를 통해 시작되는 인스턴스 및 볼륨 태그 지정](tag-spot-fleet.md)
+ [스팟 플릿 요청, 해당 인스턴스, 이벤트 기록 설명](manage-spot-fleet.md)
+ [스팟 플릿 요청 수정](modify-spot-fleet.md)
+ [스팟 플릿 요청 취소(삭제)](cancel-spot-fleet.md)
+ [스팟 플릿의 자동 규모 조정 이해](spot-fleet-automatic-scaling.md)

# 스팟 플릿 요청 상태
<a name="spot-fleet-states"></a>

스팟 플릿 요청 상태는 다음 중 하나일 수 있으며, 각 상태는 요청 수명 주기 및 인스턴스 관리의 서로 다른 단계를 나타냅니다.

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

`submitted`  
스팟 플릿 요청을 평가 중이며 Amazon EC2에서 목표 개수의 인스턴스를 시작하기 위해 준비 중입니다. 요청이 스팟 플릿 할당량을 초과하면 해당 요청이 즉시 취소됩니다.

`active`  
스팟 플릿이 검증되었으며 Amazon EC2가 실행 중인 스팟 인스턴스의 목표 개수를 유지하려고 시도하고 있습니다. 그 요청은 수정 또는 취소될 때까지 계속 이 상태로 유지됩니다.

`modifying`  
스팟 집합 요청이 수정되고 있습니다. 그 요청은 수정이 완전히 처리될 때까지 또는 요청이 취소될 때까지 계속 이 상태로 유지됩니다. `maintain` 플릿 유형만 수정할 수 있습니다. 이 상태는 일회성 `request` 플릿 유형에 적용되지 않습니다.

`cancelled_running`  
스팟 플릿이 취소(삭제)되었고 추가 스팟 인스턴스가 시작되지 않습니다. 수동으로 중단되거나 종료될 때까지 기존 인스턴스가 계속 실행됩니다. 그 요청은 모든 인스턴스가 중단 또는 종료될 때까지 계속 이 상태로 유지됩니다.

`cancelled_terminating`  
스팟 플릿이 취소(삭제)되었고 해당 인스턴스를 종료하는 중입니다. 그 요청은 모든 인스턴스가 종료될 때까지 계속 이 상태로 유지됩니다.

`cancelled`  
스팟 플릿이 취소(삭제)되었고 실행 중인 인스턴스가 없습니다. 인스턴스가 종료되고 2일 후 요청이 삭제됩니다.

# 스팟 플릿 권한
<a name="spot-fleet-prerequisites"></a>

사용자가 스팟 플릿을 생성하거나 관리하는 경우 필요한 권한을 부여해야 합니다.

Amazon EC2 콘솔을 사용하여 스팟 플릿을 생성하는 경우 `AWSServiceRoleForEC2SpotFleet` 및 `AWSServiceRoleForEC2Spot`이라는 서비스 연결 역할 2개와 스팟 플릿에 사용자 대신 리소스를 요청, 시작, 종료 및 태깅할 수 있는 권한을 부여하는 `aws-ec2-spot-fleet-tagging-role`이라는 역할이 생성됩니다. AWS CLI 또는 API를 사용하는 경우 이러한 역할이 존재하는지 확인해야 합니다.

다음 지침에 따라 필요한 권한을 부여하고 역할을 생성합니다.

**Topics**
+ [스팟 플릿의 사용자에게 권한 부여](#spot-fleet-iam-users)
+ [스팟 플릿의 서비스 연결 역할](#service-linked-roles-spot-fleet-requests)
+ [스팟 인스턴스에 대한 서비스 연결 역할](#service-linked-roles-spot-instances)
+ [스팟 플릿 태깅을 위한 IAM 역할](#spot-fleet-service-linked-role)

## 스팟 플릿의 사용자에게 권한 부여
<a name="spot-fleet-iam-users"></a>

스팟 플릿을 생성하거나 관리하는 사용자에게 필요한 권한을 부여해야 합니다.

**스팟 플릿에 대한 정책 생성**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 **정책**을 선택한 후 **정책 생성**을 선택합니다.

1. **정책 생성** 페이지에서 **JSON**을 선택하고 텍스트를 다음과 같이 바꿉니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:RunInstances",
                   "ec2:CreateTags",
                   "ec2:RequestSpotFleet",
                   "ec2:ModifySpotFleetRequest",
                   "ec2:CancelSpotFleetRequests",
                   "ec2:DescribeSpotFleetRequests",
                   "ec2:DescribeSpotFleetInstances",
                   "ec2:DescribeSpotFleetRequestHistory"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::*:role/aws-ec2-spot-fleet-tagging-role"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "iam:CreateServiceLinkedRole",
                   "iam:ListRoles",
                   "iam:ListInstanceProfiles"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

   위의 예제 정책은 사용자에게 대부분의 스팟 플릿 사용 사례에 필요한 권한을 부여합니다. 사용자를 특정 API 작업으로 제한하려면 대신 해당 작업만 지정하세요.

   **필수 EC2 및 IAM API**

   다음 API가 정책에 포함되어야 합니다.
   + `ec2:RunInstances` - 스팟 플릿에서 인스턴스를 시작하는 데 필요합니다.
   + `ec2:CreateTags` - 스팟 플릿 요청, 인스턴스 또는 볼륨을 태깅하는 데 필요합니다.
   + `iam:PassRole` - 스팟 플릿 역할을 지정하는 데 필요합니다.
   + `iam:CreateServiceLinkedRole` - 서비스 연결 역할을 생성하는 데 필요합니다.
   + `iam:ListRoles` - 기존 IAM 역할을 열거하는 데 필요합니다.
   + `iam:ListInstanceProfiles` - 기존 인스턴스 프로파일을 열거하는 데 필요합니다.
**중요**  
시작 사양 또는 시작 템플릿에서 IAM 인스턴스 프로파일에 대한 역할을 지정하는 경우, 사용자에게 역할을 서비스에 전달할 수 있는 권한을 부여해야 합니다. 이를 위해 IAM 정책에 `"arn:aws:iam::*:role/IamInstanceProfile-role"` 작업을 위한 `iam:PassRole` 리소스를 포함하세요. 자세한 내용은 *IAM 사용 설명서*에서 [사용자에게 AWS 서비스 역할을 전달할 수 있는 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요.

   **스팟 플릿 API**

   필요에 따라 다음 스팟 플릿 API 작업을 정책에 추가합니다.
   + `ec2:RequestSpotFleet`
   + `ec2:ModifySpotFleetRequest`
   + `ec2:CancelSpotFleetRequests`
   + `ec2:DescribeSpotFleetRequests`
   + `ec2:DescribeSpotFleetInstances`
   + `ec2:DescribeSpotFleetRequestHistory`

   **선택적 IAM API**

   (선택 사항) 사용자가 IAM 콘솔을 사용하여 역할 또는 인스턴스 프로파일을 생성할 수 있도록 하려면 정책에 다음 작업을 추가해야 합니다.
   + `iam:AddRoleToInstanceProfile`
   + `iam:AttachRolePolicy`
   + `iam:CreateInstanceProfile`
   + `iam:CreateRole`
   + `iam:GetRole`
   + `iam:ListPolicies`

1. **정책 검토**를 선택합니다.

1. **정책 검토** 페이지에 정책 이름과 설명을 입력한 다음 **정책 생성**을 선택합니다.

1. 액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요.
   + AWS IAM Identity Center의 사용자 및 그룹:

     권한 세트를 생성합니다. *AWS IAM Identity Center 사용자 안내서*에서 [권한 세트 생성](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)의 지침을 따릅니다.
   + ID 제공업체를 통해 IAM에서 관리되는 사용자:

     ID 페더레이션을 위한 역할을 생성합니다. *IAM 사용자 설명서*의 [Create a role for a third-party identity provider (federation)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)의 지침을 따릅니다.
   + IAM 사용자:
     + 사용자가 맡을 수 있는 역할을 생성합니다. *IAM 사용자 설명서*에서 [Create a role for an IAM user](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)의 지침을 따릅니다.
     + (권장되지 않음) 정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. *IAM 사용 설명서*에서 [사용자(콘솔)에 권한 추가](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)의 지침을 따릅니다.

## 스팟 플릿의 서비스 연결 역할
<a name="service-linked-roles-spot-fleet-requests"></a>

Amazon EC2는 다른 AWS 서비스를 자동으로 호출하는 데 필요한 권한에 서비스 연결 역할을 사용합니다. 서비스 연결 역할은 AWS 서비스에 직접 연결된 고유한 유형의 IAM 역할입니다. 연결된 서비스만 서비스 연결 역할을 담당할 수 있으므로 서비스 연결 역할은 AWS 서비스로 권한을 위임하는 안전한 방법을 제공합니다. 자세한 내용은 IAM 사용 설명서**의 [서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html)을 참조하세요.

Amazon EC2는 **AWSServiceRoleForEC2SpotFleet**이라는 이름의 서비스 연결 역할을 사용하여 사용자 대신 인스턴스를 시작하고 관리합니다.

**중요**  
스팟 플릿에서 [암호화된 AMI](AMIEncryption.md) 또는 암호화된 Amazon EBS 스냅샷을 지정하는 경우 Amazon EC2에서 자동으로 인스턴스를 시작하려면 CMK를 사용할 권한을 **AWSServiceRoleForEC2SpotFleet** 역할에 부여해야 합니다. 자세한 내용은 [암호화된 AMI 및 EBS 스냅샷에 사용할 CMK에 대한 액세스 권한 부여](#spot-fleet-service-linked-roles-access-to-cmks) 섹션을 참조하세요.

### AWSServiceRoleForEC2SpotFleet에서 부여된 권한
<a name="service-linked-role-permissions-granted-by-AWSServiceRoleForEC2SpotFleet"></a>

**AWSServiceRoleForEC2SpotFleet** 역할은 스팟 플릿에 사용자 대신 인스턴스를 요청, 시작 및 종료하고 태그를 지정할 수 있는 권한을 부여합니다. Amazon EC2는 이 서비스 연결 역할을 사용하여 다음 작업을 완료합니다.
+ `ec2:RequestSpotInstances` - 스팟 인스턴스 요청
+ `ec2:RunInstances` - 인스턴스 시작
+ `ec2:TerminateInstances` - 인스턴스 종료
+ `ec2:DescribeImages` - 인스턴스에 대한 Amazon Machine Image(AMI) 설명
+ `ec2:DescribeInstanceStatus` - 인스턴스 상태 설명
+ `ec2:DescribeSubnets` - 인스턴스의 서브넷 설명
+ `ec2:CreateTags` - 스팟 플릿 요청, 인스턴스 및 볼륨에 태그 추가
+ `elasticloadbalancing:RegisterInstancesWithLoadBalancer` - 지정된 로드 밸런서에 지정된 인스턴스 추가
+ `elasticloadbalancing:RegisterTargets` - 지정된 대상 그룹에 지정된 대상 등록

### 서비스 연결 역할 생성
<a name="service-linked-role-creating-for-spot-fleet"></a>

대부분의 상황에서는 서비스 연결 역할을 수동으로 생성할 필요가 없습니다. 사용자가 콘솔을 사용하여 처음으로 스팟 플릿을 생성하면 Amazon EC2가 **AWSServiceRoleForEC2SpotFleet** 서비스 연결 역할을 생성합니다.

Amazon EC2가 이 서비스 연결 역할을 지원하기 시작한 2017년 10월 이전에 활성 스팟 플릿 요청을 보유한 경우 Amazon EC2에는 사용자의 AWS 계정에 **AWSServiceRoleForEC2SpotFleet** 역할이 이미 생성되어 있습니다. 자세한 내용은 *IAM 사용 설명서*에서 [내 AWS 계정에 표시되는 새 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)을 참조하세요.

AWS CLI 또는 API를 사용하여 스팟 플릿을 생성하는 경우 먼저 이 역할이 있는지 확인해야 합니다.

**콘솔을 사용하여 스팟 플릿에 대한 AWSServiceRoleForEC2SpotFleet 역할을 생성하려면 다음을 수행하세요.**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 **역할**을 선택합니다.

1. **역할 생성(Create role)**을 선택합니다.

1. **신뢰할 수 있는 엔터티 선택** 페이지에서 다음을 수행합니다.

   1. **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다.

   1. **사용 사례**에서 **서비스 또는 사용 사례**로 **EC2**를 선택합니다.

   1. **사용 사례**에서 **EC2 - 스팟 플릿**을 선택합니다.
**참고**  
**EC2 - 스팟 플릿** 사용 사례는 필요한 IAM 권한으로 정책을 자동으로 생성하고 **AWSEC2SpotFleetServiceRolePolicy**를 역할 이름으로 제안합니다.

   1. **다음**을 선택합니다.

1. **권한 추가** 페이지에서 **다음**을 선택합니다.

1. **이름 지정, 검토 및 생성** 페이지에서 **역할 생성**을 선택합니다.

**AWS CLI를 사용하여 스팟 플릿에 대한 AWSServiceRoleForEC2SpotFleet 역할을 생성하려면 다음을 수행하세요.**  
다음과 같이 [create-service-linked-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-service-linked-role.html) 명령을 사용합니다.

```
aws iam create-service-linked-role --aws-service-name spotfleet.amazonaws.com
```

스팟 플릿이 더 이상 필요 없으면 **AWSServiceRoleForEC2SpotFleet** 역할을 삭제하는 것이 좋습니다. 계정에서 이 역할이 삭제된 후 콘솔을 사용하여 스팟 플릿을 요청하면 Amazon EC2가 다시 해당 역할을 생성합니다. 자세한 내용은 *IAM 사용 설명서*의 [서비스 연결 역할 삭제](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html#id_roles_manage_delete_slr)를 참조하세요.

### 암호화된 AMI 및 EBS 스냅샷에 사용할 CMK에 대한 액세스 권한 부여
<a name="spot-fleet-service-linked-roles-access-to-cmks"></a>

스팟 플릿 요청에서 [암호화된 AMI](AMIEncryption.md) 또는 암호화된 Amazon EBS 스냅샷을 지정하고 암호화에 고객 관리형 키를 사용하는 경우 Amazon EC2에서 자동으로 인스턴스를 시작하려면 CMK를 사용할 권한을 **AWSServiceRoleForEC2SpotFleet** 역할에 부여해야 합니다. 이렇게 하려면 다음 절차에 표시된 바와 같이 CMK에 권한을 추가해야 합니다.

권한을 제공할 때 권한 부여는 키 정책을 대체합니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [권한 부여 사용](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) 및 [AWS KMS의 키 정책 사용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)을 참조하세요.

**CMK를 사용할 수 있도록 AWSServiceRoleForEC2SpotFleet 역할 권한을 부여하려면**
+ [create-grant](https://docs.aws.amazon.com/cli/latest/reference/kms/create-grant.html) 명령을 사용하여 CMK에 권한을 추가하고 허용된 작업을 수행할 수 있는 권한이 부여된 보안 주체(**AWSServiceRoleForEC2SpotFleet** 서비스 연결 역할)를 지정합니다. CMK는 CMK의 `key-id` 파라미터 및 ARN에 의해 지정됩니다. 보안 주체는 **AWSServiceRoleForEC2SpotFleet** 서비스 연결 역할의 `grantee-principal` 파라미터 및 ARN에 의해 지정됩니다.

  ```
  aws kms create-grant \
      --region us-east-1 \
      --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \
      --grantee-principal arn:aws:iam::111122223333:role/aws-service-role/spotfleet.amazonaws.com/AWSServiceRoleForEC2SpotFleet \
      --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"
  ```

## 스팟 인스턴스에 대한 서비스 연결 역할
<a name="service-linked-roles-spot-instances"></a>

Amazon EC2는 **AWSServiceRoleForEC2Spot**이라는 이름의 서비스 연결 역할을 사용하여 사용자 대신 스팟 인스턴스를 시작하고 관리합니다. 자세한 내용은 [스팟 인스턴스 요청에 대한 서비스 연결 역할](service-linked-roles-spot-instance-requests.md) 섹션을 참조하세요.

## 스팟 플릿 태깅을 위한 IAM 역할
<a name="spot-fleet-service-linked-role"></a>

`aws-ec2-spot-fleet-tagging-role` IAM 역할은 스팟 플릿 요청, 인스턴스 및 볼륨에 태깅할 수 있는 권한을 스팟 플릿에 부여합니다. 자세한 내용은 [신규 또는 기존 스팟 플릿 요청과 이를 통해 시작되는 인스턴스 및 볼륨 태그 지정](tag-spot-fleet.md) 섹션을 참조하세요.

**중요**  
플릿의 인스턴스를 태깅하고 목표 용량을 유지하기로 선택하면(스팟 플릿 요청은 `maintain` 유형) 사용자 설정 권한 차이로 인해 `IamFleetRole`은 플릿에서 인스턴스의 태그 지정 동작이 일치하지 않을 수 있습니다. `IamFleetRole`에 `CreateTags` 권한이 없으면 플릿에서 시작한 일부 인스턴스에 태그가 지정되지 않을 수 있습니다. 이러한 불일치를 수정하는 동안 플릿에서 시작한 모든 인스턴스에 태그가 지정되도록 하려면 `aws-ec2-spot-fleet-tagging-role`에 `IamFleetRole` 역할을 사용하는 것이 좋습니다. 또는 기존 역할을 사용하려면 `AmazonEC2SpotFleetTaggingRole` AWS 관리형 정책을 기존 역할에 연결합니다. 그렇게 하지 않으면 기존 정책에 `CreateTags` 권한을 수동으로 추가해야 합니다.

**스팟 플릿 태깅을 위한 IAM 역할을 생성하려면**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 **역할**을 선택합니다.

1. **역할 생성(Create role)**을 선택합니다.

1. **신뢰할 수 있는 엔터티 선택** 페이지의 **신뢰할 수 있는 엔터티 유형(Trusted entity type)** 아래에서 ** 서비스(AWS service)**를 선택합니다.

1. **사용 사례(Use case)**의 **기타 AWS 서비스 사용 사례(Use cases for other services)**에서 **EC2**를 선택한 다음 **EC2 - 스팟 플릿 태깅(EC2 - Spot Fleet Tagging)**을 선택합니다.

1. **다음**을 선택합니다.

1. **권한 추가** 페이지에서 **다음**을 선택합니다.

1. **이름, 검토 및 생성** 페이지에서 **역할 이름(Role name)**에서 역할 이름을 입력합니다(예: **aws-ec2-spot-fleet-tagging-role**).

1. 페이지에서 정보를 검토한 다음 **역할 생성(Create role)**을 선택합니다.

### 교차 서비스 혼동된 대리인 방지
<a name="cross-service-confused-deputy-prevention"></a>

[혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)는 작업을 수행할 권한이 없는 엔터티가 권한이 더 많은 엔터티에 작업을 수행하도록 강요할 수 있는 보안 문제입니다. 스팟 플릿이 리소스에 다른 서비스를 제공하는 권한을 제한하려면 `aws-ec2-spot-fleet-tagging-role` 신뢰 정책에서 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 및 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 글로벌 조건 컨텍스트 키를 사용하는 것이 좋습니다.

**aws:SourceArn 및 aws:SourceAccount 조건 키 `aws-ec2-spot-fleet-tagging-role` 신뢰 정책 추가**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 **역할**을 선택합니다.

1. 이전에 생성한 `aws-ec2-spot-fleet-tagging-role`을 찾아 링크(확인란 아님)를 선택합니다.

1. **요약(Summary)**에서 **신뢰 관계(Trust relationships)** 탭을 선택한 후 **신뢰 정책 편집(Edit trust policy)**을 선택합니다.

1. JSON 문에 [혼동된 대리자 문제(confused deputy problem)](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)를 방지하는 `aws:SourceAccount` 및 `aws:SourceArn` 전역 조건 컨텍스트 키 등의 `Condition` 요소를 추가합니다.

   ```
   "Condition": {
         "ArnLike": {
           "aws:SourceArn": "arn:aws:ec2:us-east-1:111122223333:spot-fleet-request/sfr-*"
         },
         "StringEquals": {
           "aws:SourceAccount": "111122223333"
         }
   ```
**참고**  
`aws:SourceArn` 값에 계정 ID가 포함되고 두 전역 조건 컨텍스트 키를 사용하는 경우, `aws:SourceAccount` 값 및 `aws:SourceArn` 값의 계정은 동일한 정책 문에서 사용될 경우 반드시 같은 계정 ID를 사용해야 합니다.

   최종 신뢰 정책은 다음과 같습니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": {
       "Sid": "ConfusedDeputyPreventionExamplePolicy",
       "Effect": "Allow",
       "Principal": {
         "Service": "spotfleet.amazonaws.com"
       },
       "Action": "sts:AssumeRole",
       "Condition": {
         "ArnLike": {
           "aws:SourceArn": "arn:aws:ec2:us-east-1:111122223333:spot-fleet-request/sfr-*"
         },
         "StringEquals": {
           "aws:SourceAccount": "111122223333"
         }
       }
     }
   }
   ```

------

1. **정책 업데이트(Update policy)**를 선택합니다.

다음 표에는 다양한 정도의 특정성을 가진 `aws-ec2-spot-fleet-tagging-role` 범위를 제한하기 위해 `aws:SourceArn`에 대한 잠재적 값을 제공합니다.


****  

| API 작업 | 호출된 서비스 | 범위 | `aws:SourceArn` | 
| --- | --- | --- | --- | 
| RequestSpotFleet | AWS STS (AssumeRole) | 지정된 계정에서 스팟 플릿 요청에 대해 aws-ec2-spot-fleet-tagging-role로 AssumeRole 기능을 제한합니다. | arn:aws:ec2:\$1:123456789012:spot-fleet-request/sfr-\$1 | 
| RequestSpotFleet | AWS STS (AssumeRole) | 지정된 계정 및 지정된 리전에서 스팟 플릿 요청에 대해 aws-ec2-spot-fleet-tagging-role로 AssumeRole 기능을 제한합니다. 이 역할은 다른 리전에서는 사용할 수 없습니다. | arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-\$1 | 
| RequestSpotFleet | AWS STS (AssumeRole) | 플릿 sfr-11111111-1111-1111-1111-111111111111에 영향을 미치는 작업에 대해서만 aws-ec2-spot-fleet-tagging-role로 AssumeRole 기능을 제한합니다. 이 역할은 다른 스팟 플릿에서는 사용하지 못할 수 있습니다. 또한 이 역할은 요청 스팟 플릿을 통해 새로운 스팟 플릿을 시작하는 데 사용할 수 없습니다. | arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-11111111-1111-1111-1111-111111111111 | 

# 스팟 플릿 생성
<a name="create-spot-fleet"></a>

AWS Management Console을 사용하여 AMI와 원하는 총 대상 용량만 선택하면 스팟 플릿 요청을 빠르게 생성할 수 있습니다. Amazon EC2는 스팟 모범 사례를 따르며 요구 사항을 가장 잘 충족하는 플릿을 구성합니다. 또는 어떠한 기본 설정이든 수정할 수 있습니다.

플릿에 온디맨드 인스턴스를 포함하려면 요청에서 시작 템플릿을 지정하고 원하는 온디맨드 용량을 지정해야 합니다.

플릿은 가용 용량이 있을 때 온디맨드 인스턴스를 시작하고, 최고 가격이 스팟 가격을 초과하고 가용 용량이 있을 때 스팟 인스턴스를 시작합니다.

플릿에 스팟 인스턴스가 포함되어 있고 유형이 `maintain`인 경우 Amazon EC2에서 스팟 인스턴스가 중단되어도 플릿 목표 용량을 유지하려고 합니다.

**필수 권한**  
자세한 내용은 [스팟 플릿 권한](spot-fleet-prerequisites.md) 섹션을 참조하세요.

**Topics**
+ [스팟 플릿 요청을 빠르게 생성](#create-spot-fleet-quick)
+ [정의된 파라미터를 사용하여 스팟 플릿 요청 생성](#create-spot-fleet-advanced)
+ [비정상 스팟 인스턴스를 교체하는 스팟 플릿 생성](#spot-fleet-health-checks)

## 스팟 플릿 요청을 빠르게 생성
<a name="create-spot-fleet-quick"></a>

다음과 같은 단계에 따라 Amazon EC2 콘솔을 사용하여 빠르게 스팟 플릿 요청을 생성합니다.

**권장되는 설정을 사용하여 스팟 플릿 요청을 생성하는 방법**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟을 처음 사용하는 경우 시작 페이지가 표시되면 **시작하기**를 선택합니다. 그렇지 않으면 **스팟 플릿 요청 생성**을 선택합니다.

1. **시작 파라미터(Launch parameters)** 아래에서 **시작 파라미터 수동 구성(Manually configure launch parameters)**을 선택합니다.

1. **AMI**에서 AMI를 선택합니다.

1. **목표 용량(Target capacity)**의 **총 목표 용량(Total target capacity)**에 요청할 단위 수를 지정합니다. 단위 유형에서 **인스턴스**, **vCPU** 또는 **메모리(GiB)**를 선택할 수 있습니다.

1. **플릿 요청 살펴보기**에서 플릿 구성을 검토하고 **시작**을 선택합니다.

## 정의된 파라미터를 사용하여 스팟 플릿 요청 생성
<a name="create-spot-fleet-advanced"></a>

정의한 파라미터를 사용하여 스팟 플릿을 생성할 수 있습니다.

------
#### [ Console ]

**정의된 파라미터를 사용하여 스팟 플릿 요청을 생성하는 방법**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟을 처음 사용하는 경우 시작 페이지가 표시되면 **시작하기**를 선택합니다. 그렇지 않으면 **스팟 플릿 요청 생성**을 선택합니다.

1. **시작 파라미터**의 경우 다음과 같이 시작 파라미터를 수동으로 구성하거나 시작 템플릿을 사용할 수 있습니다.

   1. [수동 구성] Amazon EC2 콘솔에서 시작 파라미터를 정의하려면 **시작 파라미터 수동 구성**을 선택하고 다음을 수행합니다.

      1. **AMI**의 경우 AWS가 제공하는 기본 AMI 중 하나를 선택하거나 **AMI 검색(Search for AMI)**을 선택하여 사용자 커뮤니티, AWS Marketplace 또는 자체 AMI를 사용합니다.
**참고**  
시작 파라미터에 지정된 AMI가 등록 취소되거나 비활성화된 경우 AMI에서 새 인스턴스를 시작할 수 없습니다. 목표 용량을 유지하도록 설정된 플릿의 경우 목표 용량이 유지되지 않습니다.

      1. (선택 사항) **키 페어 이름**에서 기존 키 페어를 선택하거나 새로 생성합니다.

         [기존 키 페어] 키 페어를 선택합니다.

         [새 키 페어] **새 키 페어 생성**을 선택하여 **키 페어** 페이지로 이동합니다. 마친 후에 **스팟 요청(Spot Requests)** 페이지로 돌아가고 목록을 새로 고칩니다.

      1. (선택 사항) **추가 시작 파라미터(Additional launch parameters)**를 확장하고 다음을 수행합니다.

         1. (선택 사항) Amazon EBS 최적화를 사용하려면 **EBS 최적화(EBS-optimized)**에서 **EBS 최적 인스턴스 시작(Launch EBS-optimized instances)**을 선택합니다.

         1. (선택 사항) 인스턴스에 대해 임시 블록 스토리지를 추가하려면 **인스턴스 저장소**에 대해 **시작 시 연결**을 선택합니다.

         1. (선택 사항) 스토리지를 추가하려면 **새로운 볼륨 추가(Add new volume)**를 선택하고 인스턴스 유형에 따라 추가 인스턴스 저장소 볼륨이나 Amazon EBS 볼륨을 지정합니다.

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

         1. (선택 사항) 전용 스팟 인스턴스를 실행하려면 **테넌시(Tenancy)**에서 **전용 - 전용 인스턴스 실행(Dedicated - run a dedicated instance)**을 선택합니다.

         1. (선택 사항) **보안 그룹**에 대해 하나 이상의 보안 그룹을 선택하거나 보안 그룹을 생성합니다.

            [기존 보안 그룹] 하나 이상의 보안 그룹을 선택합니다.

            [새 보안 그룹] **새 보안 그룹 생성(Create new security group)**을 선택하여 **보안 그룹(Security Groups)** 페이지로 이동합니다. 마친 후에 **스팟 요청(Spot Requests)** 페이지로 돌아가고 목록을 새로 고칩니다.

         1. (선택 사항) 인터넷에서 인스턴스에 연결할 수 있도록 하려면 **IPv4 퍼블릭 IP 자동 할당**에 대해 **활성화**를 선택합니다.

         1. (선택 사항) IAM 역할로 스팟 인스턴스를 시작하려면 **IAM 인스턴스 프로파일**에서 역할을 선택합니다.

         1. (선택 사항) 시작 스크립트를 실행하려면 해당 스크립트를 **사용자 데이터**에 복사합니다.

         1. (선택 사항) 태그를 추가하려면 **태그 생성(Create tag)**을 선택하고 해당 태그에 대한 키와 값을 입력한 다음 **생성(Create)**을 선택합니다. 각 태그에 대해 반복합니다.

            각 태그에서 인스턴스와 스팟 플릿 요청에 같은 태그를 사용하여 태깅하려면 **인스턴스(Instance)**와 **플릿(Fleet)**이 모두 선택되어 있는지 확인합니다. 플릿에서 시작한 인스턴스만 태깅하려면 **플릿(Fleet)**을 선택 취소합니다. 스팟 플릿 요청만 태깅하려면 **인스턴스(Instance)** 선택을 취소합니다.

   1. [시작 템플릿] 시작 템플릿에서 생성한 구성을 사용하려면 **시작 템플릿 사용**을 선택하고, **시작 템플릿**에서 시작 템플릿을 선택합니다.
**참고**  
스팟 플릿에서 온디맨드 용량을 사용하려면 시작 템플릿을 지정해야 합니다.

1. (선택 사항) **추가 요청 세부 정보(Additional request details)**에서 다음을 수행합니다.

   1. 추가 요청 세부 정보를 검토합니다. 변경하려면 **기본값 적용(Apply defaults)**의 선택을 취소합니다.

   1. (선택 사항) **IAM 플릿 역할(IAM fleet role)**에서 기본 역할을 사용하거나 다른 역할을 선택할 수 있습니다. 역할을 변경한 후 기본 역할을 사용하려면 **기본 역할 사용**을 선택합니다.

   1. (선택 사항) 특정 기간 동안만 유효한 요청을 생성하려면 **요청 유효 시작 시간** 및 **요청 유효 종료 시간(Request valid until)**을 편집합니다.

   1. (선택 사항) 기본적으로 스팟 플릿 요청이 만료되면 Amazon EC2에서 스팟 인스턴스를 종료합니다. 요청 만료 후에도 계속 실행하려면 **요청 만료 시 인스턴스 종료(Terminate the instances when the request expires)**를 선택 취소합니다.

   1. (선택 사항) 로드 밸런서에 스팟 인스턴스를 등록하려면 **하나 이상의 로드 밸런서에서 트래픽 수신**을 선택하고 하나 이상의 Classic Load Balancer나 대상 그룹을 선택합니다.

1. **목표 용량(Target capacity)**에서 다음을 수행합니다.

   1. **총 목표 용량(Total target capacity)**에서 요청할 단위 수를 지정합니다. 단위 유형에서 **인스턴스(Instances)**, **vCPUs** 또는 **메모리(MiB)(Memory (MiB))**를 선택할 수 있습니다. 나중에 용량을 추가할 수 있도록 목표 용량을 0으로 지정하려면 **목표 용량 유지**를 선택해야 합니다.

   1. (선택 사항) **온디맨드 기반 용량 포함(Include On-Demand base capacity)**에서 요청할 온디맨드 단위 수를 지정합니다. 이 수는 [**총 목표 용량(Total target capacity)**]보다 작아야 합니다. Amazon EC2는 차이를 계산하고 스팟 단위에 요청할 차이를 할당합니다.
**중요**  
 선택적 온디맨드 용량을 지정하려면 먼저 시작 템플릿을 선택해야 합니다.

   1. (선택 사항) 기본적으로 Amazon EC2는 스팟 인스턴스가 중단되면 스팟 인스턴스를 종료합니다. 목표 용량을 유지하려면 **목표 용량 유지(Maintain target capacity)**를 선택합니다. 그런 다음, 스팟 인스턴스가 중단되면 Amazon EC2는 해당 스팟 인스턴스를 종료하거나 중지하거나 최대 절전 모드로 전환합니다. 이를 위해 **인터럽트 방식**에서 해당 옵션을 선택합니다.
**참고**  
시작 파라미터에 지정된 AMI가 등록 취소되거나 비활성화된 경우 AMI에서 새 인스턴스를 시작할 수 없습니다. 이 경우 목표 용량을 유지하도록 설정된 플릿의 목표 용량이 유지되지 않습니다.

   1. (선택 사항) 플릿의 기존 스팟 인스턴스에 대해 인스턴스 재분배 알림이 생성될 때 스팟 플릿에서 대체 스팟 인스턴스를 시작할 수 있도록 하려면 **용량 재분배(Capacity rebalance)**를 선택한 다음 인스턴스 대체 전략을 선택합니다. **종료 전 시작**을 선택하는 경우 Amazon EC2에서 이전 인스턴스를 종료하기 전의 지연 시간(초)을 지정합니다. 자세한 내용은 [EC2 플릿 및 스팟 플릿의 용량 리밸런싱을 사용하여 위험이 있는 스팟 인스턴스 교체](ec2-fleet-capacity-rebalance.md) 섹션을 참조하세요.

   1. (선택 사항) 플릿의 모든 스팟 인스턴스에 대해 시간당 지불하는 금액을 관리하려면 **스팟 인스턴스의 최대 비용 설정(Set maximum cost for Spot Instances)**을 선택한 다음 시간당 지불할 최대 총 금액을 입력합니다. 최대 총 금액에 도달하면 스팟 플릿은 목표 용량을 충족하지 않은 경우에도 스팟 인스턴스 시작을 중지합니다. 자세한 내용은 [EC2 플릿 또는 스팟 플릿에 지출 한도 설정](ec2-fleet-control-spending.md) 섹션을 참조하세요.

1. **네트워크(Network)**에서 다음을 수행합니다.

   1. **네트워크**에서 기존 VPC를 선택하거나 새로 생성합니다.

      [기존 VPC] VPC를 선택합니다.

      [새 VPC] Amazon VPC 콘솔로 이동하려면 **새 VPC 생성**을 선택합니다. 완료되면 이 화면으로 돌아와 목록을 새로 고칩니다.

   1. (선택 사항) **가용 영역**의 경우 Amazon EC2에서 스팟 인스턴스에 대한 가용 영역을 자동으로 선택하도록 하거나 가용 영역을 하나 이상 지정합니다.

      가용 영역에 두 개 이상의 서브넷이 있는 경우 **서브넷**에서 알맞은 서브넷을 선택합니다. 서브넷을 추가하려면 **새 서브넷 생성**을 선택하여 Amazon VPC 콘솔로 이동합니다. 완료되면 이 화면으로 돌아와 목록을 새로 고칩니다.

1. **인스턴스 유형 요구 사항(Instance type requirements)**에서 인스턴스 속성을 지정하고 Amazon EC2가 해당 속성으로 인스턴스 유형을 식별하도록 하거나 인스턴스 목록을 지정할 수 있습니다. 자세한 내용은 [EC2 플릿 또는 스팟 플릿의 인스턴스 유형 선택에 대한 속성 지정](ec2-fleet-attribute-based-instance-type-selection.md) 섹션을 참조하세요.

   1. **컴퓨팅 요구 사항에 맞는 인스턴스 속성 지정(Specify instance attributes that match your compute requirements)**을 선택하는 경우 다음과 같이 인스턴스 속성을 지정합니다.

      1. **vCPU(vCPUs)**에 원하는 최소 및 최대 vCPU 수를 입력합니다. 무한을 지정하려면 **최소 없음**, **최대 없음** 또는 두 가지 모두를 선택합니다.

      1. **메모리(GiB)(Memory (GiB))**에 원하는 최소 및 최대 메모리 양을 입력합니다. 무한을 지정하려면 **최소 없음**, **최대 없음** 또는 두 가지 모두를 선택합니다.

      1. (선택 사항) **추가 인스턴스 속성**에서 필요에 따라 하나 이상의 속성을 지정하여 컴퓨팅 요구 사항을 더 자세히 표현할 수 있습니다. 각 추가 속성은 요청에 추가 제약 조건을 추가합니다. 추가 속성을 생략할 수 있으며 생략 시 기본값이 사용됩니다. 각 속성과 기본값에 대한 설명은 [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html)를 참조하세요.

      1. (선택 사항) 지정한 속성을 가진 인스턴스 유형을 보려면 **일치하는 인스턴스 유형 미리 보기(Preview matching instance types)**를 확장합니다. 요청에 사용되는 인스턴스 유형을 제외하려면 인스턴스를 선택한 다음 **선택한 인스턴스 유형 제외(Exclude selected instance types)**를 선택합니다.

   1. **수동으로 인스턴스 유형 선택(Manually select instance types)**을 선택하는 경우 스팟 플릿은 기본 인스턴스 유형 목록을 제공합니다. 인스턴스 유형을 더 많이 선택하려면 **인스턴스 유형 추가(Add instance types)**를 선택하고 요청에 사용할 인스턴스 유형을 선택한 다음 **선택(Select)**을 선택합니다. 인스턴스 유형을 삭제하려면 인스턴스 유형을 선택하고 **삭제(Delete)**를 선택합니다.

1. **할당 전략**의 경우 필요에 맞는 스팟 할당 전략과 온디맨드 할당 전략을 선택합니다. 자세한 내용은 [할당 전략을 사용하여 EC2 플릿 또는 스팟 플릿이 스팟 및 온디맨드 용량을 충족하는 방법 결정](ec2-fleet-allocation-strategy.md) 섹션을 참조하세요.

1. **플릿 요청 한눈에 보기(Your fleet request at a glance)**에서 플릿 구성을 검토하고 필요한 경우 조정합니다.

1. (선택 사항) AWS CLI용 시작 구성의 복사본을 다운로드하려면 **JSON 구성**을 선택합니다.

1. 스팟 플릿을 시작할 준비가 되면 **시작**을 선택합니다.

   스팟 플릿 요청 유형은 `fleet`입니다. 요청이 이행되면 `instance` 유형의 요청이 추가되며, 그 상태는 `active`이고 상황은 `fulfilled`입니다.

------
#### [ AWS CLI ]

**스팟 플릿 요청을 생성하는 방법**  
[request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 명령을 사용합니다.

```
aws ec2 request-spot-fleet --spot-fleet-request-config file://config.json
```

구성 파일에 대한 예시는 [예제 CLI 구성 스팟 플릿](spot-fleet-examples.md) 섹션을 참조하세요.

------
#### [ PowerShell ]

**스팟 플릿 요청을 생성하는 방법**  
[Request-EC2SpotFleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Request-EC2SpotFleet.html) cmdlet을 사용합니다. 다음 예제는 용량 최적화 플릿에서 스팟 인스턴스를 시작합니다.

```
Request-EC2SpotFleet `
    -SpotFleetRequestConfig_TargetCapacity 50 `
    -SpotFleetRequestConfig_AllocationStrategy "CapacityOptimized" `
    -SpotFleetRequestConfig_IamFleetRole "arn:aws:iam::123456789012:role/my-spot-fleet-role" `
    -SpotFleetRequestConfig_LaunchTemplateConfig @($launchConfig)
```

다음과 같이 시작 구성을 정의하여 시작 템플릿을 설정하고 필요한 속성을 재정의합니다. 구성에 대한 예시는 [예제 CLI 구성 스팟 플릿](spot-fleet-examples.md) 섹션을 참조하세요.

```
$lcSpec = Amazon.EC2.Model.FleetLaunchTemplateSpecification
# To do - Set FleetLaunchTemplateSpecification properties
$lcOverrides = New-Object Amazon.EC2.Model.LaunchTemplateOverrides
# To do - Set LaunchTemplateOverrides properties
$launchConfig = New-Object Amazon.EC2.Model.LaunchTemplateConfig
$launchConfig.LaunchTemplateSpecification $lcSpec
$launchConfig.Overrides @($lcOverrides)
```

------

## 비정상 스팟 인스턴스를 교체하는 스팟 플릿 생성
<a name="spot-fleet-health-checks"></a>

스팟 플릿은 2분마다 플릿의 스팟 인스턴스 상태를 확인합니다. 인스턴스의 상태는 `healthy` 또는 `unhealthy`입니다.

스팟 플릿은 Amazon EC2에서 제공하는 상태 확인을 사용하여 인스턴스의 상태를 판단합니다. 세 번의 연속 상태 확인에서 인스턴스 상태 또는 시스템 상태가 `unhealthy`인 경우, 해당 인스턴스의 상태는 `impaired`로 확인됩니다. 자세한 내용은 [Amazon EC2 인스턴스 상태 확인](monitoring-system-instance-status-check.md) 섹션을 참조하세요.

플릿을 구성하여 비정상 스팟 인스턴스를 교체할 수 있습니다. 상태 확인 교체를 사용하도록 설정한 이후 스팟 인스턴스는 `unhealthy`로 보고될 때 교체됩니다. 플릿은 비정상 스팟 인스턴스가 교체되는 동안 최대 몇 분간 목표 용량을 밑돌 수 있습니다.

**요구 사항**
+ 상태 확인 대체는 목표 용량을 유지하는 스팟 플릿(`maintain` 유형 플릿)에만 지원되며 일회성 스팟 플릿(`request` 유형 플릿)에는 지원되지 않습니다.
+ 상태 확인 교체는 스팟 인스턴스에 대해서만 지원됩니다. 이 기능은 온디맨드 인스턴스에 대해 지원되지 않습니다.
+ 비정상 인스턴스를 생성할 경우에만 이를 교체하도록 스팟 플릿을 구성할 수 있습니다.
+ 사용자는 `ec2:DescribeInstanceStatus` 작업을 호출할 권한이 있는 경우에만 상태 확인 대체를 사용할 수 있습니다.

------
#### [ Console ]

**비정상 스팟 인스턴스를 교체하도록 스팟 플릿을 구성하는 방법**

1. [정의된 파라미터를 사용하여 스팟 플릿 요청 생성](#create-spot-fleet-advanced)의 스팟 플릿 생성 단계를 따릅니다.

1. 비정상 스팟 인스턴스를 교체하도록 플릿을 구성하려면 **추가 시작 파라미터**를 확장하고 **상태 확인**에서 **비정상 인스턴스 교체**를 선택합니다. 이 옵션을 활성화하려면 먼저 **대상 용량 유지**를 선택해야 합니다.

------
#### [ AWS CLI ]

**비정상 스팟 인스턴스를 교체하도록 스팟 플릿을 구성하는 방법**  
`ReplaceUnhealthyInstances` 속성이 `SpotFleetRequestConfig`인 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) 명령을 사용합니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "lowestPrice",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "TargetCapacity": 10,
        "ReplaceUnhealthyInstances": true
    }
}
```

------
#### [ PowerShell ]

**비정상 스팟 인스턴스를 교체하도록 스팟 플릿 요청을 구성하는 방법**  
[Request-EC2SpotFleet](https://docs.aws.amazon.com/powershell/latest/reference/items/Request-EC2SpotFleet.html) cmdlet을 `-SpotFleetRequestConfig_ReplaceUnhealthyInstance` 파라미터와 함께 사용합니다.

```
-SpotFleetRequestConfig_ReplaceUnhealthyInstance $true
```

------

# 신규 또는 기존 스팟 플릿 요청과 이를 통해 시작되는 인스턴스 및 볼륨 태그 지정
<a name="tag-spot-fleet"></a>

스팟 플릿 요청과 이를 통해 시작되는 인스턴스와 볼륨을 분류 및 관리하는 데 도움이 되도록 사용자 지정 메타데이터로 이 요청에 태그를 지정할 수 있습니다. 스팟 플릿 요청을 생성할 때 또는 생성한 후 요청을 태깅할 수 있습니다. 마찬가지로 플릿에서 인스턴스와 볼륨이 시작될 때 또는 그 이후에 인스턴스와 볼륨에 태그를 할당할 수 있습니다.

플릿 요청에 태그를 지정할 때 플릿에서 시작한 인스턴스 및 볼륨에는 태그가 자동으로 지정되지 않습니다. 플릿에서 시작한 인스턴스 및 볼륨에 명시적으로 태그를 지정해야 합니다. 플릿 요청에만, 플릿에서 시작한 인스턴스에만, 플릿에서 시작한 인스턴스에 연결된 볼륨에만, 또는 모두에 태그를 할당하도록 선택할 수 있습니다.

**참고**  
온디맨드 인스턴스에 연결된 볼륨에만 태그를 지정할 수 있습니다. 스팟 인스턴스에 연결된 볼륨에는 태그를 지정할 수 없습니다.

Amazon EC2 콘솔이나 명령줄 도구를 사용하여 태그를 지정할 수 있습니다.

태그 작동 방식에 대한 자세한 내용은 [Amazon EC2 리소스 태깅](Using_Tags.md) 섹션을 참조하세요.

**Topics**
+ [사전 조건](#tag-spot-fleet-prereqs)
+ [새 스팟 플릿과 해당 플릿에서 시작되는 인스턴스 및 볼륨 태깅](#tag-new-spot-fleet-and-resources)
+ [기존 스팟 플릿 태깅](#tag-existing-spot-fleet)
+ [스팟 플릿 요청 태그 보기](#view-spot-fleet-tags)

## 사전 조건
<a name="tag-spot-fleet-prereqs"></a>

사용자에게 리소스에 태그를 지정할 수 있는 권한을 부여합니다. 자세한 내용은 [예: 태그 리소스](ExamplePolicies_EC2.md#iam-example-taggingresources) 섹션을 참조하세요.

**사용자에게 리소스에 태그를 지정할 수 있는 권한 부여**  
다음을 포함하는 IAM 정책을 생성합니다.
+ `ec2:CreateTags` 작업 사용자에게 태그 생성 권한이 부여됩니다.
+ `ec2:RequestSpotFleet` 작업 사용자에게 스팟 플릿 요청 생성 권한이 부여됩니다.
+ `Resource`의 경우 `"*"`를 지정해야 합니다. 이를 통해 사용자는 모든 리소스 유형에 태그를 지정할 수 있습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "TagSpotFleetRequest",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags",
                "ec2:RequestSpotFleet"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**중요**  
`spot-fleet-request` 리소스에 대한 리소스 수준 권한은 현재 지원되지 않습니다. `spot-fleet-request`을 리소스로 지정하면 플릿에 태그를 지정하려고 할 때 승인되지 않은 예외가 발생합니다. 다음 예에서는 정책을 설정하지 *않는* 방법을 보여 줍니다.  

```
{
    "Effect": "Allow",
    "Action": [
        "ec2:CreateTags",
        "ec2:RequestSpotFleet"
    ],
    "Resource": "arn:aws:ec2:us-east-1:111122223333:spot-fleet-request/*"
}
```

액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요.
+ AWS IAM Identity Center의 사용자 및 그룹:

  권한 세트를 생성합니다. *AWS IAM Identity Center 사용자 안내서*에서 [권한 세트 생성](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)의 지침을 따릅니다.
+ ID 제공업체를 통해 IAM에서 관리되는 사용자:

  ID 페더레이션을 위한 역할을 생성합니다. *IAM 사용자 설명서*의 [Create a role for a third-party identity provider (federation)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)의 지침을 따릅니다.
+ IAM 사용자:
  + 사용자가 맡을 수 있는 역할을 생성합니다. *IAM 사용자 설명서*에서 [Create a role for an IAM user](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)의 지침을 따릅니다.
  + (권장되지 않음) 정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. *IAM 사용 설명서*에서 [사용자(콘솔)에 권한 추가](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)의 지침을 따릅니다.

## 새 스팟 플릿과 해당 플릿에서 시작되는 인스턴스 및 볼륨 태깅
<a name="tag-new-spot-fleet-and-resources"></a>

**콘솔을 사용하여 새 스팟 플릿 요청 및 해당 스팟 플릿이 시작하는 인스턴스와 볼륨에 태그를 지정하려면 다음을 수행하세요.**

1. [정의된 파라미터를 사용하여 스팟 플릿 요청 생성](create-spot-fleet.md#create-spot-fleet-advanced)의 절차를 따르세요.

1. 태그를 추가하는 방법은 플릿을 수동으로 구성했는지, 시작 템플릿을 사용했는지에 따라 달라집니다.
   + 수동으로 플릿을 구성한 경우 다음을 수행합니다.

     태그를 추가하려면 **추가 시작 파라미터**를 확장하고 **태그 생성**을 선택한 다음 태그의 키와 값을 입력합니다. 각 태그에 대해 반복합니다.

     각 태그에 대해 동일한 태그로 스팟 플릿 요청과 인스턴스를 태깅할 수 있습니다. 인스턴스와 요청에 모두 태그를 지정하려면 **인스턴스**와 **플릿**이 모두 선택되어 있는지 확인합니다. 스팟 플릿 요청만 태깅하려면 **인스턴스(Instance)** 선택을 취소합니다. 플릿에서 시작한 인스턴스만 태깅하려면 **플릿(Fleet)**을 선택 취소합니다.
**참고**  
수동으로 플릿을 구성하는 경우 볼륨에 태그를 지정하는 옵션이 없습니다. 볼륨 태그는 온디맨드 인스턴스에 연결된 볼륨에 대해서만 지원됩니다. 수동으로 플릿을 구성하는 경우 온디맨드 인스턴스를 지정할 수 없습니다.
   + 시작 템플릿을 사용한 경우 다음을 수행합니다.

     플릿 요청에 태그를 추가하려면 **태그**에서 **태그 생성**을 선택하고 태그 키와 값을 입력합니다. 각 태그에 대해 반복합니다.

     플릿의 리소스에 태그를 지정하려면 [시작 템플릿](create-launch-template.md)에서 태그를 지정해야 합니다.

**AWS CLI를 사용하여 새 스팟 플릿 요청 및 해당 스팟 플릿이 시작하는 인스턴스 및 볼륨에 태깅**  
스팟 플릿 요청을 생성할 때 태깅하고 해당 스팟 플릿에서 시작할 때 인스턴스 및 볼륨을 태깅하려면 스팟 플릿 요청 구성을 다음과 같이 구성합니다.

**스팟 플릿 요청 태그:**
+ `SpotFleetRequestConfig`에서 스팟 플릿 요청에 대한 태그를 지정합니다.
+ `ResourceType`에 `spot-fleet-request`을 지정합니다. 다른 값을 지정하면 플릿 요청이 실패합니다.
+ `Tags`에 대해 키-값 페어를 지정합니다. 둘 이상의 키-값 페어를 지정할 수 있습니다.

**인스턴스 태그:**
+ `LaunchSpecifications`의 인스턴스에 대한 태그를 지정합니다.
+ `ResourceType`에 `instance`을 지정합니다. 다른 값을 지정하면 플릿 요청이 실패합니다.
+ `Tags`에 대해 키-값 페어를 지정합니다. 둘 이상의 키-값 페어를 지정할 수 있습니다.

  또는 스팟 플릿 요청에서 참조되는 [시작 템플릿](create-launch-template.md)에서 인스턴스에 대한 태그를 지정할 수 있습니다.

**볼륨 태그:**
+ 스팟 플릿 요청에서 참조되는 [시작 템플릿](create-launch-template.md)의 볼륨에 대한 태그를 지정합니다. `LaunchSpecifications`에서의 볼륨 태그 지정은 지원되지 않습니다.

다음 예에서 스팟 플릿 요청은 Key=Environment 및 Value=Production, Key=Cost-Center 및 Value=123이라는 2개의 태그로 태깅됩니다. 플릿에서 시작한 인스턴스는 스팟 플릿 요청의 태그 중 하나와 동일한 Key=Cost-Center 및 Value=123 태그 1개로만 태깅됩니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::111122223333:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchSpecifications": [
            {
                "ImageId": "ami-0123456789EXAMPLE",
                "InstanceType": "c4.large",
                "TagSpecifications": [
                    {
                        "ResourceType": "instance",
                        "Tags": [
                            {
                                "Key": "Cost-Center",
                                "Value": "123"
                            }
                        ]
                    }
                ]
            }
        ],
        "SpotPrice": "5",
        "TargetCapacity": 2,
        "TerminateInstancesWithExpiration": true,
        "Type": "maintain",
        "ReplaceUnhealthyInstances": true,
        "InstanceInterruptionBehavior": "terminate",
        "InstancePoolsToUseCount": 1,
        "TagSpecifications": [
            {
                "ResourceType": "spot-fleet-request",
                "Tags": [
                    {
                        "Key": "Environment",
                        "Value":"Production"
                    },
                    {
                        "Key": "Cost-Center",
                        "Value":"123"
                    }
                ]
            }
        ]
    }
}
```

**AWS CLI를 사용하여 스팟 플릿에서 시작한 인스턴스에 태깅**  
플릿에서 시작되는 인스턴스를 태깅하려면 스팟 플릿 요청에서 참조되는 [시작 템플릿](create-launch-template.md)에서 태그를 지정하거나 다음과 같이 스팟 플릿 요청 구성에서 태그를 지정할 수 있습니다.
+ `LaunchSpecifications`의 인스턴스에 대한 태그를 지정합니다.
+ `ResourceType`에 `instance`을 지정합니다. 다른 값을 지정하면 플릿 요청이 실패합니다.
+ `Tags`에 대해 키-값 페어를 지정합니다. 둘 이상의 키-값 페어를 지정할 수 있습니다.

다음 예에서는 플릿에 의해 시작되는 인스턴스에 Key=Cost-Center 및 Value=123 태그가 지정되어 있습니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::111122223333:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchSpecifications": [
            {
                "ImageId": "ami-0123456789EXAMPLE",
                "InstanceType": "c4.large",
                "TagSpecifications": [
                    {
                        "ResourceType": "instance",
                        "Tags": [
                            {
                                "Key": "Cost-Center",
                                "Value": "123"
                            }
                        ]
                    }
                ]
            }
        ],
        "SpotPrice": "5",
        "TargetCapacity": 2,
        "TerminateInstancesWithExpiration": true,
        "Type": "maintain",
        "ReplaceUnhealthyInstances": true,
        "InstanceInterruptionBehavior": "terminate",
        "InstancePoolsToUseCount": 1
    }
}
```

**AWS CLI를 사용하여 스팟 플릿에서 시작한 온디맨드 인스턴스에 연결된 볼륨에 태깅**  
플릿에서 생성하는 볼륨을 태깅하려면 스팟 플릿 요청에서 참조되는 [시작 템플릿](create-launch-template.md)에서 태그를 지정합니다.

**참고**  
볼륨 태그는 온디맨드 인스턴스에 연결된 볼륨에 대해서만 지원됩니다. 스팟 인스턴스에 연결된 볼륨에는 태그를 지정할 수 없습니다.  
`LaunchSpecifications`에서의 볼륨 태그 지정은 지원되지 않습니다.

## 기존 스팟 플릿 태깅
<a name="tag-existing-spot-fleet"></a>

**콘솔을 사용하여 기존 스팟 플릿 요청을 태깅하려면**

스팟 플릿 요청을 생성한 후 콘솔을 사용하여 플릿 요청에 태그를 추가할 수 있습니다.

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택합니다.

1. **태그** 탭을 선택하고 **태그 생성**을 선택합니다.

**AWS CLI를 사용하여 기존 스팟 플릿 요청에 태깅**  
[create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html) 명령을 사용해 기존 리소스에 태그를 지정할 수 있습니다. 다음 예에서, 기존 스팟 플릿 요청은 Key=purpose 및 Value=test로 태깅됩니다.

```
aws ec2 create-tags \
    --resources sfr-11112222-3333-4444-5555-66666EXAMPLE \
    --tags Key=purpose,Value=test
```

## 스팟 플릿 요청 태그 보기
<a name="view-spot-fleet-tags"></a>

**콘솔을 사용하여 스팟 플릿 요청 태그를 보려면**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택하고 [**태그(Tags)**] 탭을 선택합니다.

**스팟 플릿 요청 태그를 설명하려면**  
[describe-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-tags.html) 명령을 사용하여 지정된 리소스에 대한 태그를 표시합니다. 다음 예제에서는 지정된 스팟 플릿 요청에 대한 태그를 설명합니다.

```
aws ec2 describe-tags \
    --filters "Name=resource-id,Values=sfr-11112222-3333-4444-5555-66666EXAMPLE"
```

```
{
    "Tags": [
        {
            "Key": "Environment",
            "ResourceId": "sfr-11112222-3333-4444-5555-66666EXAMPLE",
            "ResourceType": "spot-fleet-request",
            "Value": "Production"
        },
        {
            "Key": "Another key",
            "ResourceId": "sfr-11112222-3333-4444-5555-66666EXAMPLE",
            "ResourceType": "spot-fleet-request",
            "Value": "Another value"
        }
    ]
}
```

스팟 플릿 요청을 설명하여 스팟 플릿 요청의 태그를 볼 수도 있습니다.

[describe-spot-fleet-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-fleet-requests.html) 명령을 사용하여 지정된 스팟 플릿 요청의 구성을 볼 수 있습니다. 여기에는 플릿 요청에 대해 지정된 태그가 모두 포함됩니다.

```
aws ec2 describe-spot-fleet-requests \
    --spot-fleet-request-ids sfr-11112222-3333-4444-5555-66666EXAMPLE
```

```
{
    "SpotFleetRequestConfigs": [
        {
            "ActivityStatus": "fulfilled",
            "CreateTime": "2020-02-13T02:49:19.709Z",
            "SpotFleetRequestConfig": {
                "AllocationStrategy": "capacityOptimized",
                "OnDemandAllocationStrategy": "lowestPrice",
                "ExcessCapacityTerminationPolicy": "Default",
                "FulfilledCapacity": 2.0,
                "OnDemandFulfilledCapacity": 0.0,
                "IamFleetRole": "arn:aws:iam::111122223333:role/aws-ec2-spot-fleet-tagging-role",
                "LaunchSpecifications": [
                    {
                        "ImageId": "ami-0123456789EXAMPLE",
                        "InstanceType": "c4.large"
                    }
                ],
                "TargetCapacity": 2,
                "OnDemandTargetCapacity": 0,
                "Type": "maintain",
                "ReplaceUnhealthyInstances": false,
                "InstanceInterruptionBehavior": "terminate"
            },
            "SpotFleetRequestId": "sfr-11112222-3333-4444-5555-66666EXAMPLE",
            "SpotFleetRequestState": "active",
            "Tags": [
                {
                    "Key": "Environment",
                    "Value": "Production"
                },
                {
                    "Key": "Another key",
                    "Value": "Another value"
                }
            ]
        }
    ]
}
```

# 스팟 플릿 요청, 해당 인스턴스, 이벤트 기록 설명
<a name="manage-spot-fleet"></a>

스팟 플릿 구성, 스팟 플릿의 인스턴스 및 스팟 플릿의 이벤트 기록을 설명할 수 있습니다.

------
#### [ Console ]

**스팟 플릿을 설명하려면**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택합니다. ID는 **sfr-** 시작합니다. 구성 세부 정보를 보려면 **설명**을 선택합니다.

1. 스팟 플릿에 대한 스팟 인스턴스를 나열하려면 [**인스턴스(Instances)**]를 선택합니다.

1. 스팟 플릿에 대한 기록을 보려면 [**기록(History)**]을 선택합니다.

------
#### [ AWS CLI ]

**스팟 플릿 요청을 설명하려면**  
[describe-spot-fleet-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-fleet-requests.html) 명령을 사용합니다.

```
aws ec2 describe-spot-fleet-requests \
    --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

**지정된 스팟 플릿 요청에 대한 실행 중인 인스턴스를 설명하려면**  
[describe-spot-fleet-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-fleet-instances.html) 명령을 사용합니다.

```
aws ec2 describe-spot-fleet-instances \
    --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
```

**지정된 스팟 플릿 요청에 대한 이벤트 기록을 설명하려면**  
[describe-spot-fleet-request-history](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-spot-fleet-request-history.html) 명령을 사용합니다.

```
aws ec2 describe-spot-fleet-request-history \
    --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --start-time 2024-05-18T00:00:00Z
```

------
#### [ PowerShell ]

**스팟 플릿 요청을 설명하려면**  
[Get-EC2SpotFleetRequest](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SpotFleetRequest.html) cmdlet을 사용합니다.

```
Get-EC2SpotFleetRequest
```

**지정된 스팟 플릿 요청에 대한 실행 중인 인스턴스를 설명하려면**  
[Get-EC2SpotFleetInstance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SpotFleetInstance.html) cmdlet을 사용합니다.

```
Get-EC2SpotFleetInstance `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE"
```

**지정된 스팟 플릿 요청에 대한 이벤트 기록을 설명하려면**  
[Get-EC2SpotFleetRequestHistory](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2SpotFleetRequestHistory.html) cmdlet을 사용합니다.

```
Get-EC2SpotFleetRequestHistory `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -UtcStartTime 2024-05-18T00:00:00Z
```

------

# 스팟 플릿 요청 수정
<a name="modify-spot-fleet"></a>

다음 태스크를 완료하기 위해 활성 스팟 플릿 요청을 수정할 수 있습니다.
+ 총 목표 용량 및 온디맨드 부분 증가
+ 총 목표 용량 및 온디맨드 부분 감소

총 목표 용량을 늘리면 스팟 플릿이 스팟 플릿 요청에 대한 [할당 전략](ec2-fleet-allocation-strategy.md)에 따라 추가 스팟 인스턴스를 시작합니다. 온디맨드 부분을 늘리면 스팟 플릿이 추가 온디맨드 인스턴스를 시작합니다.

총 목표 용량을 줄이면 스팟 플릿이 새 목표 용량을 초과하는 모든 열린 요청을 취소합니다. 플릿의 크기가 새 목표 용량에 도달할 때까지 스팟 플릿에서 스팟 인스턴스를 종료하도록 요청할 수 있습니다. 할당 전략이 `diversified`이면 스팟 플릿이 풀 전체의 인스턴스를 종료합니다. 또는 스팟 플릿에서 플릿을 현재 크기로 유지하되 중단되거나 수동으로 종료한 스팟 인스턴스는 교체하지 않도록 요청할 수 있습니다.

**고려 사항**
+ 일회성 스팟 플릿 요청은 수정할 수 없습니다. 스팟 플릿 요청을 생성할 때 [**목표 용량 유지(Maintain target capacity)**]를 선택한 경우에만 스팟 플릿 요청을 수정할 수 있습니다.
+ 목표 용량이 줄어 스팟 플릿이 인스턴스를 종료하면 해당 인스턴스는 스팟 인스턴스 중단 공지를 받습니다.

------
#### [ Console ]

**스팟 플릿 요청을 수정하려면**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택합니다.

1. **작업**을 선택한 다음, **Modify target capacity(목표 용량 수정)**을 선택합니다.

1. **목표 용량 수정(Modify target capacity)**에서 다음 작업을 수행하십시오.

   1. 새 목표 용량 및 온디맨드 부분을 입력합니다.

   1. (선택 사양) 목표 용량을 줄이지만 플릿은 현재 크기로 유지하고자 한다면, **인스턴스 종료** 선택을 취소합니다.

   1. **제출**을 선택합니다.

------
#### [ AWS CLI ]

**스팟 플릿 요청을 수정하려면**  
[modify-spot-fleet-request](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-spot-fleet-request.html) 명령을 사용하여 지정된 스팟 플릿 요청의 목표 용량을 업데이트합니다.

```
aws ec2 modify-spot-fleet-request \
    --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --target-capacity 20
```

다음과 같이 이전 명령을 수정하여 결과적으로 어떤 스팟 인스턴스도 종료하지 않고 지정된 스팟 플릿의 목표 용량을 줄일 수 있습니다.

```
aws ec2 modify-spot-fleet-request \
    --spot-fleet-request-id sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --target-capacity 10 \
    --excess-capacity-termination-policy NoTermination
```

------
#### [ PowerShell ]

**스팟 플릿 요청을 수정하려면**  
[Edit-EC2SpotFleetRequest](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2SpotFleetRequest.html) cmdlet을 사용하여 지정된 스팟 플릿 요청의 목표 용량을 업데이트합니다.

```
Edit-EC2SpotFleetRequest `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TargetCapacity 20
```

다음과 같이 이전 명령을 수정하여 결과적으로 어떤 스팟 인스턴스도 종료하지 않고 지정된 스팟 플릿의 목표 용량을 줄일 수 있습니다.

```
Edit-EC2SpotFleetRequest `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TargetCapacity 20 `
    -ExcessCapacityTerminationPolicy "NoTermination"
```

------

# 스팟 플릿 요청 취소(삭제)
<a name="cancel-spot-fleet"></a>

스팟 플릿이 더 이상 필요하지 않은 경우 요청을 스팟 플릿 요청을 취소할 수 있습니다. 그러면 요청이 삭제됩니다. 플릿 요청을 취소하면 플릿과 연결된 모든 스팟 요청도 취소되어 새 스팟 인스턴스가 시작되지 않습니다.

스팟 플릿 요청을 취소하는 경우 해당 인스턴스도 모두 종료할지 여부를 지정해야 합니다. 여기에는 온디맨드 인스턴스와 스팟 인스턴스가 모두 포함됩니다.

**주의**  
**인스턴스 종료는 영구적이며 취소할 수 없습니다.**  
종료한 인스턴스는 더 이상 연결할 수 없으며 복구할 수 없습니다. 연결된 Amazon EBS 볼륨도 종료 시 삭제하도록 구성한 경우 영구적으로 삭제되며 복구할 수 없습니다. 인스턴스 저장소 볼륨에 저장된 데이터는 모두 영구적으로 손실됩니다. 자세한 내용은 [인스턴스 종료 작동 방식](how-ec2-instance-termination-works.md) 섹션을 참조하세요.  
인스턴스를 종료하기 전에 종료 후에도 보존해야 하는 모든 데이터를 영구 스토리지에 백업했는지 확인하세요.

플릿 요청이 취소되면 인스턴스가 종료되도록 지정할 경우 플릿 요청이 `cancelled_terminating` 상태가 됩니다. 그렇게 하지 않으면 `cancelled_running` 상태가 되어 인스턴스가 중단되거나 수동으로 종료될 때까지 계속 실행됩니다.

**제한 사항**
+ 단일 요청으로 최대 100개의 플릿을 취소할 수 있습니다. 지정된 수를 초과하면 플릿이 취소되지 않습니다.

------
#### [ Console ]

**스팟 플릿 요청을 취소(삭제)하려면**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택합니다.

1. **작업**을 선택한 후, **요청 취소**를 선택합니다.

1. **스팟 요청 취소** 대화 상자에서 다음을 수행합니다.

   1. 스팟 플릿 요청을 취소함과 동시에 연결된 인스턴스를 종료하려면 **인스턴스 종료** 확인란을 선택된 상태로 둡니다. 연결된 인스턴스를 종료하지 않고 스팟 플릿 요청을 취소하려면 **인스턴스 종료** 확인란 선택을 취소합니다.

   1. **확인**을 선택합니다.

------
#### [ AWS CLI ]

**스팟 플릿 요청을 취소(삭제)하고 해당 인스턴스를 종료하려면**  
[cancel-spot-fleet-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-spot-fleet-requests.html) 명령을 `--terminate-instances` 옵션과 함께 사용합니다.

```
aws ec2 cancel-spot-fleet-requests \
    --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --terminate-instances
```

다음은 예제 출력입니다.

```
{
    "SuccessfulFleetRequests": [
        {
            "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE",
            "CurrentSpotFleetRequestState": "cancelled_terminating",
            "PreviousSpotFleetRequestState": "active"
        }
    ],
    "UnsuccessfulFleetRequests": []
}
```

**해당 인스턴스를 종료하지 않고 스팟 플릿 요청을 취소(삭제)하려면**  
`--no-terminate-instances` 옵션을 대신 사용하여 이전 예제를 수정합니다.

```
aws ec2 cancel-spot-fleet-requests \
    --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \
    --no-terminate-instances
```

다음은 예제 출력입니다.

```
{
    "SuccessfulFleetRequests": [
        {
            "SpotFleetRequestId": "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE",
            "CurrentSpotFleetRequestState": "cancelled_running",
            "PreviousSpotFleetRequestState": "active"
        }
    ],
    "UnsuccessfulFleetRequests": []
}
```

------
#### [ PowerShell ]

**스팟 플릿 요청을 취소(삭제)하고 해당 인스턴스를 종료하려면**  
[Stop-EC2SpotFleetRequest](https://docs.aws.amazon.com/powershell/latest/reference/items/Stop-EC2SpotFleetRequest.html) cmdlet을 `-TerminateInstance` 파라미터와 함께 사용합니다.

```
Stop-EC2SpotFleetRequest `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TerminateInstance $true
```

**해당 인스턴스를 종료하지 않고 스팟 플릿 요청을 취소(삭제)하려면**  
`-TerminateInstance` 파라미터 값을 변경하여 이전 예제를 수정합니다.

```
Stop-EC2SpotFleetRequest `
    -SpotFleetRequestId "sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" `
    -TerminateInstance $false
```

------

# 스팟 플릿의 자동 규모 조정 이해
<a name="spot-fleet-automatic-scaling"></a>

*자동 규모 조정*을 사용하면 수요에 따라 스팟 플릿의 대상 용량을 늘리거나 줄일 수 있습니다. 자동 규모 조정을 사용하면 스팟 플릿은 하나 이상의 조정 정책에 따라 지정된 범위 내에서 인스턴스를 시작(스케일 아웃)하거나 인스턴스를 종료(스케일 인)할 수 있습니다.

스팟 플릿의 자동 크기 조정은 Amazon EC2, Amazon CloudWatch 및 Application Auto Scaling API의 조합을 통해 수행됩니다. 스팟 플릿은 Amazon EC2를 통해 생성됩니다. CloudWatch는 경보를 생성합니다. 크기 조정 정책은 Application Auto Scaling을 통해 생성됩니다.

**자동 규모 조정 유형**

스팟 플릿은 다음과 같은 유형의 자동 크기 조정을 지원합니다.
+ [대상 추적 조정](spot-fleet-target-tracking.md) - 특정 지표에 대한 값을 대상으로 지정하여 플릿의 현재 용량을 늘리거나 줄입니다. 이 작업은 온도 조절기가 집안 온도를 유지하는 방식과 비슷합니다. 사용자가 원하는 온도만 선택하면 나머지는 온도 조절기가 알아서 합니다.
+ [단계 크기 조정](spot-fleet-step-scaling.md) - 일련의 크기 조정 조절값(즉, 경보 위반의 크기에 따라 달라지는 단계 조절값)에 따라 플릿의 현재 용량을 늘리거나 줄입니다.
+ [예약 크기 조정](spot-fleet-scheduled-scaling.md) - 날짜 및 시간을 기준으로 플릿의 현재 용량을 늘리거나 줄입니다.

## 고려 사항
<a name="considerations-for-spot-fleet-automatic-scaling"></a>

스팟 플릿에 자동 규모 조정을 사용하는 경우 다음 고려 사항을 참조하세요.
+ **인스턴스 가중치** - [인스턴스 가중치](ec2-fleet-instance-weighting.md)를 사용하는 경우 스팟 플릿에서 필요에 따라 대상 용량을 초과할 수 있다는 점에 주의하세요. 이행된 용량은 부동 소수점 숫자일 수 있으나 목표 용량은 정수여야 하므로 스팟 플릿은 결과를 다음 정수로 올립니다. 경보가 트리거되면 조정 정책의 결과를 확인할 때 이러한 동작을 고려해야 합니다. 예를 들어 목표 용량이 30, 이행된 용량이 30.1이고 조정 정책이 1을 뺀다고 가정하세요. 경보가 트리거되면 자동 조정 프로세스가 30.1에서 1을 빼 29.1을 도출한 후 30으로 올리므로 조정 작업이 수행되지 않습니다. 또 다른 예로, 선택한 인스턴스의 가중치가 2, 4, 8이고 목표 용량이 10이지만 가중치 2인 인스턴스를 사용할 수 없었기 때문에 스팟 플릿이 가중치 4와 8인 인스턴스를 프로비저닝하여 이행된 용량이 12가 되었다고 가정합니다. 조정 정책이 목표 용량을 20% 줄이고 경보가 트리거되면 자동 조정 프로세스가 12에서 12\$10.2를 빼 9.6을 도출한 후 10으로 올리므로 조정 작업이 수행되지 않습니다.
+ **휴지 기간** - 스팟 플릿에 대해 생성된 조정 정책은 휴지 기간을 지원합니다. 이 기간은 이전 트리거 관련 조정 활동이 향후 조정 이벤트에 영향을 줄 수 있는 경우 조정 활동이 완료된 후의 시간(초)입니다. 확장 정책의 경우, 휴지 기간이 진행되는 동안 휴지하기 시작한 이전 확장 이벤트에 의해 추가된 용량은 다음 확장에 대해 원하는 용량의 일부로 계산됩니다. 지속적이지만 과도하지는 않게 확장하기 위한 목적입니다. 축소 정책의 경우, 휴지 기간은 만료될 때까지 후속 축소 요청을 차단하기 위해 사용됩니다. 보수적으로 축소하여 애플리케이션의 가용성을 보호하기 위한 목적입니다. 그러나 축소 후 휴지 기간 동안 다른 경보가 확장 정책을 트리거하면 자동 조정은 확장 가능한 대상을 즉시 확장합니다.
+ **세부 모니터링 사용** - 인스턴스 지표를 1분 주기로 조정하는 것이 좋습니다. 이렇게 하면 사용량 변동에 따른 응답 속도를 더욱 높일 수 있기 때문입니다. 주기를 5분으로 하면 응답 시간이 느려질 뿐만 아니라 오랜 시간이 지난 측정치 데이터를 기준으로 조정하게 됩니다. 인스턴스에 대한 측정치 데이터를 CloudWatch에 1분 동안 전송하려면 특히 세부 모니터링을 활성화해야 합니다. 자세한 내용은 [EC2 인스턴스에 대한 세부 모니터링 관리](manage-detailed-monitoring.md) 및 [정의된 파라미터를 사용하여 스팟 플릿 요청 생성](create-spot-fleet.md#create-spot-fleet-advanced)(을)를 참조하세요.
+ **AWS CLI** - 스팟 플릿의 규모 조정을 구성하기 위해 AWS CLI를 사용하는 경우 [application-autoscaling](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling) 명령을 사용하게 됩니다.

# 스팟 플릿 자동 크기 조정에 필요한 IAM 권한
<a name="spot-fleet-auto-scaling-IAM"></a>

스팟 플릿의 자동 크기 조정은 Amazon EC2, Amazon CloudWatch 및 Application Auto Scaling API의 조합을 통해 수행됩니다. 스팟 플릿은 Amazon EC2를 통해 생성됩니다. CloudWatch는 경보를 생성합니다. 크기 조정 정책은 Application Auto Scaling을 통해 생성됩니다. 플릿 규모 조정 설정에 액세스하는 사용자에게는 [스팟 플릿 및 Amazon EC2를 사용하는 데 필요한 IAM 권한](spot-fleet-prerequisites.md#spot-fleet-iam-users)에 더해 자동 규모 조정을 지원하는 서비스에 대한 적절한 권한이 있어야 합니다.

스팟 플릿에 자동 규모 조정을 사용하려면 사용자에게는 다음 예제 정책에 나온 태스크를 수행할 수 있는 권한이 있어야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "application-autoscaling:*",
                "ec2:DescribeSpotFleetRequests",
                "ec2:ModifySpotFleetRequest",
                "cloudwatch:DeleteAlarms",
                "cloudwatch:DescribeAlarmHistory",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DescribeAlarmsForMetric",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DisableAlarmActions",
                "cloudwatch:EnableAlarmActions",
                "iam:CreateServiceLinkedRole",
                "sns:CreateTopic",
                "sns:Subscribe",
                "sns:Get*",
                "sns:List*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Application Auto Scaling API 호출에 대한 보다 세분화된 권한을 허용하는 고유한 IAM 정책을 만들 수도 있습니다. 자세한 내용은 *Application Auto Scaling 사용 설명서*의 [Identity and Access Management for Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/auth-and-access-control.html)을 참조하세요.

Application Auto Scaling 서비스에는 스팟 플릿 및 CloudWatch 경보를 설명할 수 있는 권한과 사용자 대신 스팟 플릿 목표 용량을 수정할 수 있는 권한도 필요합니다. 스팟 플릿에 자동 크기 조정을 사용하면 `AWSServiceRoleForApplicationAutoScaling_EC2SpotFleetRequest`라는 서비스 연결 역할이 생성됩니다. 이 서비스 연결 역할은 정책에 대한 경보를 설명하고, 플릿의 현재 용량을 모니터링하고, 플릿의 용량을 수정할 수 있는Application Auto Scaling 권한을 부여합니다. Application Auto Scaling의 관리형 스팟 플릿 역할은 원래 `aws-ec2-spot-fleet-autoscale-role`이었지만 더 이상 필요하지 않습니다. 서비스 연결 역할은 Application Auto Scaling의 기본 역할입니다. 자세한 정보는 *Application Auto Scaling 사용 설명서*의 [Application Auto Scaling 서비스 연결 역할](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)을 참조하세요.

# 대상 추적 조정: 특정 지표에 대한 값을 대상으로 지정하여 스팟 플릿 규모 조정
<a name="spot-fleet-target-tracking"></a>

대상 추적 조정을 사용하면 지표를 선택하고 대상 값을 설정하여 대상 추적 조정 정책을 생성할 수 있습니다. 스팟 플릿은 조정 정책을 트리거하고 선택한 지표 및 목표 값에 따라 조정 조절값을 계산하는 CloudWatch 경보를 생성하고 관리합니다. 조정 정책은 지표를 지정된 대상 값에 가깝게 유지하기 위해 필요에 따라 인스턴스를 추가하거나 제거하여 용량을 조정합니다. 대상 추적 정책은 지표를 대상 값에 가깝게 유지할 뿐만 아니라 로드 패턴의 변동으로 인한 지표의 변동에 맞춰 조정하고 급격한 용량 변동을 최소화합니다.

각 정책이 다른 지표를 사용한다는 전제하에 스팟 플릿에 대해 다수의 대상 추적 조정 정책을 생성할 수 있습니다. 플릿은 최대 플릿 용량을 지정하는 정책에 따라 조정됩니다. 이를 통해 여러 시나리오에 대응하여 애플리케이션 워크로드에 충분한 용량을 확보할 수 있습니다.

애플리케이션 가용성을 보장하기 위해 스팟 플릿은 측정치에 비례하여 가능한 신속하게 확장되지만, 축소는 점진적으로 이루어집니다.

대상 용량이 줄어 스팟 플릿이 스팟 인스턴스를 종료하면 해당 인스턴스는 스팟 인스턴스 중단 공지를 받습니다.

**참고**  
스팟 플릿의 대상 추적 조정 정책에서 관리되는 CloudWatch 경보는 편집하거나 삭제하지 마세요. 대상 추적 조정 정책을 삭제하면 스팟 플릿에서 경보가 자동으로 삭제됩니다.

**사전 조건**
+ 스팟 플릿 요청에는 `maintain` 유형의 요청이 있어야 합니다. `request` 유형의 요청에는 자동 조정이 지원되지 않습니다.
+ [스팟 플릿 자동 크기 조정에 필요한 IAM 권한](spot-fleet-auto-scaling-IAM.md) 구성.
+ [고려 사항](spot-fleet-automatic-scaling.md#considerations-for-spot-fleet-automatic-scaling)을(를) 검토합니다.

**대상 추적 조정 정책을 구성하려면**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택합니다.

1. 화면 하단 근처의 **Auto Scaling** 탭을 선택합니다. 스팟 플릿에 대한 링크를 선택한 경우에는 탭이 없습니다. 대신 **Auto Scaling** 섹션이 나타날 때까지 아래로 스크롤합니다.

1. 자동 조정이 구성되어 있지 않으면 **구성**을 선택합니다.

1. **다음 사이로 용량 조정(Scale capacity between)**을 사용하여 플릿에 대한 최소 및 최대 용량을 설정합니다. 자동 조정에서 최소 용량 미만이거나 최대 용량을 초과하는 플릿을 조정하지 않습니다.

1. [**정책 이름(Policy name)**]에 정책의 이름을 입력합니다.

1. **대상 지표**를 선택합니다.

1. 측정치에 대한 **대상 값**을 입력합니다.

1. **휴지 기간**의 경우 새 값(초)을 지정하거나 기본값을 유지합니다.

1. (선택 사항) 현재 구성에 따라 스케일 인 정책 생성을 생략하려면 **축소 비활성화**를 선택합니다. 다른 구성을 사용하여 축소 정책을 생성할 수 있습니다.

1. **저장**을 선택합니다.

**AWS CLI를 사용하여 대상 추적 정책을 구성하려면**

1. [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 명령을 사용하여 스팟 플릿 요청을 확장 가능한 대상으로 등록합니다.

1. [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 명령을 사용하여 조정 정책을 생성합니다.

# 단계 조정: 단계 조정 정책을 사용하여 스팟 플릿 규모 조정
<a name="spot-fleet-step-scaling"></a>

단계 조정 정책을 사용하여 조정 프로세스를 트리거하도록 CloudWatch 경보를 지정합니다. 예를 들어, CPU 사용률이 특정 레벨에 도달하면 확장하려는 경우 Amazon EC2에서 제공하는 `CPUUtilization` 측정치를 사용하여 경보를 생성합니다.

단계 조정 정책을 생성할 때 다음과 같은 조정 조절 유형 중 하나를 지정해야 합니다.
+ **추가** - 지정된 수의 용량 단위 또는 현재 용량의 지정된 비율까지 플릿의 목표 용량을 늘립니다.
+ **제거** - 지정된 수의 용량 단위 또는 현재 용량의 지정된 비율까지 플릿의 목표 용량을 줄입니다.
+ **설정** - 플릿의 목표 용량을 지정된 수의 용량 단위로 설정합니다.

경보가 트리거되면 자동 조정 프로세스가 이행된 용량과 조정 정책을 사용하여 새로운 목표 용량을 계산한 후 그에 따라 목표 용량을 업데이트합니다. 예를 들어 목표 용량과 이행된 용량이 10이고 조정 정책이 1을 추가한다고 가정하세요. 경보가 트리거되면 자동 크기 조정 프로세스에서 10에 1을 추가하여 11이 되므로 스팟 플릿은 1개 인스턴스를 시작합니다.

대상 용량이 줄어 스팟 플릿이 스팟 인스턴스를 종료하면 해당 인스턴스는 스팟 인스턴스 중단 공지를 받습니다.

**사전 조건**
+ 스팟 플릿 요청에는 `maintain` 유형의 요청이 있어야 합니다. `request` 유형의 요청에는 자동 조정이 지원되지 않습니다.
+ [스팟 플릿 자동 크기 조정에 필요한 IAM 권한](spot-fleet-auto-scaling-IAM.md) 구성.
+ 어떤 CloudWatch 지표가 애플리케이션에 중요한지 생각하세요. AWS에서 제공하는 지표 또는 사용자 지정 지표를 기반으로 CloudWatch 경보를 생성할 수 있습니다.
+ 크기 조정 정책에 사용할 AWS 지표에 대한 CloudWatch 지표 수집이 지표를 제공하는 서비스에서 기본적으로 사용되지 않은 경우 지표 수집을 사용하도록 설정합니다.
+ [고려 사항](spot-fleet-automatic-scaling.md#considerations-for-spot-fleet-automatic-scaling)을(를) 검토합니다.

**CloudWatch 경보를 생성하려면**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **경보**를 확장하고 **모든 경보**를 선택합니다.

1. **경보 생성**을 선택합니다.

1. **지표 및 조건 지정(Specify metric and conditions)** 페이지에서 **지표 선택(Select metric)**을 선택합니다.

1. **EC2 스팟**, **플릿 요청 지표**를 선택하고, 지표(예: **TargetCapacity**)를 선택한 다음 **지표 선택**을 선택합니다.

   선택한 지표에 대한 그래프와 기타 정보가 표시된 **Specify metric and conditions(지표 및 조건 지정)** 페이지가 나타납니다.

1. **기간**에 예컨대, **1분**과 같은 경보에 대한 평가 기간을 선택합니다. 경보를 평가할 때 각 기간이 하나의 데이터 포인트로 집계됩니다.
**참고**  
기간이 짧을수록 경보가 더 민감해집니다.

1. **조건**에서 임계 조건을 정의하여 경보를 정의합니다. 예를 들어, 지표 값이 80% 이상일 때마다 경보를 트리거하는 임계값을 정의할 수 있습니다.

1. **추가 구성**에서 **경고할 데이터포인트**에 대해 알람을 트리거하는 ALARM 상태에 있어야 하는 데이터포인트(평가 기간)의 수를 지정합니다. 예를 들어 1개의 평가 기간 또는 3개의 평가 기간 중 2개입니다. 그러면 다수의 연속 기간이 위반되면 ALARM 상태가 되는 경보가 생성됩니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [경보 평가](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarm-evaluation)를 참조하세요.

1. **Missing data treatment(누락된 데이터 처리)**에서 옵션 중 하나를 선택합니다(또는 기본값인 **Treat missing data as missing(누락된 데이터를 누락으로 처리)**를 그대로 사용). 자세한 설명은 *Amazon CloudWatch 사용 설명서*의 [CloudWatch 경보가 누락된 데이터를 처리하는 방법 구성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data)을 참조하세요.

1. **다음**을 선택합니다.

1. (선택 사항) 조정 이벤트 알림을 수신하려면 **알림**에 대해 알림을 받는 Amazon SNS 주제를 선택하거나 작성할 수 있습니다. 또는 지금 알림을 삭제하고 필요에 따라 나중에 추가할 수 있습니다.

1. **다음**을 선택합니다.

1. **이름 및 설명 추가**에 경보의 이름과 설명을 입력하고 **다음**을 선택합니다.

1. **경보 생성**을 선택하세요.

**스팟 플릿에 대한 단계 조정 정책을 구성하려면**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택합니다.

1. 화면 하단 근처의 **Auto Scaling** 탭을 선택합니다. 스팟 플릿에 대한 링크를 선택한 경우에는 탭이 없습니다. 대신 **Auto Scaling** 섹션이 나타날 때까지 아래로 스크롤합니다.

1. 자동 조정이 구성되어 있지 않으면 **구성**을 선택합니다.

1. **다음 사이로 용량 조정(Scale capacity between)**을 사용하여 플릿에 대한 최소 및 최대 용량을 설정합니다. 조정 정책에서는 최소 용량 미만이나 최대 용량을 초과하여 플릿을 조정하지 않습니다.

1. **조정 정책** 아래의 **정책 유형**에서 **단계 조정 정책**을 선택합니다.

1. 처음에 **조정 정책**에는 단계 조정 정책(**ScaleUp** 및 **ScaleDown**)이 포함되어 있습니다. 이러한 정책을 완료하거나 **정책 제거(Remove policy)**를 선택하여 삭제할 수 있습니다. 또한 **정책 추가**를 선택하여 정책을 추가할 수도 있습니다.

1. 정책을 정의하려면 다음을 수행합니다.

   1. [**정책 이름(Policy name)**]에 정책의 이름을 입력합니다.

   1. **정책 트리거**에서 기존 경보를 선택하거나 **새 경보 생성**을 선택하여 Amazon CloudWatch 콘솔을 열고 경보를 생성합니다.

   1. **용량 수정**에서 조정할 크기 및 단계 조정의 상한과 하한을 정의합니다. 특정 인스턴스 개수나는 기존 플릿 크기의 백분율을 추가 또는 제거하거나 플릿을 정확한 크기로 설정할 수 있습니다.

      예를 들어 플릿의 용량을 30% 늘리는 단계 조정 정책을 생성하려면 **추가**를 선택하고 다음 필드에 **30**을 입력한 후 **퍼센트**를 선택합니다. 기본적으로 추가 정책의 하한은 경보 임계값이고 상한은 양(\$1)의 무한대입니다. 기본적으로 제거 조정의 상한은 경보 임계값이고 하한은 음(-)의 무한대입니다.

   1. (선택 사항) 다른 단계를 추가하려면 **단계 추가**를 선택합니다.

   1. **휴지 기간**의 경우 새 값(초)을 지정하거나 기본값을 유지합니다.

1. **저장**을 선택합니다.

**AWS CLI를 사용하여 스팟 플릿에 대한 단계 크기 조정 정책 구성**

1. [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html) 명령을 사용하여 스팟 플릿 요청을 확장 가능한 대상으로 등록합니다.

1. [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) 명령을 사용하여 조정 정책을 생성합니다.

1. [put-metric-alarm](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-alarm.html) 명령을 사용하여 조정 정책을 트리거하는 경보를 생성합니다.

# 예약된 규모 조정: 일정에 따라 스팟 플릿 규모 조정
<a name="spot-fleet-scheduled-scaling"></a>

일정을 기반으로 플릿 규모를 조정하면 수요에 따른 로드 변경에 맞게 애플리케이션 규모를 조정할 수 있습니다. *예약된 작업*을 생성하여 스팟 플릿에서 특정 시간에 규모 조정 작업을 수행하도록 할 수 있습니다. 예약 작업을 생성하려면 기존 스팟 플릿, 규모 조정 활동이 발생해야 하는 시간, 원하는 최소 용량 및 최대 용량을 지정해야 합니다. 한 번 또는 반복되는 일정에 따라 크기가 조정되도록 예약된 작업을 구성할 수 있습니다. 변경이 필요한 경우 예약된 작업을 편집하거나 삭제할 수 있습니다.

**사전 조건**
+ 기존 스팟 플릿에 대해서만 예약된 작업을 생성할 수 있습니다. 스팟 플릿을 생성할 때는 예약된 작업을 생성할 수 없습니다.
+ 스팟 플릿 요청에는 `maintain` 유형의 요청이 있어야 합니다. `request` 유형의 요청에는 자동 조정이 지원되지 않습니다.
+ [스팟 플릿 자동 크기 조정에 필요한 IAM 권한](spot-fleet-auto-scaling-IAM.md) 구성.
+ [고려 사항](spot-fleet-automatic-scaling.md#considerations-for-spot-fleet-automatic-scaling)을(를) 검토합니다.

**1회성 예약된 작업을 만들려면**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택합니다.

1. 화면 하단 근처의 **예약된 조정** 탭을 선택합니다. 스팟 플릿에 대한 링크를 선택한 경우에는 탭이 없습니다. 대신 **예약된 조정** 섹션이 나타날 때까지 아래로 스크롤합니다.

1. **예약된 작업 생성**을 선택합니다.

1. **이름**에서 예약된 작업의 이름을 지정합니다.

1. **최소 용량**, **최대 용량** 또는 두 가지 모두 입력합니다.

1. **반복**에서 **1회(Once)**를 선택합니다.

1. (선택 사항) **시작 시간**, **종료 시간** 또는 두 가지 모두에 대해 날짜와 시간을 선택합니다.

1. **생성(Create)**을 선택합니다.

**반복되는 예약된 작업을 생성하려면 다음을 수행하세요.**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택합니다.

1. 화면 하단 근처의 **예약된 조정** 탭을 선택합니다. 스팟 플릿에 대한 링크를 선택한 경우에는 탭이 없습니다. 대신 **예약된 조정** 섹션이 나타날 때까지 아래로 스크롤합니다.

1. **이름**에서 예약된 작업의 이름을 지정합니다.

1. **최소 용량**, **최대 용량** 또는 두 가지 모두 입력합니다.

1. [**반복(Recurrence)**]에서 사전 정의된 일정(예: [**매일(Every day)**]) 중 하나를 선택하거나 [**사용자 지정(Custom)**]을 선택하고 cron 표현식을 입력합니다. 예약된 조정에서 지원하는 cron 표현식에 대한 자세한 내용은 *Amazon EventBridge 사용 설명서*의 [Cron expressions](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-scheduled-rule-pattern.html#eb-cron-expressions)를 참조하세요.

1. (선택 사항) **시작 시간**, **종료 시간** 또는 두 가지 모두에 대해 날짜와 시간을 선택합니다.

1. **제출**을 선택합니다.

**예약된 작업을 편집하려면**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택합니다.

1. 화면 하단 근처의 **예약된 조정** 탭을 선택합니다. 스팟 플릿에 대한 링크를 선택한 경우에는 탭이 없습니다. 대신 **예약된 조정** 섹션이 나타날 때까지 아래로 스크롤합니다.

1. 예약된 작업을 선택한 다음, **작업**, **편집**을 선택합니다.

1. 필요한 변경을 수행하고 **제출**을 선택합니다.

**예약된 작업을 삭제하려면**

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

1. 탐색 창에서 **스팟 요청**을 선택합니다.

1. 스팟 플릿 요청을 선택합니다.

1. 화면 하단 근처의 **예약된 조정** 탭을 선택합니다. 스팟 플릿에 대한 링크를 선택한 경우에는 탭이 없습니다. 대신 **예약된 조정** 섹션이 나타날 때까지 아래로 스크롤합니다.

1. 예약된 작업을 선택한 다음, **작업**, **삭제**를 선택합니다.

1. 확인 메시지가 나타나면 **삭제**를 선택합니다.

**AWS CLI를 사용하여 예약된 조정을 관리하려면**

다음 명령을 사용합니다.
+ [put-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scheduled-action.html)
+ [describe-scheduled-actions](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scheduled-actions.html)
+ [delete-scheduled-action](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scheduled-action.html)

# EC2 플릿 또는 스팟 플릿 모니터링
<a name="fleet-monitor"></a>

최적의 성능을 유지하고 신뢰성을 보장하려면 EC2 Fleet 또는 스팟 플릿을 효과적으로 모니터링하는 것이 필수적입니다. 이 주제에서 다루는 Amazon CloudWatch와 Amazon EventBridge를 비롯하여 이를 달성하는 데 도움이 되는 다양한 도구가 있습니다.

CloudWatch를 사용하여 지표를 수집 및 추적하고, 경보를 설정하고, 플릿 상태의 변화에 자동으로 대응할 수 있습니다.

EventBridge를 사용하면 플릿에서 발생하는 이벤트를 모니터링하고 프로그래밍 방식으로 대응할 수 있습니다. EventBridge에서 규칙을 정의하면 인스턴스 종료 또는 플릿 상태 변경과 같은 특정 플릿 이벤트에 대한 응답을 자동화하여 운영 효율성을 개선할 수 있습니다.

**Topics**
+ [CloudWatch를 사용하여 EC2 Fleet 또는 스팟 플릿 모니터링](ec2-fleet-cloudwatch-metrics.md)
+ [Amazon EventBridge를 사용하여 EC2 Fleet 또는 스팟 플릿에서 발생하는 이벤트를 모니터링하고 프로그래밍 방식으로 대응하세요.](monitor-ec2-fleet-using-eventbridge.md)

# CloudWatch를 사용하여 EC2 Fleet 또는 스팟 플릿 모니터링
<a name="ec2-fleet-cloudwatch-metrics"></a>

이 섹션에 설명하는 Amazon CloudWatch 지표를 사용하여 EC2 Fleet 또는 스팟 플릿을 모니터링할 수 있습니다.

**중요**  
정확성을 보장하기 위해, 이 측정치를 사용할 때는 세부 모니터링을 활성화하는 것이 좋습니다. 자세한 내용은 [EC2 인스턴스에 대한 세부 모니터링 관리](manage-detailed-monitoring.md) 섹션을 참조하세요.

CloudWatch 사용에 관한 자세한 내용은 [CloudWatch를 사용하여 인스턴스 모니터링](using-cloudwatch.md)의 내용을 참조하세요.

## EC2 Fleet 및 스팟 플릿 지표
<a name="ec2-fleet-metrics"></a>

`AWS/EC2Spot` 네임스페이스에는 플릿에 대한 다음 지표와 플릿의 스팟 인스턴스에 대한 CloudWatch 지표가 포함되어 있습니다. 자세한 내용은 [인스턴스 지표](viewing_metrics_with_cloudwatch.md#ec2-cloudwatch-metrics) 섹션을 참조하세요.


| 측정치 | 설명 | 
| --- | --- | 
| AvailableInstancePoolsCount |  플릿 요청에 지정된 스팟 용량 풀입니다. 단위: 개  | 
| BidsSubmittedForCapacity |  Amazon EC2가 플릿 요청을 제출한 용량입니다. 단위: 개  | 
| EligibleInstancePoolCount |  플릿 요청에 지정되어 Amazon EC2가 요청을 이행할 수 있는 스팟 용량 풀입니다. 사용자가 지불하려는 스팟 인스턴스 최대 가격이 스팟 가격보다 낮거나 스팟 가격이 온디맨드 인스턴스 가격보다 높은 풀에서는 Amazon EC2가 요청을 이행하지 않습니다. 단위: 개수  | 
| FulfilledCapacity |  Amazon EC2가 달성한 용량. 단위: 개  | 
| MaxPercentCapacityAllocation |  플릿 요청에 지정된 모든 플릿 풀에 걸친 `PercentCapacityAllocation`의 최댓값입니다. 단위: 백분율  | 
| PendingCapacity |  `TargetCapacity`와 `FulfilledCapacity`의 차이점. 단위: 개수  | 
| PercentCapacityAllocation |  지정된 차원의 스팟 용량 풀에 할당된 용량. 모든 스팟 용량 풀에 기록된 최댓값을 얻으려면 `MaxPercentCapacityAllocation`을 사용하세요. 단위: 백분율  | 
| TargetCapacity |  플릿 요청의 목표 용량입니다. 단위: 개  | 
| TerminatingCapacity |  프로비저닝된 용량이 목표 용량보다 커서 종료되는 용량입니다. 단위: 개수  | 

수치 측정 단위가 `Count`(수)인 경우, 가장 유용한 통계는 `Average`(평균)입니다.

## EC2 Fleet 및 스팟 플릿 차원
<a name="ec2-fleet-dimensions"></a>

플릿에 대한 데이터를 필터링하려면 다음 차원을 사용합니다.


| 측정 기준 | 설명 | 
| --- | --- | 
| AvailabilityZone |  가용 영역별로 데이터를 필터링합니다.  | 
| FleetRequestId |  플릿 요청별로 데이터를 필터링합니다.  | 
| InstanceType |  인스턴스 유형별로 데이터를 필터링합니다.  | 

## EC2 Fleet 또는 스팟 플릿에 대한 CloudWatch 지표 보기
<a name="view-ec2-fleet-metrics"></a>

Amazon CloudWatch 콘솔을 사용하여 플릿에 대한 CloudWatch 지표를 볼 수 있습니다. 이 측정치들은 모니터링 그래프로 표시됩니다. 플릿이 활성 상태가 되면 이 그래프에 데이터 포인트가 표시됩니다.

측정치는 먼저 네임스페이스별로 그룹화된 다음, 각 네임스페이스 내에서 다양한 차원 조합별로 그룹화됩니다. 예를 들어 모든 플릿 지표를 보거나 플릿 요청 ID, 인스턴스 유형 또는 가용 영역별로 그룹화된 플릿 지표를 볼 수 있습니다.

**플릿 지표 보기**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **지표**를 확장한 다음 **모든 지표**를 선택합니다.

1. **EC2 스팟** 네임스페이스를 선택합니다.
**참고**  
**EC2 스팟** 네임스페이스가 표시되지 않는 경우 두 가지 이유가 있습니다. 리전에서 EC2 Fleet 또는 스팟 플릿을 사용하지 않았습니다. 사용 중인 AWS 서비스만 Amazon CloudWatch에 지표를 보냅니다. 또는 리전에서 EC2 Fleet 또는 스팟 플릿을 사용한 적이 있지만 지난 2주 동안 사용하지 않은 경우 네임스페이스가 표시되지 않습니다.

1. 측정치를 차원을 기준으로 필터링하려면 다음 중 하나를 선택하세요.
   + **플릿 요청 지표** – 플릿 요청으로 그룹화
   + **가용 영역 기준** – 플릿 요청 및 가용 영역으로 그룹화
   + **인스턴스 유형 기준** - 플릿 요청 및 인스턴스 유형으로 그룹화
   + **가용 영역/인스턴스 유형 기준** - 플릿 요청, 가용 영역 및 인스턴스 유형으로 그룹화

1. 지표의 데이터를 보려면 지표 옆의 확인란을 선택합니다.

# Amazon EventBridge를 사용하여 EC2 Fleet 또는 스팟 플릿에서 발생하는 이벤트를 모니터링하고 프로그래밍 방식으로 대응하세요.
<a name="monitor-ec2-fleet-using-eventbridge"></a>

EC2 Fleet 또는 스팟 플릿 상태가 변경되면 플릿에서 알림을 보냅니다. 알림은 Amazon EventBridge로 전송되는 이벤트(이전의 Amazon CloudWatch Events) 형태로 제공됩니다. 이벤트는 최선의 작업을 기반으로 발생됩니다.

Amazon EventBridge를 사용하여 이벤트에 대한 응답으로 프로그래밍 동작을 트리거하는 규칙을 생성할 수 있습니다. 예를 들어, 두 개의 EventBridge 규칙을 생성할 수 있습니다. 하나는 플릿 상태가 변경될 때 트리거되고, 다른 하나는 플릿의 인스턴스가 종료될 때 트리거됩니다. 이 예제에서는 플릿 상태가 변경되면 규칙이 SNS 주제를 호출하여 사용자에게 이메일 알림을 보내도록 첫 번째 규칙을 구성할 수 있습니다. 플릿의 인스턴스가 종료되면 두 번째 규칙이 Lambda 함수를 호출하여 새 인스턴스를 시작하도록 두 번째 규칙을 구성할 수 있습니다.

**참고**  
`maintain` 및 `request` 유형의 플릿에서만 이벤트가 생성됩니다. `instant` 유형 플릿은 동기식 일회성 요청을 제출하고 응답에서 플릿 상태를 즉시 알 수 있으므로 이벤트가 생성되지 않습니다. Amazon EventBridge를 사용하여 플릿 이벤트를 모니터링하려면 요청 유형이 `maintain` 또는 `request`여야 합니다.

플릿의 이벤트 기록을 설명하는 방법에 대한 지침은 [EC2 Fleet의 이벤트 기록 설명](describe-ec2-fleet.md#describe-ec2-fleet-event-history) 섹션을 참조하세요.

**Topics**
+ [EC2 Fleet 또는 스팟 플릿 이벤트를 모니터링하는 Amazon EventBridge 규칙 생성](#fleet_create-eventbridge-rules)
+ [EC2 Fleet 이벤트 유형](#ec2-fleet-event-types)
+ [스팟 플릿 이벤트 유형](#spot-fleet-event-types)

## EC2 Fleet 또는 스팟 플릿 이벤트를 모니터링하는 Amazon EventBridge 규칙 생성
<a name="fleet_create-eventbridge-rules"></a>

EC2 Fleet 또는 스팟 플릿에 대한 상태 변경 알림이 생성되면 해당 알림은 JSON 파일 형식의 이벤트로 Amazon EventBridge에 전송됩니다. EventBridge에서 규칙에 정의된 패턴과 일치하는 이벤트 패턴이 감지되는 경우, EventBridge는 규칙에 정의된 대상을 호출합니다.

일치하는 이벤트 패턴을 기반으로 작업을 자동화하는 EventBridge 규칙을 작성할 수 있습니다.

다음과 같은 이벤트 필드는 규칙에 정의된 이벤트 패턴을 형성합니다.

`"source": "aws.ec2fleet"`  
EC2 Fleet에서 시작된 이벤트를 식별합니다.

`"detail-type": "EC2 Fleet State Change"`  
이벤트 유형을 식별합니다.

`"detail": { "sub-type": "submitted" }`  
이벤트 하위 유형을 식별합니다.

EC2 Fleet 또는 스팟 플릿 이벤트 목록 및 이벤트 데이터 예는 [EC2 Fleet 이벤트 유형](#ec2-fleet-event-types) 및 [스팟 플릿 이벤트 유형](#spot-fleet-event-types) 섹션을 참조하세요.

**Topics**
+ [알림을 보내는 EventBridge 규칙 생성](#eventbridge-send-notification)
+ [Lambda 함수를 트리거하는 EventBridge 규칙 생성](#eventbridge-trigger-lambda)

### 알림을 보내는 EventBridge 규칙 생성
<a name="eventbridge-send-notification"></a>

다음 예제에서는 Amazon EC2에서 EC2 Fleet 상태 변경 알림이 생성될 때마다 이메일, 문자 메시지 또는 모바일 푸시 알림을 보내는 EventBridge 규칙을 생성합니다. 이 예제의 신호는 규칙에 정의된 작업을 트리거하는 `EC2 Fleet State Change` 이벤트로 생성됩니다.

**사전 조건**  
EventBridge 규칙을 생성하기 전에 이메일, 문자 메시지 또는 모바일 푸시 알림에 대한 Amazon SNS 주제를 생성해야 합니다.

**EC2 Fleet 상태가 변경될 때 알림을 보내는 EventBridge 규칙을 생성하려면**

1. [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)에서 Amazon EventBridge 콘솔을 엽니다.

1. [**규칙 생성(Create rule)**]을 선택합니다.

1. **규칙 세부 정보 정의(Define rule detail)**에 대해 다음을 수행합니다.

   1. 규칙의 **이름**을 입력하고 선택적으로 설명을 입력합니다.

      규칙은 동일한 리전과 동일한 이벤트 버스의 다른 규칙과 동일한 이름을 가질 수 없습니다.

   1. **이벤트 버스(Event bus)**에서 **기본값(default)**을 선택합니다. 계정의 AWS 서비스가 이벤트를 생성하면 항상 계정의 기본 이벤트 버스로 이동합니다.

   1. **규칙 유형(Rule type)**에서 **이벤트 패턴이 있는 규칙(Rule with an event pattern)**을 생성합니다.

   1. **다음**을 선택합니다.

1. **이벤트 패턴 빌드(Build event pattern)**에서 다음을 수행합니다.

   1. **이벤트 소스(Event source)**에서 **AWS 이벤트 또는 EventBridge 파트너 이벤트( events or EventBridge partner events)**를 선택합니다.

   1. **이벤트 패턴(Event pattern)**의 경우 이 예에서는 `EC2 Fleet Instance Change` 이벤트와 일치하도록 다음 이벤트 패턴을 지정합니다.

      ```
      {
       "source": ["aws.ec2fleet"],
       "detail-type": ["EC2 Fleet Instance Change"]
      }
      ```

      이벤트 패턴을 추가하려면 다음과 같이 **이벤트 패턴 양식(Event pattern form)**을 선택하여 템플릿을 사용하거나 **사용자 정의 패턴(JSON 편집기)(Custom pattern (JSON editor))**을 선택하여 고유한 패턴을 지정할 수 있습니다.

      1. 템플릿을 사용하여 이벤트 패턴을 생성하려면 다음을 수행하세요.

         1. **이벤트 패턴 양식(Event pattern form)**을 선택합니다.

         1. **이벤트 소스(Event source)**에서 **AWS 서비스(services)**를 선택합니다.

         1. **AWS 서비스(Service)**에서 **EC2 플릿(EC2 Fleet)**을 선택합니다.

         1. **이벤트 유형(Event type)**에서 **EC2 플릿 인스턴스 변경(EC2 Fleet Instance Change)**을 선택합니다.

         1. 템플릿을 사용자 지정하려면 **패턴 편집(Edit pattern)**을 선택하고 예시 이벤트 패턴과 일치하도록 변경합니다.

      1. (대안) 사용자 정의 이벤트 패턴을 지정하려면 다음을 수행하세요.

         1. **사용자 정의 패턴(JSON 편집기)**을 선택합니다.

         1. **이벤트 패턴(Event pattern)** 상자에서 이 예시의 이벤트 패턴을 추가합니다.

   1. **다음**을 선택합니다.

1. **대상 선택(Select target(s))**에서 다음을 수행합니다.

   1. **대상 유형(Target types)**에서 **AWS 서비스(service)**를 선택합니다.

   1. **대상 선택(Select a target)**에서 **SNS 주제(SNS topic)**를 선택하여 이벤트가 발생할 때 이메일, 문자 메시지 또는 모바일 푸시 알림을 보내도록 합니다.

   1. [**주제(Topic)**]에서 기존 주제를 선택합니다. 먼저 Amazon SNS 콘솔을 사용하여 Amazon SNS 주제를 생성해야 합니다. 자세한 내용은 *Amazon Simple Notification Service 개발자 가이드*의 [A2P(Application-to-Person) 메시징에 Amazon SNS 사용](https://docs.aws.amazon.com//sns/latest/dg/sns-user-notifications.html)을 참조하세요.

   1. (선택 사항) **추가 설정(Additional settings)**에서 선택적으로 추가 설정을 구성할 수 있습니다. 자세한 설명은 *Amazon EventBridge 사용 설명서*의 [Creating Amazon EventBridge rules that react to events](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-create-rule.html)(이벤트에 응답하는 Amazon EventBridge 규칙 생성)(16단계)를 참조하세요.

   1. **다음**을 선택합니다.

1. (선택 사항) **태그(Tags)**에서 선택적으로 하나 이상의 태그를 규칙에 할당하고 **다음(Next)**을 선택할 수 있습니다.

1. **검토 및 생성(Review and create)**에서 다음을 수행합니다.

   1. 규칙의 세부 정보를 검토하고 필요에 따라 수정합니다.

   1. **규칙 생성**을 선택합니다.

자세한 내용은 Amazon EventBridge 사용 설명서**에서 [Amazon EventBridge 규칙](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html) 및 [Amazon EventBridge 이벤트 패턴](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)을 참조하세요.

### Lambda 함수를 트리거하는 EventBridge 규칙 생성
<a name="eventbridge-trigger-lambda"></a>

다음 예제에서는 Amazon EC2에서 인스턴스가 시작되는 경우 EC2 Fleet 인스턴스 변경 알림이 생성될 때마다 Lambda 함수를 트리거하는 EventBridge 규칙을 생성합니다. 이 예제의 신호는 규칙에서 정의한 작업을 트리거하는 하위 유형 `launched`인 `EC2 Fleet Instance Change` 이벤트로 전송됩니다.

EventBridge 규칙을 생성하기 전에 Lambda 함수를 생성해야 합니다.

**EventBridge 규칙에서 사용 Lambda 함수 생성**

1. [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)에서 AWS Lambda 콘솔을 엽니다.

1. **함수 생성(Create function)**을 선택합니다.

1. 함수 이름을 입력하고 코드를 구성한 다음 [**함수 생성(Create function)**]을 선택합니다.

   자세한 내용은 *AWS Lambda 개발자 가이드*의 [첫 Lambda 함수 생성](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)을 참조하세요.

**EC2 Fleet의 인스턴스 상태가 변경될 때 Lambda 함수를 트리거하는 EventBridge 규칙을 생성하려면**

1. [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)에서 Amazon EventBridge 콘솔을 엽니다.

1. [**규칙 생성(Create rule)**]을 선택합니다.

1. **규칙 세부 정보 정의(Define rule detail)**에 대해 다음을 수행합니다.

   1. 규칙의 **이름**을 입력하고 선택적으로 설명을 입력합니다.

      규칙은 동일한 리전과 동일한 이벤트 버스의 다른 규칙과 동일한 이름을 가질 수 없습니다.

   1. **이벤트 버스(Event bus)**에서 **기본값(default)**을 선택합니다. 계정의 AWS 서비스가 이벤트를 생성하면 항상 계정의 기본 이벤트 버스로 이동합니다.

   1. **규칙 유형(Rule type)**에서 **이벤트 패턴이 있는 규칙(Rule with an event pattern)**을 생성합니다.

   1. **다음**을 선택합니다.

1. **이벤트 패턴 빌드(Build event pattern)**에서 다음을 수행합니다.

   1. **이벤트 소스(Event source)**에서 **AWS 이벤트 또는 EventBridge 파트너 이벤트( events or EventBridge partner events)**를 선택합니다.

   1. **이벤트 패턴(Event pattern)**의 경우 이 예에서는 `EC2 Fleet Instance Change` 이벤트 및 `launched` 하위 유형과 일치하도록 다음 이벤트 패턴을 지정합니다.

      ```
      {
       "source": ["aws.ec2fleet"],
       "detail-type": ["EC2 Fleet Instance Change"],
       "detail": {
         "sub-type": ["launched"]
      }
      ```

      이벤트 패턴을 추가하려면 다음과 같이 **이벤트 패턴 양식(Event pattern form)**을 선택하여 템플릿을 사용하거나 **사용자 정의 패턴(JSON 편집기)(Custom pattern (JSON editor))**을 선택하여 고유한 패턴을 지정할 수 있습니다.

      1. 템플릿을 사용하여 이벤트 패턴을 생성하려면 다음을 수행하세요.

         1. **이벤트 패턴 양식(Event pattern form)**을 선택합니다.

         1. **이벤트 소스(Event source)**에서 **AWS 서비스(services)**를 선택합니다.

         1. **AWS 서비스(Service)**에서 **EC2 플릿(EC2 Fleet)**을 선택합니다.

         1. **이벤트 유형(Event type)**에서 **EC2 플릿 인스턴스 변경(EC2 Fleet Instance Change)**을 선택합니다.

         1. **패턴 편집(Edit pattern)**을 선택하고 예제 이벤트 패턴과 일치하도록 `"detail": {"sub-type": ["launched"]`를 추가합니다. 적절한 JSON 형식을 위해 앞의 대괄호(`]`) 뒤에 쉼표(`,`)를 삽입합니다.

      1. (대안) 사용자 정의 이벤트 패턴을 지정하려면 다음을 수행하세요.

         1. **사용자 정의 패턴(JSON 편집기)**을 선택합니다.

         1. **이벤트 패턴(Event pattern)** 상자에서 이 예시의 이벤트 패턴을 추가합니다.

   1. **다음**을 선택합니다.

1. **대상 선택(Select target(s))**에서 다음을 수행합니다.

   1. **대상 유형(Target types)**에서 **AWS 서비스(service)**를 선택합니다.

   1. **대상 선택(Select a target)**에서 **SNS 주제(SNS topic)**를 선택하여 이벤트가 발생할 때 이메일, 문자 메시지 또는 모바일 푸시 알림을 보내도록 합니다.

   1. **주제(Target)**에서 **Lambda 함수(Lambda function)**를 선택하고 **함수(Function)**에서 이벤트 발생 시 응답을 위해 생성한 함수를 선택합니다.

   1. (옵션) **추가 설정(Additional settings)**에서 선택적으로 추가 설정을 구성할 수 있습니다. 자세한 설명은 *Amazon EventBridge 사용 설명서*의 [Creating Amazon EventBridge rules that react to events](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-create-rule.html)(이벤트에 응답하는 Amazon EventBridge 규칙 생성)(16단계)를 참조하세요.

   1. **다음**을 선택합니다.

1. (선택 사항) **태그(Tags)**에서 선택적으로 하나 이상의 태그를 규칙에 할당하고 **다음(Next)**을 선택할 수 있습니다.

1. **검토 및 생성(Review and create)**에서 다음을 수행합니다.

   1. 규칙의 세부 정보를 검토하고 필요에 따라 수정합니다.

   1. **규칙 생성**을 선택합니다.

Lambda 함수를 생성하고, Lambda 함수를 실행하는 EventBridge 규칙을 생성하는 방법에 대한 자습서는 *AWS Lambda 개발자 가이드*의 [자습서: EventBridge를 사용하여 Amazon EC2 인스턴스의 상태 로깅](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-log-ec2-instance-state.html)을 참조하세요.

## EC2 Fleet 이벤트 유형
<a name="ec2-fleet-event-types"></a>

EC2 Fleet 이벤트 유형은 5가지입니다. 각 이벤트 유형에는 몇 가지 하위 유형이 있습니다.

**Topics**
+ [EC2 Fleet 상태 변경](#ec2-fleet-state-change)
+ [EC2 Fleet 스팟 인스턴스 요청 변경](#ec2-fleet-spot-instance-request-change)
+ [EC2 Fleet 인스턴스 변경](#ec2-fleet-instance-change)
+ [EC2 Fleet 정보](#ec2-fleet-info)
+ [EC2 Fleet 오류](#ec2-fleet-config-not-valid)

### EC2 Fleet 상태 변경
<a name="ec2-fleet-state-change"></a>

EC2 Fleet 상태가 변경될 때 EC2 Fleet은 `EC2 Fleet State Change` 이벤트를 Amazon EventBridge로 전송합니다.

다음은 이 이벤트의 예제 데이터입니다.

```
{
    "version": "0",
    "id": "715ed6b3-b8fc-27fe-fad6-528c7b8bf8a2",
    "detail-type": "EC2 Fleet State Change",
    "source": "aws.ec2fleet",
    "account": "123456789012",
    "time": "2020-11-09T09:00:20Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-598fb973-87b7-422d-be4d-6b0809bfff0a"
    ],
    "detail": {
        "sub-type": "active"
    }
}
```

`sub-type`에 대해 가능한 값은 다음과 같습니다.

`active`  
EC2 집합 요청이 확인되었으며 Amazon EC2가 실행 중인 인스턴스를 목표 개수만큼 유지하려고 시도하고 있습니다.

`deleted`  
EC2 집합 요청이 삭제되었고 실행 중인 인스턴스가 없습니다. EC2 Fleet은 인스턴스가 종료되고 2일 후에 삭제됩니다.

`deleted_running`  
EC2 Fleet 요청이 삭제되었고 추가 인스턴스를 시작하지 않습니다. 중단되거나 종료될 때까지 기존 인스턴스가 계속 실행됩니다. 그 요청은 모든 인스턴스가 중단 또는 종료될 때까지 계속 이 상태로 유지됩니다.

`deleted_terminating`  
EC2 집합 요청이 삭제되었고 해당 인스턴스를 종료하는 중입니다. 그 요청은 모든 인스턴스가 종료될 때까지 계속 이 상태로 유지됩니다.

`expired`  
EC2 Fleet 요청이 만료되었습니다. 요청이 `TerminateInstancesWithExpiration` 세트로 생성된 경우 후속 `terminated` 이벤트는 인스턴스가 종료되었음을 나타냅니다.

`modify_in_progress`  
EC2 집합 요청을 수정하고 있습니다. 그 요청은 수정이 완전히 처리될 때까지 계속 이 상태로 유지됩니다.

`modify_succeeded`  
EC2 Fleet 요청이 수정되었습니다.

`submitted`  
EC2 집합 요청을 평가 중이며 Amazon EC2에서 목표 개수의 인스턴스를 시작하기 위해 준비 중입니다.

`progress`  
EC2 Fleet 요청이 이행되는 중입니다.

### EC2 Fleet 스팟 인스턴스 요청 변경
<a name="ec2-fleet-spot-instance-request-change"></a>

플릿의 스팟 인스턴스 요청 상태가 변경될 때 EC2 Fleet은 `EC2 Fleet Spot Instance Request Change` 이벤트를 Amazon EventBridge로 보냅니다.

다음은 이 이벤트의 예제 데이터입니다.

```
{
    "version": "0",
    "id": "19331f74-bf4b-a3dd-0f1b-ddb1422032b9",
    "detail-type": "EC2 Fleet Spot Instance Request Change",
    "source": "aws.ec2fleet",
    "account": "123456789012",
    "time": "2020-11-09T09:00:05Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-83fd4e48-552a-40ef-9532-82a3acca5f10"
    ],
    "detail": {
        "spot-instance-request-id": "sir-rmqske6h",
        "description": "SpotInstanceRequestId sir-rmqske6h, PreviousState: cancelled_running",
        "sub-type": "cancelled"
    }
}
```

`sub-type`에 대해 가능한 값은 다음과 같습니다.

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

`cancelled`  
스팟 인스턴스 요청을 취소했거나 스팟 인스턴스 요청이 만료되었습니다.

`disabled`  
스팟 인스턴스를 중지했습니다.

`submitted`  
스팟 인스턴스 요청을 제출했습니다.

### EC2 Fleet 인스턴스 변경
<a name="ec2-fleet-instance-change"></a>

플릿의 인스턴스가 상태가 변경될 때 EC2 Fleet은 `EC2 Fleet Instance Change` 이벤트를 Amazon EventBridge로 보냅니다.

다음은 이 이벤트의 예제 데이터입니다.

```
{
    "version": "0",
    "id": "542ce428-c8f1-0608-c015-e8ed6522c5bc",
    "detail-type": "EC2 Fleet Instance Change",
    "source": "aws.ec2fleet",
    "account": "123456789012",
    "time": "2020-11-09T09:00:23Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-598fb973-87b7-422d-be4d-6b0809bfff0a"
    ],
    "detail": {
        "instance-id": "i-0c594155dd5ff1829",
        "description": "{\"instanceType\":\"c5.large\",\"image\":\"ami-6057e21a\",\"productDescription\":\"Linux/UNIX\",\"availabilityZone\":\"us-east-1d\"}",
        "sub-type": "launched"
    }
}
```

`sub-type`에 대해 가능한 값은 다음과 같습니다.

`launched`  
새 인스턴스가 시작되었습니다.

`terminated`  
인스턴스가 종료되었습니다.

`termination_notified`  
스케일 다운 중에 Amazon EC2에 의해 스팟 인스턴스가 종료될 때 플릿의 목표 용량이 감소(예: 목표 용량 4에서 목표 용량 3으로)되었을 때 인스턴스 종료 알림이 전송되었습니다.

### EC2 Fleet 정보
<a name="ec2-fleet-info"></a>

이행 중에 오류가 발생할 때 EC2 집합은 `EC2 Fleet Information` 이벤트를 Amazon EventBridge로 보냅니다. 정보 이벤트는 플릿에서 목표 용량을 이행하려는 시도를 차단하지 않습니다.

다음은 이 이벤트의 예제 데이터입니다.

```
{
    "version": "0",
    "id": "76529817-d605-4571-7224-d36cc1b2c0c4",
    "detail-type": "EC2 Fleet Information",
    "source": "aws.ec2fleet",
    "account": "123456789012",
    "time": "2020-11-09T08:17:07Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-8becf5fe-bb9e-415d-8f54-3fa5a8628b91"
    ],
    "detail": {
        "description": "c4.xlarge, ami-0947d2ba12ee1ff75, Linux/UNIX, us-east-1a, Spot price in either SpotFleetRequestConfigData or SpotFleetLaunchSpecification or LaunchTemplate or LaunchTemplateOverrides is less than Spot market price $0.0619",
        "sub-type": "launchSpecUnusable"
    }
}
```

`sub-type`에 대해 가능한 값은 다음과 같습니다.

`fleetProgressHalted`  
모든 시작 사양의 요금이 스팟 요금보다 낮기 때문에 모든 시작 사양의 요금이 유효하지 않습니다(모든 시작 사양이 `launchSpecUnusable` 이벤트 생성). 스팟 요금이 변경되면 시작 사양이 유효해질 수 있습니다.

`launchSpecTemporarilyBlacklisted`  
구성이 유효하지 않으며 인스턴스 시작하려는 시도가 여러 번 실패했습니다. 자세한 내용은 이벤트 설명을 참조하세요.

`launchSpecUnusable`  
시작 사양의 요금이 스팟 요금보다 낮기 때문에 시작 사양의 요금이 유효하지 않습니다.

`registerWithLoadBalancersFailed`  
로드 밸런서에 인스턴스를 등록하지 못했습니다. 자세한 내용은 이벤트 설명을 참조하세요.

### EC2 Fleet 오류
<a name="ec2-fleet-config-not-valid"></a>

이행 중에 오류가 발생할 때 EC2 집합은 `EC2 Fleet Error` 이벤트를 Amazon EventBridge로 보냅니다. 오류 이벤트는 플릿에서 목표 용량을 이행하려는 시도를 차단합니다.

다음은 이 이벤트의 예제 데이터입니다.

```
{
    "version": "0",
    "id": "69849a22-6d0f-d4ce-602b-b47c1c98240e",
    "detail-type": "EC2 Fleet Error",
    "source": "aws.ec2fleet",
    "account": "123456789012",
    "time": "2020-10-07T01:44:24Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-9bb19bc6-60d3-4fd2-ae47-d33e68eafa08"
    ],
    "detail": {
        "description": "m3.large, ami-00068cd7555f543d5, Linux/UNIX: IPv6 is not supported for the instance type 'm3.large'. ",
        "sub-type": "spotFleetRequestConfigurationInvalid"
    }
}
```

`sub-type`에 대해 가능한 값은 다음과 같습니다.

`iamFleetRoleInvalid`  
EC2 Fleet에 인스턴스를 시작하거나 종료하는 데 필요한 권한이 없습니다.

`allLaunchSpecsTemporarilyBlacklisted`  
유효한 구성이 없으며 인스턴스를 시작하려는 시도가 여러 번 실패했습니다. 자세한 내용은 이벤트 설명을 참조하세요.

`spotInstanceCountLimitExceeded`  
시작할 수 있는 스팟 인스턴스 수가 한도에 도달했습니다.

`spotFleetRequestConfigurationInvalid`  
구성이 유효하지 않습니다. 자세한 내용은 이벤트 설명을 참조하세요.

## 스팟 플릿 이벤트 유형
<a name="spot-fleet-event-types"></a>

스팟 플릿 이벤트 유형은 5가지입니다. 각 이벤트 유형에는 몇 가지 하위 유형이 있습니다.

**Topics**
+ [EC2 스팟 플릿 상태 변경](#spot-fleet-state-change)
+ [EC2 스팟 플릿 스팟 인스턴스 요청 변경](#spot-fleet-spot-instance-request-change)
+ [EC2 스팟 플릿 인스턴스 변경](#spot-fleet-instance-change)
+ [EC2 스팟 플릿 정보](#spot-fleet-info)
+ [EC2 스팟 플릿 오류](#spot-fleet-config-not-valid)

### EC2 스팟 플릿 상태 변경
<a name="spot-fleet-state-change"></a>

스팟 플릿의 상태가 변경될 때 스팟 플릿은 `EC2 Spot Fleet State Change` 이벤트를 Amazon EventBridge로 보냅니다.

다음은 이 이벤트의 예제 데이터입니다.

```
{
    "version": "0",
    "id": "d1af1091-6cc3-2e24-203a-3b870e455d5b",
    "detail-type": "EC2 Spot Fleet State Change",
    "source": "aws.ec2spotfleet",
    "account": "123456789012",
    "time": "2020-11-09T08:57:06Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-4b6d274d-0cea-4b2c-b3be-9dc627ad1f55"
    ],
    "detail": {
        "sub-type": "submitted"
    }
}
```

`sub-type`에 대해 가능한 값은 다음과 같습니다.

`active`  
스팟 플릿 요청이 확인되었으며 Amazon EC2가 실행 중인 인스턴스의 목표 개수를 유지하려고 시도하고 있습니다.

`cancelled`  
스팟 플릿 요청이 취소되었고 실행 중인 인스턴스가 없습니다. 스팟 플릿은 인스턴스가 종료되고 2일 후에 삭제됩니다.

`cancelled_running`  
스팟 플릿 요청이 취소되었고 추가 인스턴스를 시작하지 않습니다. 중단되거나 종료될 때까지 기존 인스턴스가 계속 실행됩니다. 그 요청은 모든 인스턴스가 중단 또는 종료될 때까지 계속 이 상태로 유지됩니다.

`cancelled_terminating`  
스팟 플릿 요청이 취소되었고 해당 인스턴스를 종료하는 중입니다. 그 요청은 모든 인스턴스가 종료될 때까지 계속 이 상태로 유지됩니다.

`expired`  
스팟 플릿 요청이 만료되었습니다. 요청이 `TerminateInstancesWithExpiration` 세트로 생성된 경우 후속 `terminated` 이벤트는 인스턴스가 종료되었음을 나타냅니다.

`modify_in_progress`  
스팟 집합 요청이 수정되고 있습니다. 그 요청은 수정이 완전히 처리될 때까지 계속 이 상태로 유지됩니다.

`modify_succeeded`  
스팟 플릿 요청이 수정되었습니다.

`submitted`  
스팟 플릿 요청을 평가 중이며 Amazon EC2에서 목표 개수의 인스턴스를 시작하기 위해 준비 중입니다.

`progress`  
스팟 플릿 요청이 이행되는 중입니다.

### EC2 스팟 플릿 스팟 인스턴스 요청 변경
<a name="spot-fleet-spot-instance-request-change"></a>

스팟 플릿은 플릿의 스팟 인스턴스 요청 상태가 변경될 때 `EC2 Spot Fleet Spot Instance Request Change` 이벤트를 Amazon EventBridge로 보냅니다.

다음은 이 이벤트의 예제 데이터입니다.

```
{
    "version": "0",
    "id": "cd141ef0-14af-d670-a71d-fe46e9971bd2",
    "detail-type": "EC2 Spot Fleet Spot Instance Request Change",
    "source": "aws.ec2spotfleet",
    "account": "123456789012",
    "time": "2020-11-09T08:53:21Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-a98d2133-941a-47dc-8b03-0f94c6852ad1"
    ],
    "detail": {
        "spot-instance-request-id": "sir-a2w9gc5h",
        "description": "SpotInstanceRequestId sir-a2w9gc5h, PreviousState: cancelled_running",
        "sub-type": "cancelled"
    }
}
```

`sub-type`에 대해 가능한 값은 다음과 같습니다.

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

`cancelled`  
스팟 인스턴스 요청을 취소했거나 스팟 인스턴스 요청이 만료되었습니다.

`disabled`  
스팟 인스턴스를 중지했습니다.

`submitted`  
스팟 인스턴스 요청을 제출했습니다.

### EC2 스팟 플릿 인스턴스 변경
<a name="spot-fleet-instance-change"></a>

플릿의 인스턴스가 상태가 변경될 때 스팟 플릿은 `EC2 Spot Fleet Instance Change` 이벤트를 Amazon EventBridge로 보냅니다.

다음은 이 이벤트의 예제 데이터입니다.

```
{
    "version": "0",
    "id": "11591686-5bd7-bbaa-eb40-d46529c2710f",
    "detail-type": "EC2 Spot Fleet Instance Change",
    "source": "aws.ec2spotfleet",
    "account": "123456789012",
    "time": "2020-11-09T07:25:02Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-c8a764a4-bedc-4b62-af9c-0095e6e3ba61"
    ],
    "detail": {
        "instance-id": "i-08b90df1e09c30c9b",
        "description": "{\"instanceType\":\"r4.2xlarge\",\"image\":\"ami-032930428bf1abbff\",\"productDescription\":\"Linux/UNIX\",\"availabilityZone\":\"us-east-1a\"}",
        "sub-type": "launched"
    }
}
```

`sub-type`에 대해 가능한 값은 다음과 같습니다.

`launched`  
새 인스턴스가 시작되었습니다.

`terminated`  
인스턴스가 종료되었습니다.

`termination_notified`  
스케일 다운 중에 Amazon EC2에 의해 스팟 인스턴스가 종료될 때 플릿의 목표 용량이 감소(예: 목표 용량 4에서 목표 용량 3으로)되었을 때 인스턴스 종료 알림이 전송되었습니다.

### EC2 스팟 플릿 정보
<a name="spot-fleet-info"></a>

이행 중에 오류가 발생할 때 스팟 플릿은 `EC2 Spot Fleet Information` 이벤트를 Amazon EventBridge로 보냅니다. 정보 이벤트는 플릿에서 목표 용량을 이행하려는 시도를 차단하지 않습니다.

다음은 이 이벤트의 예제 데이터입니다.

```
{
    "version": "0",
    "id": "73a60f70-3409-a66c-635c-7f66c5f5b669",
    "detail-type": "EC2 Spot Fleet Information",
    "source": "aws.ec2spotfleet",
    "account": "123456789012",
    "time": "2020-11-08T20:56:12Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-2531ea06-af18-4647-8757-7d69c94971b1"
    ],
    "detail": {
        "description": "r3.8xlarge, ami-032930428bf1abbff, Linux/UNIX, us-east-1a, Spot bid price is less than Spot market price $0.5291",
        "sub-type": "launchSpecUnusable"
    }
}
```

`sub-type`에 대해 가능한 값은 다음과 같습니다.

`fleetProgressHalted`  
모든 시작 사양의 요금이 스팟 요금보다 낮기 때문에 모든 시작 사양의 요금이 유효하지 않습니다(모든 시작 사양이 `launchSpecUnusable` 이벤트 생성). 스팟 요금이 변경되면 시작 사양이 유효해질 수 있습니다.

`launchSpecTemporarilyBlacklisted`  
구성이 유효하지 않으며 인스턴스 시작하려는 시도가 여러 번 실패했습니다. 자세한 내용은 이벤트 설명을 참조하세요.

`launchSpecUnusable`  
시작 사양의 요금이 스팟 요금보다 낮기 때문에 시작 사양의 요금이 유효하지 않습니다.

`registerWithLoadBalancersFailed`  
로드 밸런서에 인스턴스를 등록하지 못했습니다. 자세한 내용은 이벤트 설명을 참조하세요.

### EC2 스팟 플릿 오류
<a name="spot-fleet-config-not-valid"></a>

이행 중에 오류가 발생할 때 스팟 플릿은 `EC2 Spot Fleet Error` 이벤트를 Amazon EventBridge로 보냅니다. 오류 이벤트는 플릿에서 목표 용량을 이행하려는 시도를 차단합니다.

다음은 이 이벤트의 예제 데이터입니다.

```
{
    "version": "0",
    "id": "10adc4e7-675c-643e-125c-5bfa1b1ba5d2",
    "detail-type": "EC2 Spot Fleet Error",
    "source": "aws.ec2spotfleet",
    "account": "123456789012",
    "time": "2020-11-09T06:56:07Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-38725d30-25f1-4f30-83ce-2907c56dba17"
    ],
    "detail": {
        "description": "r4.2xlarge, ami-032930428bf1abbff, Linux/UNIX: The associatePublicIPAddress parameter can only be specified for the network interface with DeviceIndex 0. ",
        "sub-type": "spotFleetRequestConfigurationInvalid"
    }
}
```

`sub-type`에 대해 가능한 값은 다음과 같습니다.

`iamFleetRoleInvalid`  
스팟 플릿에 인스턴스를 시작하거나 종료하는 데 필요한 권한이 없습니다.

`allLaunchSpecsTemporarilyBlacklisted`  
유효한 구성이 없으며 인스턴스를 시작하려는 시도가 여러 번 실패했습니다. 자세한 내용은 이벤트 설명을 참조하세요.

`spotInstanceCountLimitExceeded`  
시작할 수 있는 스팟 인스턴스 수가 한도에 도달했습니다.

`spotFleetRequestConfigurationInvalid`  
구성이 유효하지 않습니다. 자세한 내용은 이벤트 설명을 참조하세요.

# EC2 플릿에 대한 튜토리얼
<a name="fleet-tutorials"></a>

EC2 플릿을 구성하는 방법에는 여러 가지가 있습니다. 선택하는 구성은 구체적인 사용 사례에 따라 다릅니다.

다음 튜토리얼에서는 몇 가지 가능한 사용 사례를 다루고 이를 구현하는 데 필요한 태스크를 제공합니다.


| 사용 사례: | 튜토리얼 링크 | 
| --- | --- | 
|  **인스턴스 가중치를 사용하여 EC2 플릿의 가용성과 성능을 관리할 수 있습니다.** 인스턴스 가중치를 사용하면 EC2 플릿의 각 인스턴스 유형에 가중치를 할당하여 서로 상대적인 컴퓨팅 용량과 성능을 반영합니다. 가중치를 기반으로 플릿은 원하는 목표 용량을 충족할 수 있는 한 지정된 인스턴스 유형을 원하는 대로 조합하여 사용할 수 있습니다.  | [튜토리얼: 인스턴스 가중치를 사용하도록 EC2 플릿 구성](ec2-fleet-instance-weighting-walkthrough.md) | 
|  **온디맨드 용량을 사용하여 피크 기간 동안 가용성을 보장하면서 저렴한 비용으로 스팟 용량을 추가로 활용할 수 있습니다.** 온디맨드 인스턴스를 기본 용량으로 사용하도록 EC2 플릿을 구성하여 피크 기간 동안 가용 용량을 확보합니다. 또한 스팟 인스턴스에 일부 용량을 할당하여 할인된 가격 혜택을 받을 수 있습니다. 단, Amazon EC2에 용량이 다시 필요할 경우 스팟 인스턴스가 중단될 수 있다는 점에 유의하세요.  | [튜토리얼: 온디맨드 인스턴스를 기본 용량으로 사용하도록 EC2 플릿 구성](ec2-fleet-on-demand-walkthrough.md) | 
|  **용량 예약을 사용하여 온디맨드 인스턴스용 컴퓨팅 용량을 예약할 수 있습니다.** 먼저 온디맨드 인스턴스를 시작할 때 `targeted` 용량 예약을 사용하도록 EC2 플릿을 구성합니다. 용량 요구 사항이 엄격하고 특정 수준의 장기 또는 단기 용량 보증이 요구되는 비즈니스 크리티컬 워크로드를 실행하는 경우, 필요할 때 언제든지 필요한 기간 동안 Amazon EC2 용량에 액세스할 수 있도록 용량 예약을 생성하는 것이 좋습니다.  | [튜토리얼: 대상으로 지정된 용량 예약을 사용하여 온디맨드 인스턴스를 시작하도록 EC2 플릿 구성](ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough.md) | 
|  **용량 블록을 사용하여 인기가 높은 GPU 인스턴스를 ML 워크로드에 맞게 예약할 수 있습니다.** 인스턴스를 용량 블록으로 시작하도록 EC2 플릿을 구성합니다.  | [튜토리얼: 인스턴스를 용량 블록으로 시작하도록 EC2 플릿을 구성](ec2-fleet-launch-instances-capacity-blocks-walkthrough.md) | 
|  **AWS 조직 전체에서 유휴 용량의 용도를 일시적으로 변경하고 비용을 절감하려면 중단 가능한 용량 예약을 사용합니다.** AWS 조직 내 예비 용량을 나타내는 중단 가능한 용량 예약으로 인스턴스를 시작하도록 EC2 플릿을 구성합니다. 용량 소유자는 언제든 용량을 회수할 수 있습니다. 회수되면 EC2가 2분 전에 고지하고 인스턴스를 종료합니다.  | [튜토리얼: 인스턴스를 중단 가능한 용량 예약으로 시작하도록 EC2 플릿을 구성](ec2-fleet-launch-instances-interruptible-cr-walkthrough.md) | 

# 튜토리얼: 인스턴스 가중치를 사용하도록 EC2 플릿 구성
<a name="ec2-fleet-instance-weighting-walkthrough"></a>

이 자습서에서는 Example Corp이라는 가상의 회사를 통해 인스턴스 가중치를 사용하여 EC2 집합을 요청하는 프로세스를 설명합니다.

## 목표
<a name="ec2-fleet-instance-weighting-walkthrough-objective"></a>

제약 회사인 Example Corp은 암 퇴치 효과가 있는 화합물을 검출하는 데 Amazon EC2의 컴퓨팅 능력을 사용하려고 합니다.

## 계획
<a name="ec2-fleet-instance-weighting-walkthrough-planning"></a>

Example Corp은 먼저 [스팟 모범 사례](https://aws.amazon.com/ec2/spot/getting-started/#bestpractices)를 살펴봅니다. 그런 다음 Example Corp이 EC2 집합에 대해 다음과 같은 요구 사항을 결정합니다.

**인스턴스 유형**  
Example Corp은 최소 60GB 메모리와 8개의 가상 CPU(vCPU)로 최적의 성능을 자랑하는 컴퓨팅 및 메모리 집약적 애플리케이션을 사용하고 있습니다. 하지만 최저 가격으로 이러한 애플리케이션 리소스를 극대화하는 것이 목표입니다. 그 결과 다음 EC2 인스턴스 유형 중 하나가 이러한 요건에 적합할 것이라는 결정을 내립니다.


| 인스턴스 유형 | 메모리(GiB) | vCPUs | 
| --- | --- | --- | 
|  r3.2xlarge  |  61  |  8  | 
|  r3.4xlarge  |  122  |  16  | 
|  r3.8xlarge  |  244  |  32  | 

**목표 용량 단위**  
인스턴스 가중치를 부여했을 때 목표 용량은 인스턴스 수(기본값) 또는 코어(vCPU), 메모리(GiB) 및 스토리지(GB)와 같은 요소의 조합과 동일할 수 있습니다. 그래서 Example Corp은 단위 1개당 애플리케이션의 기본 용량(RAM 60GB, vCPU 8개)을 고려하여 기본 용량의 20배가 요구에 적합하겠다고 결정하고 그래서 EC2 플릿 요청의 대상 용량을 20개으로 설정합니다.

**인스턴스 가중치**  
목표 용량이 결정되자 이제는 인스턴스 가중치를 계산합니다. 각 인스턴스 유형에 대한 인스턴스 가중치를 계산하기 위해, 다음과 같이 목표 용량에 이르기 위해 필요한 각 인스턴스 유형의 단위를 결정합니다.
+ r3.2xlarge(61.0GB, 8 vCPU) = 단위 20개 중 1개
+ r3.4xlarge(122.0GB, 16 vCPU) = 단위 20개 중 2개
+ r3.8xlarge(244.0GB, 32 vCPU) = 단위 20개 중 4개

따라서 Example Corp은 EC2 집합 요청 시 1, 2 및 4의 인스턴스 가중치를 각 시작 구성에 할당합니다.

**단위 시간당 가격**  
Example Corp은 인스턴스 시간당 [온디맨드 가격](https://aws.amazon.com/ec2/pricing/)을 시작 가격으로 사용합니다. 그 밖에 최근 스팟 가격을 사용하거나, 둘을 조합할 수도 있습니다. 단위 시간당 가격을 계산하려면 인스턴스 시간당 시작 가격을 가중치로 나눕니다. 예:


| 인스턴스 유형 | 온디맨드 가격 | 인스턴스 가중치 | 단위 시간당 가격 | 
| --- | --- | --- | --- | 
|  r3.2xLarge  |  0.7 USD  |  1  |  0.7 USD  | 
|  r3.4xLarge  |  1.4 USD  |  2  |  0.7 USD  | 
|  r3.8xLarge  |  2.8 USD  |  4  |  0.7 USD  | 

Example Corp은 단위 시간당 글로벌 가격으로 0.7 USD를 사용하기 때문에 세 가지 인스턴스 유형 모두에서 경쟁력이 있습니다. 또한 `r3.8xlarge` 시작 사양에서 단위 시간당 글로벌 가격으로 0.7 USD를, 단위 시간당 특정 가격으로 0.9 USD를 사용할 수도 있습니다.

## 권한 확인
<a name="ec2-fleet-instance-weighting-walkthrough-permissions"></a>

Example Corp은 EC2 집합을 생성하기 전에 필요한 권한을 가진 IAM 역할이 있는지 확인합니다. 자세한 내용은 [EC2 Fleet 사전 조건](ec2-fleet-prerequisites.md) 섹션을 참조하세요.

## 시작 템플릿 생성
<a name="ec2-fleet-instance-weighting-create-launch-template"></a>

그런 다음 Example Corp에서 시작 템플릿을 생성합니다. 시작 템플릿 ID는 다음 단계에서 사용됩니다. 자세한 내용은 [Amazon EC2 시작 템플릿 생성](create-launch-template.md) 섹션을 참조하세요.

## EC2 집합 생성
<a name="ec2-fleet-instance-weighting-walkthrough-request"></a>

Example Corp은 EC2 집합에 대해 다음 구성으로 `config.json` 파일을 생성합니다. 다음 예제에서는 리소스 식별자를 사용자 고유의 리소스 식별자로 바꿉니다.

```
{ 
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-07b3bc7625cdab851", 
                "Version": "1"
            }, 
            "Overrides": [
                {
                    "InstanceType": "r3.2xlarge", 
                    "SubnetId": "subnet-482e4972", 
                    "WeightedCapacity": 1
                },
                {
                    "InstanceType": "r3.4xlarge", 
                    "SubnetId": "subnet-482e4972", 
                    "WeightedCapacity": 2
                },
                {
                    "InstanceType": "r3.8xlarge", 
                    "MaxPrice": "0.90", 
                    "SubnetId": "subnet-482e4972", 
                    "WeightedCapacity": 4
                }
            ]
        }
    ], 
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20, 
        "DefaultTargetCapacityType": "spot"
    }
}
```

Example Corp은 다음 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 명령을 사용하여 EC2 집합을 생성합니다.

```
aws ec2 create-fleet --cli-input-json file://config.json
```

자세한 내용은 [EC2 집합 생성](create-ec2-fleet.md) 섹션을 참조하세요.

## 이행
<a name="ec2-fleet-instance-weighting-walkthrough-fulfillment"></a>

할당 전략에서는 스팟 용량 풀이 어느 스팟 인스턴스 풀에서 온 것인지 확인합니다.

`lowest-price` 전략(기본 전략)을 사용할 경우 스팟 인스턴스는 이행 시점에 단위당 최저 가격의 풀에서 옵니다. 20단위의 용량을 제공하기 위해 EC2 집합이 `r3.2xlarge` 인스턴스 20개(20을 1로 나눈 값), `r3.4xlarge` 인스턴스 10개(20을 2로 나눈 값) 또는 `r3.8xlarge` 인스턴스 5개(20을 4로 나눈 값)를 시작합니다.

Example Corp에서 `diversified` 전략을 사용한 경우에는 스팟 인스턴스가 3개의 풀 전부에서 옵니다. EC2 집합은 총 20개의 단위에 대해 `r3.2xlarge` 인스턴스 6개(6개 단위 제공), `r3.4xlarge` 인스턴스 3개(6개 단위 제공), `r3.8xlarge` 인스턴스 2개(8개 단위 제공)를 시작합니다.

# 튜토리얼: 온디맨드 인스턴스를 기본 용량으로 사용하도록 EC2 플릿 구성
<a name="ec2-fleet-on-demand-walkthrough"></a>

이 자습서에서는 ABC Online이라는 가상의 회사를 통해 기본 용량인 온디맨드와 스팟 용량(사용할 수 있는 경우)이 있는 EC2 집합를 요청하는 프로세스를 설명합니다.

## 목표
<a name="ec2-fleet-on-demand-walkthrough-objective"></a>

식당 배달 회사인 ABC Online은 EC2 인스턴스 유형 및 구매 옵션에 Amazon EC2 용량을 프로비저닝하여 원하는 규모, 성능 및 비용을 달성하는 것을 목표로 합니다.

## 계획
<a name="ec2-fleet-on-demand-walkthrough-planning"></a>

ABC Online은 피크 시간을 처리하기 위해 고정된 용량이 필요하지만, 더 낮은 비용으로 추가 용량을 이용하고자 합니다. 이 회사는 EC2 플릿에 대해 다음 요구 사항을 결정합니다.
+ 온디맨드 인스턴스 용량 - ABC Online은 온디맨드 인스턴스 15개가 있어야 피크 시간의 트래픽을 수용할 수 있습니다.
+ 스팟 인스턴스 용량 - 성능을 높이면서도 가격을 낮추기 위해 ABC Online은 5개의 스팟 인스턴스를 프로비저닝할 계획입니다.

## 권한 확인
<a name="ec2-fleet-on-demand-walkthrough-permissions"></a>

ABC Online은 EC2 집합을 생성하기 전에 필요한 권한을 가진 IAM 역할이 있는지 확인합니다. 자세한 내용은 [EC2 Fleet 사전 조건](ec2-fleet-prerequisites.md) 섹션을 참조하세요.

## 시작 템플릿 생성
<a name="ec2-fleet-on-demand-walkthrough-create-launch-template"></a>

그런 다음 ABC Online에서 시작 템플릿을 생성합니다. 시작 템플릿 ID는 다음 단계에서 사용됩니다. 자세한 내용은 [Amazon EC2 시작 템플릿 생성](create-launch-template.md) 섹션을 참조하세요.

## EC2 집합 생성
<a name="ec2-fleet-on-demand-walkthrough-request"></a>

ABC Online은 EC2 집합에 대해 다음 구성으로 `config.json` 파일을 생성합니다. 다음 예제에서는 리소스 식별자를 사용자 고유의 리소스 식별자로 바꿉니다.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-07b3bc7625cdab851",
                "Version": "2"
            }

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 20,
        "OnDemandTargetCapacity":15,
        "DefaultTargetCapacityType": "spot"
    }
}
```

ABC Online은 다음 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 명령을 사용하여 EC2 집합을 생성합니다.

```
aws ec2 create-fleet --cli-input-json file://config.json
```

자세한 내용은 [EC2 집합 생성](create-ec2-fleet.md) 섹션을 참조하세요.

## 이행
<a name="ec2-fleet-on-demand-walkthrough-fulfillment"></a>

할당 전략에 따라 온디맨드 용량은 항상 충족되고 남아 있는 대상 용량이 사용 가능한 용량이 있는 경우 스팟으로 충족됩니다.

# 튜토리얼: 대상으로 지정된 용량 예약을 사용하여 온디맨드 인스턴스를 시작하도록 EC2 플릿 구성
<a name="ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough"></a>

이 자습서에서는 EC2 플릿이 `targeted` 용량 예약으로 온디맨드 인스턴스를 시작하기 위해 수행해야 하는 모든 단계를 안내합니다.

먼저 온디맨드 인스턴스를 시작할 때 `targeted` 온디맨드 용량 예약을 사용하도록 플릿을 구성하는 방법에 대해 학습합니다. 또한 총 온디맨드 목표 용량이 사용 가능한 미사용 용량 예약 수를 초과할 경우 플릿이 지정된 할당 전략을 사용하여 나머지 목표 용량을 시작할 인스턴스 풀을 선택하도록 플릿을 구성하는 방법도 학습합니다.

**EC2 플릿 구성**

이 튜토리얼에서 플릿은 다음과 같이 구성됩니다.
+ 목표 용량: 온디맨드 인스턴스 10개
+ 총 미사용 `targeted` 용량 예약: 6개(플릿의 온디맨드 목표 용량인 온디맨드 인스턴스 10개보다 적음)
+ 용량 예약 풀 수: 2개(`us-east-1a` 및 `us-east-1b`)
+ 풀당 용량 예약 수: 3개
+ 온디맨드 할당 전략: `lowest-price`(미사용 용량 예약 수가 온디맨드 목표 용량보다 적을 경우 플릿에서 온디맨드 할당 전략을 기반으로 나머지 온디맨드 용량을 시작할 풀 결정)

  `lowest-price` 할당 전략 대신 `prioritized` 할당 전략을 사용할 수도 있습니다.

**온디맨드 인스턴스를 `targeted` 용량 예약으로 시작하려면 다음과 같이 여러 단계를 수행해야 합니다.**
+ [1단계: 용량 예약 생성](#ec2-fleet-odcr-step1)
+ [2단계: 용량 예약 리소스 그룹 생성](#ec2-fleet-odcr-step2)
+ [3단계: 용량 예약을 용량 예약 리소스 그룹에 추가](#ec2-fleet-odcr-step3)
+ [(선택 사항) 4단계: 리소스 그룹에서 용량 예약 확인](#ec2-fleet-odcr-step4)
+ [5단계: 용량 예약이 특정 리소스 그룹을 대상으로 하도록 지정하는 시작 템플리트 생성](#ec2-fleet-odcr-step5)
+ [(선택 사항) 6단계: 시작 템플릿 설명](#ec2-fleet-odcr-step6)
+ [7단계: EC2 플릿 생성](#ec2-fleet-odcr-step7)
+ [(선택사항) 8단계: 나머지 미사용 용량 예약 수 확인](#ec2-fleet-odcr-step8)

## 1단계: 용량 예약 생성
<a name="ec2-fleet-odcr-step1"></a>

[create-capacity-reservation](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-capacity-reservation.html) 명령을 사용하여 `us-east-1a`에 대해 용량 예약 3개, `us-east-1b`에 대해 또 다른 용량 예약 3개를 생성합니다. 가용 영역을 제외하고 용량 예약의 다른 속성은 동일합니다.

**`us-east-1a`의 용량 예약 3개**

```
aws ec2 create-capacity-reservation \
    --availability-zone us-east-1a \
    --instance-type c5.xlarge \
    --instance-platform Linux/UNIX \
    --instance-count 3 \
    --instance-match-criteria targeted
```

결과 용량 예약 ID의 예

```
cr-1234567890abcdef1
```

**`us-east-1b`의 용량 예약 3개**

```
aws ec2 create-capacity-reservation \
    --availability-zone us-east-1b \
    --instance-type c5.xlarge \
    --instance-platform Linux/UNIX \
    --instance-count 3 \
    --instance-match-criteria targeted
```

결과 용량 예약 ID의 예

```
cr-54321abcdef567890
```

## 2단계: 용량 예약 리소스 그룹 생성
<a name="ec2-fleet-odcr-step2"></a>

`resource-groups` 서비스 및 [create-group](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/create-group.html) 명령을 사용하여 용량 예약 리소스 그룹을 생성합니다. 이 예제에서 리소스 그룹의 이름은 `my-cr-group`입니다. 리소스 그룹을 생성해야 하는 이유에 대한 자세한 내용은 [용량 예약을 사용하여 EC2 플릿의 온디맨드 용량 예약](ec2-fleet-on-demand-capacity-reservations.md) 섹션을 참조하세요.

```
aws resource-groups create-group \
    --name my-cr-group \
    --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
```

## 3단계: 용량 예약을 용량 예약 리소스 그룹에 추가
<a name="ec2-fleet-odcr-step3"></a>

`resource-groups` 서비스 및 [group-resources](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/group-resources.html) 명령을 사용하여 1단계에서 생성한 용량 예약을 용량 예약 리소스 그룹에 추가합니다. 해당 ARN을 기준으로 온디맨드 용량 예약을 참조해야 합니다.

```
aws resource-groups group-resources \
    --group my-cr-group \
    --resource-arns \
      arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1 \
      arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890
```

출력 예시

```
{
   "Failed": [], 
   "Succeeded": [ 
   "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1", 
   "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890" 
   ] 
}
```

## (선택 사항) 4단계: 리소스 그룹에서 용량 예약 확인
<a name="ec2-fleet-odcr-step4"></a>

`resource-groups` 서비스 및 [list-group-resources](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/list-group-resources.html) 명령을 사용하여 선택적으로 리소스 그룹을 설명하여 해당 용량 예약을 확인합니다.

```
aws resource-groups list-group-resources --group my-cr-group
```

출력 예시

```
{
    "ResourceIdentifiers": [
        {
            "ResourceType": "AWS::EC2::CapacityReservation",
            "ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1"
        },
        {
            "ResourceType": "AWS::EC2::CapacityReservation",
            "ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890"
        }
    ]
}
```

## 5단계: 용량 예약이 특정 리소스 그룹을 대상으로 하도록 지정하는 시작 템플리트 생성
<a name="ec2-fleet-odcr-step5"></a>

[Create-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) 명령을 사용하여, 사용할 용량 예약을 지정할 시작 템플릿을 생성합니다. 이 예에서 플릿은 리소스 그룹에 추가된 `targeted` 용량 예약을 사용합니다. 따라서 시작 템플릿 데이터는 용량 예약이 특정 리소스 그룹을 대상으로 하도록 지정합니다. 이 예제에서 시작 템플릿의 이름은 `my-launch-template`입니다.

```
aws ec2 create-launch-template \
    --launch-template-name my-launch-template \
    --launch-template-data \
        '{"ImageId": "ami-0123456789example",
          "CapacityReservationSpecification": 
            {"CapacityReservationTarget": 
                { "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group" }
            }
        }'
```

## (선택 사항) 6단계: 시작 템플릿 설명
<a name="ec2-fleet-odcr-step6"></a>

[describe-launch-template-versions](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-launch-template-versions.html) 명령을 사용하여 구성을 확인할 시작 템플릿을 선택적으로 설명합니다.

```
aws ec2 describe-launch-template-versions --launch-template-name my-launch-template
```

출력 예시

```
{
    "LaunchTemplateVersions": [
        {
            "LaunchTemplateId": "lt-01234567890example",
            "LaunchTemplateName": "my-launch-template",
            "VersionNumber": 1,
            "CreateTime": "2021-01-19T20:50:19.000Z",
            "CreatedBy": "arn:aws:iam::123456789012:user/Admin",
            "DefaultVersion": true,
            "LaunchTemplateData": {
                "ImageId": "ami-0947d2ba12ee1ff75",
                "CapacityReservationSpecification": {
                    "CapacityReservationTarget": {
                        "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group"
                    }
                }
            }
        }
    ]
}
```

## 7단계: EC2 플릿 생성
<a name="ec2-fleet-odcr-step7"></a>

시작할 인스턴스에 대한 구성 정보를 지정하는 EC2 플릿을 생성합니다. 다음 EC2 플릿 구성에서는 이 예제와 관련된 구성만 보여 줍니다. 시작 템플릿 `my-launch-template`은 5단계에서 생성한 시작 템플릿입니다. 두 개의 인스턴스 풀이 있으며, 각각 인스턴스 유형(`c5.xlarge`)은 동일하지만 가용 영역(`us-east-1a` 및 `us-east-1b`)은 다릅니다. 인스턴스 풀의 가격은 가용 영역이 아닌 리전에 대해 정의되기 때문에 동일합니다. 총 목표 용량은 10이고 기본 목표 용량 유형은 `on-demand`입니다. 온디맨드 할당 전략은 `lowest-price`입니다. 용량 예약에 대한 사용 전략은 `use-capacity-reservations-first`입니다.

**참고**  
플릿 유형은 `instant`여야 합니다. 다른 플릿 유형에서는 `use-capacity-reservations-first`를 지원하지 않습니다.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
            "Overrides": [
               {
                   "InstanceType": "c5.xlarge",
                   "AvailabilityZone": "us-east-1a"
               },
               {
                    "InstanceType": "c5.xlarge",
                    "AvailabilityZone": "us-east-1b"
               }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 10,
        "DefaultTargetCapacityType": "on-demand"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions": {
             "UsageStrategy": "use-capacity-reservations-first"
         }
    },
    "Type": "instant"
}
```

이전 구성을 사용하여 `instant` 플릿을 생성하면 목표 용량을 충족하기 위해 다음 10개의 인스턴스가 시작됩니다.
+ 용량 예약은 먼저 다음과 같이 6개의 온디맨드 인스턴스를 시작하는 데 사용됩니다.
  + 3개의 온디맨드 인스턴스는 `us-east-1a`에서 3개의 `c5.xlarge` `targeted` 용량 예약으로 시작됩니다.
  + 3개의 온디맨드 인스턴스는 `us-east-1b`에서 3개의 `c5.xlarge` `targeted` 용량 예약으로 시작됩니다.
+ 목표 용량을 충족하기 위해 4개의 추가 온디맨드 인스턴스가 온디맨드 할당 전략에 따라 일반 온디맨드 용량으로 시작됩니다(이 예에서는 `lowest-price`). 그러나 풀의 가격이 동일하기 때문에(가용 영역이 아닌 리전별로 가격이 책정되기 때문에) 플릿은 나머지 4개의 온디맨드 인스턴스를 두 풀 중 하나로 시작합니다.

## (선택사항) 8단계: 나머지 미사용 용량 예약 수 확인
<a name="ec2-fleet-odcr-step8"></a>

플릿이 시작된 후, 선택적으로 [describe-capacity-reservations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html)를 실행하여 미사용 용량 예약이 몇 개나 남아 있는지 확인할 수 있습니다. 이 예에서는 모든 풀의 용량 예약이 모두 사용되었음을 보여 주는 다음 응답이 나타납니다.

```
{ "CapacityReservationId":  "cr-111",
     "InstanceType":  "c5.xlarge",  
     "AvailableInstanceCount":  0
}

 { "CapacityReservationId":  "cr-222",
     "InstanceType":  "c5.xlarge", 
     "AvailableInstanceCount":  0
}
```

# 튜토리얼: 인스턴스를 용량 블록으로 시작하도록 EC2 플릿을 구성
<a name="ec2-fleet-launch-instances-capacity-blocks-walkthrough"></a>

이 자습서에서는 EC2 플릿에서 용량 블록으로 인스턴스를 내보내려면 수행해야 하는 단계를 안내합니다.

대부분의 경우 EC2 플릿 요청의 대상 용량은 목표로 하는 용량 블록 예약의 가용 용량 이하여야 합니다. 용량 블록 예약의 한도를 초과하는 목표 용량 요청은 충족되지 않습니다. 대상 용량 요청이 용량 블록 예약 한도를 초과하면 용량 블록 예약 한도를 초과하는 용량에 대한 `Insufficient Capacity Exception`이 발생합니다.

**참고**  
용량 블록의 경우 EC2 플릿이 대체되어 원하는 목표 용량의 나머지에 대한 온디맨드 인스턴스를 시작하지 않습니다.

가용 용량 블록 예약에서 요청된 목표 용량을 EC2 플릿에서 충족할 수 없으면 EC2 플릿에서는 최대한 많은 용량을 충족하고, 시작할 수 있었던 인스턴스를 반환합니다. 모든 인스턴스가 프로비저닝될 때까지 EC2 플릿 직접 호출을 다시 반복할 수 있습니다.

EC2 플릿 요청 구성 후에는 용량 블록 예약 시작 날짜까지 기다려야 합니다. 아직 시작되지 않은 용량 블록으로 내보내도록 EC2 플릿에 요청하면 `Insufficient Capacity Error`가 발생합니다.

용량 블록 예약이 활성화되면 EC2 플릿 API를 직접적으로 호출하고 선택한 파라미터에 따라 인스턴스를 용량 블록에 프로비저닝할 수 있습니다. 용량 블록에서 실행 중인 인스턴스는 인스턴스를 수동으로 중지 또는 종료할 때까지 또는 용량 블록 예약이 종료될 때 Amazon EC2에서 인스턴스를 종료할 때까지 계속 실행됩니다.

용량 블록에 대한 자세한 내용은 [ML용 용량 블록](ec2-capacity-blocks.md) 섹션을 참조하세요.

**고려 사항**
+ 용량 블록으로 인스턴스를 시작하는 데는 `instant` 유형의 EC2 플릿 요청만 지원됩니다. 자세한 내용은 [instant 유형의 EC2 플릿 구성](instant-fleet.md) 섹션을 참조하세요.
+ 동일한 EC2 플릿 요청의 여러 용량 블록은 지원되지 않습니다.
+ `capacity-block`을 `DefaultTargetCapacity`로 설정하는 동안 `OnDemandTargetCapacity` 또는 `SpotTargetCapacity`를 사용하는 것도 지원되지 않습니다.
+ `DefaultTargetCapacityType`이 `capacity-block`으로 설정되었으면 `OnDemandOptions::CapacityReservationOptions`를 제공할 수 없습니다. 예외가 발생합니다.

**용량 블록으로 인스턴스를 시작하도록 EC2 플릿을 구성하려면 다음을 수행하세요.**

1. **시작 템플릿을 생성합니다.**

   시작 템플릿에서 다음을 수행합니다.
   + `InstanceMarketOptionsRequest`의 경우 `MarketType`을 `capacity-block`으로 설정합니다.
   + 용량 블록 예약을 대상으로 하려면 `CapacityReservationID`에 대해 용량 블록 예약 ID를 지정합니다.

   시작 템플릿 이름과 버전을 기록해 둡니다. 다음 단계에서 이 정보를 사용합니다.

   시작 템플릿 생성에 대한 자세한 내용은 [Amazon EC2 시작 템플릿 생성](create-launch-template.md) 섹션을 참조하세요.

1. **EC2 플릿을 구성합니다.**

   다음 EC2 플릿 구성으로 `config.json` 파일을 생성합니다. 다음 예제에서는 리소스 식별자를 사용자 고유의 리소스 식별자로 바꿉니다.

   EC2 플릿 구성에 대한 자세한 내용은 [EC2 집합 생성](create-ec2-fleet.md) 섹션을 참조하세요.

   ```
   { 
       "LaunchTemplateConfigs": [
           {
               "LaunchTemplateSpecification": {
                   "LaunchTemplateName": "CBR-launch-template", 
                   "Version": "1"
               }, 
               "Overrides": [
                   {
                       "InstanceType": "p5.48xlarge", 
                       "AvailabilityZone": "us-east-1a"   
                   },
               ]
           }
       ], 
       "TargetCapacitySpecification": {
           "TotalTargetCapacity": 10, 
           "DefaultTargetCapacityType": "capacity-block"
       },
       "Type": "instant"
   }
   ```

1. **플릿을 시작합니다.**

   다음 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 명령을 사용합니다.

   ```
   aws ec2 create-fleet --cli-input-json file://config.json
   ```

   자세한 내용은 [EC2 집합 생성](create-ec2-fleet.md#create-ec2-fleet-procedure) 섹션을 참조하세요.

# 튜토리얼: 인스턴스를 중단 가능한 용량 예약으로 시작하도록 EC2 플릿을 구성
<a name="ec2-fleet-launch-instances-interruptible-cr-walkthrough"></a>

이 자습서에서는 EC2 플릿에서 중단 가능한 용량 예약으로 인스턴스를 내보내려면 수행해야 하는 단계를 안내합니다.

중단 가능한 용량 예약은 AWS 조직 내 온디맨드 용량 예약 소유자가 임대해주는 예비 용량을 나타냅니다. 이러한 예약은 중단 가능한 워크로드에 적합합니다. 용량 소유자는 중단 2분 전 고지를 통해 언제든 용량을 회수할 수 있으며, EC2가 인스턴스를 종료하기 때문입니다. 중단 가능한 용량 예약에 대한 자세한 내용은 [중단 가능한 용량 예약](interruptible-capacity-reservations.md) 섹션을 참조하세요.

EC2 플릿 요청의 목표 용량은 목표로 하는 중단 가능 용량 예약의 사용 가능한 용량보다 작거나 같아야 합니다. 요청된 용량이 중단 가능한 용량 예약을 초과하는 경우, EC2 플릿은 최대한 많은 인스턴스를 시작하고 API 응답에 시작된 인스턴스를 보고합니다.

중단 가능한 용량 예약에서 실행되는 인스턴스는 사용자가 수동으로 중지 또는 종료하거나 용량 소유자가 용량을 회수할 때까지 계속 실행됩니다. 용량 소유자가 용량을 회수하면 Amazon EC2는 인스턴스를 종료하기 2분 전 Amazon EventBridge 알림을 보냅니다.

## 고려 사항
<a name="ec2-fleet-interruptible-cr-considerations"></a>
+ 중단 가능한 용량 예약으로 인스턴스를 시작하는 데는 `instant` 유형의 EC2 플릿 요청만 지원됩니다.
+ `reserved-capacity`를 `DefaultTargetCapacityType`으로 설정하는 동안 `OnDemandTargetCapacity` 또는 `SpotTargetCapacity`를 사용하는 것도 지원되지 않습니다.
+ 서로 다른 중단 가능한 용량 예약을 대상으로 하는 여러 시작 템플릿을 지정하면 EC2 플릿은 일치하는 모든 예약에 걸쳐 인스턴스를 프로비저닝합니다.
+ 중단 가능한 용량 예약의 경우, EC2 플릿은 원하는 목표 용량의 나머지에 대한 온디맨드 인스턴스 또는 스팟 인스턴스 시작으로 돌아가지 않습니다.

## 권한 확인
<a name="ec2-fleet-interruptible-cr-verify-permissions"></a>

EC2 플릿을 생성하기 전에 필요한 권한을 가진 IAM 역할이 있는지 확인합니다. 자세한 내용은 [EC2 Fleet 사전 조건](ec2-fleet-prerequisites.md) 섹션을 참조하세요.

중단 가능한 용량 예약으로 인스턴스를 시작하려면 다음 단계를 수행해야 합니다.

## 1단계: 시작 템플릿 생성
<a name="ec2-fleet-interruptible-cr-step1"></a>

[Create-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) 명령을 사용하여, 대상으로 지정할 중단 가능한 용량 예약을 포함하는 시작 템플릿을 생성합니다. 시작 템플릿에서 `MarketType`을 `interruptible-capacity-reservation`으로 설정하고 중단 가능한 용량 예약의 `CapacityReservationId`를 지정합니다.

실행 템플릿 구성 예시:

```
{
    "LaunchTemplateName": "interruptible-cr-launch-template",
    "LaunchTemplateData": {
        "InstanceType": "m5.large",
        "ImageId": "ami-0abcdef1234567890",
        "CapacityReservationSpecification": {
            "CapacityReservationTarget": {
                "CapacityReservationId": "cr-0123456789abcdef0"
            }
        },
        "InstanceMarketOptions": {
            "MarketType": "interruptible-capacity-reservation"
        }
    }
}
```

출력 예시

```
{
    "LaunchTemplate": {
        "LaunchTemplateId": "lt-0123456789example",
        "LaunchTemplateName": "interruptible-cr-launch-template",
        "CreateTime": "2026-03-12T10:00:00.000Z",
        "CreatedBy": "arn:aws:iam::123456789012:user/Admin",
        "DefaultVersionNumber": 1,
        "LatestVersionNumber": 1
    }
}
```

자세한 내용은 [Amazon EC2 시작 템플릿 생성](create-launch-template.md) 섹션을 참조하세요.

## 2단계: EC2 플릿 구성
<a name="ec2-fleet-interruptible-cr-step2"></a>

시작 템플릿과 목표 용량을 지정하는 EC2 플릿에 대한 구성 파일을 생성합니다. 다음 구성은 1단계에서 생성한 시작 템플릿 `interruptible-cr-launch-template`을 사용합니다.

`reserved-capacity`를 `DefaultTargetCapacityType`으로 사용할 때 `ReservationType`을 `interruptible-capacity-reservation`으로 설정하여 `ReservedCapacityOptions`를 지정해야 합니다.

다음 콘텐츠가 포함된 `config.json`이라는 파일을 생성합니다.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "interruptible-cr-launch-template",
                "Version": "1"
            },
            "Overrides": [
                {
                    "InstanceType": "m5.large",
                    "AvailabilityZone": "us-east-1a"
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 10,
        "DefaultTargetCapacityType": "reserved-capacity"
    },
    "ReservedCapacityOptions": {
        "ReservationType": ["interruptible-capacity-reservation"]
    },
    "Type": "instant"
}
```

주요 구성 파라미터:


| 파라미터 | 설명 | 
| --- | --- | 
| DefaultTargetCapacityType | 인스턴스를 예약 용량으로 시작해야 함을 나타내려면 reserved-capacity로 설정합니다. | 
| ReservedCapacityOptions | 예약 용량 유형을 지정합니다. 중단 가능한 용량 예약의 경우 ReservationType을 ["interruptible-capacity-reservation"]으로 설정합니다. | 
| Type | instant로 설정해야 합니다. 중단 가능한 용량 예약에는 인스턴트 플릿만 지원됩니다. | 

## 3단계: 플릿 시작 및 결과 보기
<a name="ec2-fleet-interruptible-cr-step3"></a>

[create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 명령을 사용하여 플릿을 생성합니다.

```
aws ec2 create-fleet \
    --cli-input-json file://config.json
```

이전 구성을 사용하여 `instant` 플릿을 생성한 후, EC2 플릿이 목표 용량을 충족하기 위해 중단 가능한 용량 예약으로 인스턴스 10개를 시작합니다.

**참고**  
플릿이 전체 목표 용량을 충족할 수 없는 경우 응답에는 시작된 인스턴스와 채워지지 않은 용량에 대한 오류가 포함됩니다.

출력 예시

```
{
    "FleetId": "fleet-12345678-1234-1234-1234-123456789012",
    "Instances": [
        {
            "LaunchTemplateAndOverrides": {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateId": "lt-0123456789example",
                    "Version": "1"
                },
                "Overrides": {
                    "InstanceType": "m5.large",
                    "AvailabilityZone": "us-east-1a"
                }
            },
            "Lifecycle": "interruptible-capacity-reservation",
            "InstanceIds": [
                "i-0123456789example1",
                "i-0123456789example2",
                "i-0123456789example3",
                "i-0123456789example4",
                "i-0123456789example5",
                "i-0123456789example6",
                "i-0123456789example7",
                "i-0123456789example8",
                "i-0123456789example9",
                "i-0123456789example0"
            ],
            "InstanceType": "m5.large",
            "Platform": "Linux/UNIX"
        }
    ],
    "Errors": []
}
```

자세한 내용은 [EC2 집합 생성](create-ec2-fleet.md) 섹션을 참조하세요.

## 정리
<a name="ec2-fleet-interruptible-cr-cleanup"></a>

요금이 발생하지 않도록 하려면 더 이상 필요하지 않은 인스턴스를 종료합니다. EC2는 용량 소유자가 용량을 회수할 때 중단 가능한 용량 예약으로 시작된 인스턴스도 자동으로 종료합니다.

## 관련 리소스
<a name="ec2-fleet-interruptible-cr-related-resources"></a>
+ [중단 가능한 용량 예약](interruptible-capacity-reservations.md)
+ [EC2 온디맨드 용량 예약으로 컴퓨팅 용량 예약](ec2-capacity-reservations.md)
+ [EC2 플릿 사용](manage-ec2-fleet.md)
+ [EC2 집합 생성](create-ec2-fleet.md)
+ [Amazon EC2 시작 템플릿에 인스턴스 시작 파라미터 저장](ec2-launch-templates.md)

# EC2 Fleet에 대한 CLI 구성 예제
<a name="ec2-fleet-examples"></a>

다음과 같이 JSON 파일에서 EC2 Fleet 구성을 정의하고, [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) 명령으로 해당 파일을 참조하여 플릿을 생성할 수 있습니다.

```
aws ec2 create-fleet --cli-input-json file://file_name.json
```

다음 예제는 다양한 EC2 Fleet 사용 사례의 시작 구성을 보여줍니다. 구성 파라미터에 대한 자세한 내용은 [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html)을 참조하세요.

**Topics**
+ [예 1: 스팟 인스턴스를 기본 구입 옵션으로 시작](#ec2-fleet-config1)
+ [예 2: 온디맨드 인스턴스를 기본 구입 옵션으로 시작](#ec2-fleet-config2)
+ [예 3: 온디맨드 인스턴스를 기본 용량으로 시작](#ec2-fleet-config3)
+ [예제 4: 여러 용량 예약을 사용하여 온디맨드 인스턴스 시작](#ec2-fleet-config5)
+ [예제 5: 총 목표 용량이 미사용 용량 예약 수보다 많은 경우 용량 예약을 사용하여 온디맨드 인스턴스 시작](#ec2-fleet-config6)
+ [예제 6: 대상으로 지정된 용량 예약을 사용하여 온디맨드 인스턴스 시작](#ec2-fleet-config7)
+ [예제 7: 대체 스팟 인스턴스를 시작하도록 용량 리밸런싱 구성](#ec2-fleet-config8)
+ [예제 8: 용량 최적화 플릿에서 스팟 인스턴스 시작](#ec2-fleet-config9)
+ [예제 9: 용량 최적화 플릿에서 우선순위를 사용하여 스팟 인스턴스 시작](#ec2-fleet-config10)
+ [예제 10: price-capacity-optimized 플릿에서 스팟 인스턴스 시작](#ec2-fleet-config11)
+ [예제 11: 속성 기반 인스턴스 유형 선택 구성](#ec2-fleet-config12)

유형 `instant` 플릿에 대한 추가 CLI 예제는 [instant 유형의 EC2 플릿 구성](instant-fleet.md)의 내용을 참조하세요.

## 예 1: 스팟 인스턴스를 기본 구입 옵션으로 시작
<a name="ec2-fleet-config1"></a>

다음 예제에서는 EC2 집합에 필요한 최소한의 파라미터, 즉 시작 템플릿, 목표 용량 및 기본 구매 옵션을 지정합니다. 시작 템플릿은 시작 템플릿 ID와 버전 번호로 식별됩니다. 플릿의 목표 용량은 인스턴스 2개이고 기본 구입 옵션은 `spot`이므로 플릿이 스팟 인스턴스 2개를 시작합니다.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-0e8c754449b27161c",
                "Version": "1"
            }

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 2,
        "DefaultTargetCapacityType": "spot"
    }
}
```

## 예 2: 온디맨드 인스턴스를 기본 구입 옵션으로 시작
<a name="ec2-fleet-config2"></a>

다음 예제에서는 EC2 집합에 필요한 최소한의 파라미터, 즉 시작 템플릿, 목표 용량 및 기본 구매 옵션을 지정합니다. 시작 템플릿은 시작 템플릿 ID와 버전 번호로 식별됩니다. 플릿의 목표 용량은 인스턴스 2개이고 기본 구입 옵션은 `on-demand`이므로 플릿이 온디맨드 인스턴스 2개를 시작합니다.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-0e8c754449b27161c",
                "Version": "1"
            }

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 2,
        "DefaultTargetCapacityType": "on-demand"
    }
}
```

## 예 3: 온디맨드 인스턴스를 기본 용량으로 시작
<a name="ec2-fleet-config3"></a>

다음 예제에서는 총 목표 용량인 인스턴스 2개를 플릿에 지정하고 목표 용량은 온디맨드 인스턴스 1개로 지정합니다. 기본 구매 옵션은 `spot`입니다. 지정한 대로 플릿은 온디맨드 인스턴스 1개를 시작하지만 총 목표 용량을 충족하려면 인스턴스를 하나 더 시작해야 합니다. 차이에 대한 구매 옵션이 `TotalTargetCapacity` – `OnDemandTargetCapacity` = `DefaultTargetCapacityType`으로 계산되므로 플릿에서 스팟 인스턴스 1개를 시작합니다.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-0e8c754449b27161c",
                "Version": "1"
            }

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 2,
        "OnDemandTargetCapacity": 1,
        "DefaultTargetCapacityType": "spot"
    }
}
```

## 예제 4: 여러 용량 예약을 사용하여 온디맨드 인스턴스 시작
<a name="ec2-fleet-config5"></a>

용량 예약에 대한 사용 전략을 `use-capacity-reservations-first`로 설정하여 온디맨드 인스턴스를 시작할 때 온디맨드 용량 예약부터 사용하도록 플릿을 구성할 수 있습니다. 이 예에서는 플릿이 목표 용량을 처리하는 데 필요한 용량 예약보다 많을 때 사용할 용량 예약을 선택하는 방법을 보여 줍니다.

이 예에서 플릿 구성은 다음과 같습니다.
+ 목표 용량: 온디맨드 인스턴스 12개
+ 총 미사용 용량 예약: 15개(플릿의 목표 용량인 온디맨드 인스턴스 12개보다 많음)
+ 용량 예약 풀 수: 3개(`m5.large`, `m4.xlarge` 및 `m4.2xlarge`)
+ 풀당 용량 예약 수: 5개
+ 온디맨드 할당 전략: `lowest-price`(여러 인스턴스 풀에 미사용 용량 예약이 여러 개 있는 경우 플릿은 온디맨드 할당 전략에 따라 온디맨드 인스턴스를 시작할 풀 결정)

  `lowest-price` 할당 전략 대신 `prioritized` 할당 전략을 사용할 수도 있습니다.

**용량 예약**

이 계정은 3개의 풀에 다음과 같은 미사용 용량 예약 15개를 가지고 있습니다. 각 풀의 용량 예약 수는 `AvailableInstanceCount`로 표시됩니다.

```
{
    "CapacityReservationId": "cr-111", 
    "InstanceType": "m5.large", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 5, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}

{
    "CapacityReservationId": "cr-222", 
    "InstanceType": "m4.xlarge", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 5, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}

{
    "CapacityReservationId": "cr-333", 
    "InstanceType": "m4.2xlarge", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount":5, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
```

**플릿 구성**

다음 플릿 구성에서는 이 예제와 관련된 구성만 보여 줍니다. 총 목표 용량은 12이고, 기본 목표 용량 유형은 `on-demand`입니다. 온디맨드 할당 전략은 `lowest-price`입니다. 용량 예약에 대한 사용 전략은 `use-capacity-reservations-first`입니다.

이 예에서 온디맨드 인스턴스 가격은 다음과 같습니다.
+ `m5.large` - 시간당 0.096 USD
+ `m4.xlarge` - 시간당 0.20 USD
+ `m4.2xlarge` - 시간당 0.40 USD

**참고**  
플릿 유형은 `instant`여야 합니다. 다른 플릿 유형에서는 `use-capacity-reservations-first`를 지원하지 않습니다.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-abc1234567example",
                "Version": "1"
            },
            "Overrides": [
                {
                  "InstanceType": "m5.large",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                },
                {
                  "InstanceType": "m4.xlarge",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                },
                {
                  "InstanceType": "m4.2xlarge",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                }
              ]

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 12,
        "DefaultTargetCapacityType": "on-demand"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions": {
            "UsageStrategy": "use-capacity-reservations-first"
        }
    },
    "Type": "instant"
}
```

이전 구성을 사용하여 `instant` 플릿을 생성하면 목표 용량을 충족하기 위해 다음 12개의 인스턴스가 시작됩니다.
+ `us-east-1a`의 `m5.large` 온디맨드 인스턴스 5개 – `us-east-1a`의 `m5.large`가 최저가이며, 사용 가능한 미사용 `m5.large` 용량 예약 5개
+ us-east-1a의 `m4.xlarge` 온디맨드 인스턴스 5개 – `us-east-1a`의 `m4.xlarge`가 두 번째 최저가이며, 사용 가능한 미사용 `m4.xlarge` 용량 예약 5개
+ us-east-1a의 `m4.2xlarge` 온디맨드 인스턴스 2개 – `us-east-1a`의 `m4.2xlarge`가 세 번째 최저가이고 사용 가능한 미사용 `m4.2xlarge` 용량 예약은 5개이며, 그중 2개만 있으면 목표 용량 충족 가능

플릿이 시작된 후, [describe-capacity-reservations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html)를 실행하여 미사용 용량 예약이 몇 개나 남아 있는지 확인할 수 있습니다. 이 예에서는 `m5.large` 및 `m4.xlarge` 용량 예약이 모두 사용되었고 `m4.2xlarge` 용량 예약 3개는 미사용 상태로 남아 있음을 보여주는 다음과 같은 응답이 나타납니다.

```
{
    "CapacityReservationId": "cr-111",
    "InstanceType": "m5.large",  
    "AvailableInstanceCount": 0
}

{
    "CapacityReservationId": "cr-222",
    "InstanceType": "m4.xlarge", 
    "AvailableInstanceCount": 0
}

{
    "CapacityReservationId": "cr-333",
    "InstanceType": "m4.2xlarge", 
    "AvailableInstanceCount": 3
}
```

## 예제 5: 총 목표 용량이 미사용 용량 예약 수보다 많은 경우 용량 예약을 사용하여 온디맨드 인스턴스 시작
<a name="ec2-fleet-config6"></a>

용량 예약에 대한 사용 전략을 `use-capacity-reservations-first`로 설정하여 온디맨드 인스턴스를 시작할 때 온디맨드 용량 예약부터 사용하도록 플릿을 구성할 수 있습니다. 이 예에서는 총 목표 용량이 사용 가능한 미사용 용량 예약 수를 초과할 때 온 디맨드 인스턴스를 시작할 인스턴스 풀을 플릿이 선택하는 방법을 보여 줍니다.

이 예에서 플릿 구성은 다음과 같습니다.
+ 목표 용량: 온디맨드 인스턴스 16개
+ 총 미사용 용량 예약: 15개(플릿의 목표 용량인 온디맨드 인스턴스 16개보다 적음)
+ 용량 예약 풀 수: 3개(`m5.large`, `m4.xlarge` 및 `m4.2xlarge`)
+ 풀당 용량 예약 수: 5개
+ 온디맨드 할당 전략: `lowest-price`(미사용 용량 예약 수가 온디맨드 목표 용량보다 적을 경우 플릿에서 온디맨드 할당 전략을 기반으로 나머지 온디맨드 용량을 시작할 풀 결정)

  `lowest-price` 할당 전략 대신 `prioritized` 할당 전략을 사용할 수도 있습니다.

**용량 예약**

이 계정은 3개의 풀에 다음과 같은 미사용 용량 예약 15개를 가지고 있습니다. 각 풀의 용량 예약 수는 `AvailableInstanceCount`로 표시됩니다.

```
{
    "CapacityReservationId": "cr-111", 
    "InstanceType": "m5.large", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 5, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}

{
    "CapacityReservationId": "cr-222", 
    "InstanceType": "m4.xlarge", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 5, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}

{
    "CapacityReservationId": "cr-333", 
    "InstanceType": "m4.2xlarge", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount":5, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
```

**플릿 구성**



다음 플릿 구성에서는 이 예제와 관련된 구성만 보여 줍니다. 총 목표 용량은 16이고 기본 목표 용량 유형은 `on-demand`입니다. 온디맨드 할당 전략은 `lowest-price`입니다. 용량 예약에 대한 사용 전략은 `use-capacity-reservations-first`입니다.

이 예에서 온디맨드 인스턴스 가격은 다음과 같습니다.
+ m5.large – 시간당 0.096 USD
+ m4.xlarge – 시간당 0.20 USD
+ m4.2xlarge – 시간당 0.40 USD

**참고**  
플릿 유형은 `instant`여야 합니다. 다른 플릿 유형에서는 `use-capacity-reservations-first`를 지원하지 않습니다.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "lt-0e8c754449b27161c",
                "Version": "1"
            },
            "Overrides": [
                {
                  "InstanceType": "m5.large",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                },
                {
                  "InstanceType": "m4.xlarge",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                },
                {
                  "InstanceType": "m4.2xlarge",
                  "AvailabilityZone": "us-east-1a",
                  "WeightedCapacity": 1
                }
              ]

        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 16,
        "DefaultTargetCapacityType": "on-demand"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price"
        "CapacityReservationOptions": {
            "UsageStrategy": "use-capacity-reservations-first"
        }
    },
    "Type": "instant",
}
```

이전 구성을 사용하여 `instant` 플릿을 생성한 후, 목표 용량을 충족하기 위해 다음 16개의 인스턴스가 시작됩니다.
+ `us-east-1a`의 `m5.large` 온디맨드 인스턴스 6개 – `us-east-1a`의 `m5.large`가 최저가이며, 사용 가능한 미사용 `m5.large` 용량 예약 5개 용량 예약은 먼저 5개의 온디맨드 인스턴스를 시작하는 데 사용됩니다. 나머지 `m4.xlarge` 및 `m4.2xlarge` 용량 예약을 사용한 후, 목표 용량을 충족하기 위해 추가 온디맨드 인스턴스가 온디맨드 할당 전략에 따라 시작됩니다(이 예에서는 `lowest-price`).
+ `us-east-1a`의 `m4.xlarge` 온디맨드 인스턴스 5개 – `us-east-1a`의 `m4.xlarge`가 두 번째 최저가이며, 사용 가능한 미사용 `m4.xlarge` 용량 예약 5개
+ `us-east-1a`의 `m4.2xlarge` 온디맨드 인스턴스 5개 – `us-east-1a`의 `m4.2xlarge`가 세 번째 최저가이며, 사용 가능한 미사용 `m4.2xlarge` 용량 예약 5개

플릿이 시작된 후, [describe-capacity-reservations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html)를 실행하여 미사용 용량 예약이 몇 개나 남아 있는지 확인할 수 있습니다. 이 예제에서는 모든 풀의 용량 예약이 모두 사용되었음을 보여 주는 다음 응답이 나타납니다.

```
{
    "CapacityReservationId": "cr-111",
    "InstanceType": "m5.large",  
    "AvailableInstanceCount": 0
}

{
    "CapacityReservationId": "cr-222",
    "InstanceType": "m4.xlarge", 
    "AvailableInstanceCount": 0
}

{
    "CapacityReservationId": "cr-333",
    "InstanceType": "m4.2xlarge", 
    "AvailableInstanceCount": 0
}
```

## 예제 6: 대상으로 지정된 용량 예약을 사용하여 온디맨드 인스턴스 시작
<a name="ec2-fleet-config7"></a>

용량 예약에 대한 사용 전략을 `use-capacity-reservations-first`로 설정하여 온디맨드 인스턴스를 시작할 때 `targeted` 온디맨드 용량 예약부터 사용하도록 플릿을 구성할 수 있습니다. 이 예에서는 온디맨드 인스턴스를 `targeted` 용량 예약으로 시작하는 방법을 보여 줍니다. 여기서 용량 예약의 속성은 가용 영역(`us-east-1a` 및 `us-east-1b`)을 제외하고 동일합니다. 또한 총 목표 용량이 사용 가능한 미사용 용량 예약 수를 초과할 때 온디맨드 인스턴스를 시작할 인스턴스 풀을 플릿이 선택하는 방법을 보여 줍니다.

이 예에서 플릿 구성은 다음과 같습니다.
+ 목표 용량: 온디맨드 인스턴스 10개
+ 총 미사용 `targeted` 용량 예약: 6개(플릿의 온디맨드 목표 용량인 온디맨드 인스턴스 10개보다 적음)
+ 용량 예약 풀 수: 2개(`us-east-1a` 및 `us-east-1b`)
+ 풀당 용량 예약 수: 3개
+ 온디맨드 할당 전략: `lowest-price`(미사용 용량 예약 수가 온디맨드 목표 용량보다 적을 경우 플릿에서 온디맨드 할당 전략을 기반으로 나머지 온디맨드 용량을 시작할 풀 결정)

  `lowest-price` 할당 전략 대신 `prioritized` 할당 전략을 사용할 수도 있습니다.

이 예제를 완료하기 위해 수행해야 하는 절차에 대한 시연은 [튜토리얼: 대상으로 지정된 용량 예약을 사용하여 온디맨드 인스턴스를 시작하도록 EC2 플릿 구성](ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough.md) 섹션을 참조하세요.

**용량 예약**

이 계정은 2개의 풀에 다음과 같은 미사용 용량 예약 6개를 가지고 있습니다. 이 예에서 풀은 가용 영역에 따라 다릅니다. 각 풀의 용량 예약 수는 `AvailableInstanceCount`로 표시됩니다.

```
{
    "CapacityReservationId": "cr-111", 
    "InstanceType": "c5.xlarge", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1a", 
    "AvailableInstanceCount": 3, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}

{
    "CapacityReservationId": "cr-222", 
    "InstanceType": "c5.xlarge", 
    "InstancePlatform": "Linux/UNIX", 
    "AvailabilityZone": "us-east-1b", 
    "AvailableInstanceCount": 3, 
    "InstanceMatchCriteria": "open", 
    "State": "active"
}
```

**플릿 구성**

다음 플릿 구성에서는 이 예제와 관련된 구성만 보여 줍니다. 총 목표 용량은 10이고 기본 목표 용량 유형은 `on-demand`입니다. 온디맨드 할당 전략은 `lowest-price`입니다. 용량 예약에 대한 사용 전략은 `use-capacity-reservations-first`입니다.

이 예에서 `us-east-1`의 `c5.xlarge`에 대한 온디맨드 인스턴스 가격은 시간당 0.17 USD입니다.

**참고**  
플릿 유형은 `instant`여야 합니다. 다른 플릿 유형에서는 `use-capacity-reservations-first`를 지원하지 않습니다.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
            "Overrides": [
               {
                   "InstanceType": "c5.xlarge",
                   "AvailabilityZone": "us-east-1a"
               },
               {
                    "InstanceType": "c5.xlarge",
                    "AvailabilityZone": "us-east-1b"
               }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 10,
        "DefaultTargetCapacityType": "on-demand"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions": {
             "UsageStrategy": "use-capacity-reservations-first"
         }
    },
    "Type": "instant"
}
```

이전 구성을 사용하여 `instant` 플릿을 생성하면 목표 용량을 충족하기 위해 다음 10개의 인스턴스가 시작됩니다.
+ 용량 예약은 먼저 다음과 같이 6개의 온디맨드 인스턴스를 시작하는 데 사용됩니다.
  + 3개의 온디맨드 인스턴스는 `us-east-1a`에서 3개의 `c5.xlarge` `targeted` 용량 예약으로 시작됩니다.
  + 3개의 온디맨드 인스턴스는 `us-east-1b`에서 3개의 `c5.xlarge` `targeted` 용량 예약으로 시작됩니다.
+ 목표 용량을 충족하기 위해 4개의 추가 온디맨드 인스턴스가 온디맨드 할당 전략에 따라 일반 온디맨드 용량으로 시작됩니다(이 예에서는 `lowest-price`). 그러나 풀의 가격이 동일하기 때문에(가용 영역이 아닌 리전별로 가격이 책정되기 때문에) 플릿은 나머지 4개의 온디맨드 인스턴스를 두 풀 중 하나로 시작합니다.

플릿이 시작된 후, [describe-capacity-reservations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html)를 실행하여 미사용 용량 예약이 몇 개나 남아 있는지 확인할 수 있습니다. 이 예제에서는 모든 풀의 용량 예약이 모두 사용되었음을 보여 주는 다음 응답이 나타납니다.

```
{
    "CapacityReservationId": "cr-111",
    "InstanceType": "c5.xlarge",  
    "AvailableInstanceCount": 0
}

{
    "CapacityReservationId": "cr-222",
    "InstanceType": "c5.xlarge", 
    "AvailableInstanceCount": 0
}
```

## 예제 7: 대체 스팟 인스턴스를 시작하도록 용량 리밸런싱 구성
<a name="ec2-fleet-config8"></a>

다음 예제에서는 Amazon EC2에서 플릿의 스팟 인스턴스에 대한 리밸런싱 권고가 생성될 때 대체 스팟 인스턴스를 시작하도록 EC2 Fleet을 구성합니다. 스팟 인스턴스의 자동 대체를 구성하려면 `ReplacementStrategy`에 `launch-before-terminate`를 지정합니다. 새 대체 스팟 인스턴스가 시작되는 시점부터 이전 스팟 인스턴스가 자동으로 삭제될 때까지의 시간 지연을 구성하려면 `termination-delay`에 대해 초 단위로 값을 지정합니다. 자세한 내용은 [구성 옵션](ec2-fleet-capacity-rebalance.md#ec2-fleet-capacity-rebalance-config-options) 섹션을 참조하세요.

**참고**  
이러한 절차가 완료된 후에만 이전 인스턴스가 종료되도록 인스턴스 종료 프로시저가 완료되는 데 걸리는 시간을 예측할 수 있는 경우에만 `launch-before-terminate`를 사용하는 것이 좋습니다. 두 인스턴스가 실행되는 동안에는 두 인스턴스에 대해 요금이 청구됩니다.

용량 리밸런싱 전략의 효과는 EC2 Fleet 요청에 지정된 스팟 용량 풀 수에 따라 달라집니다. 다양한 인스턴스 유형 및 가용 영역 세트로 플릿을 구성하고 `AllocationStrategy`에 대해 `capacity-optimized`를 지정하는 것이 좋습니다. 용량 리밸런싱에 대해 EC2 Fleet을 구성할 때 고려해야 할 사항에 대한 자세한 내용은 [EC2 플릿 및 스팟 플릿의 용량 리밸런싱을 사용하여 위험이 있는 스팟 인스턴스 교체](ec2-fleet-capacity-rebalance.md) 섹션을 참조하세요.

```
{
    "ExcessCapacityTerminationPolicy": "termination",
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "LaunchTemplate",
                "Version": "1"
            },
                 "Overrides": [
                       {
                           "InstanceType": "c3.large",
                           "WeightedCapacity": 1,
                            "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       },
                       {
                           "InstanceType": "c4.large",
                           "WeightedCapacity": 1,
                            "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       },
                       {
                           "InstanceType": "c5.large",
                           "WeightedCapacity": 1,
                            "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       }
                ] 
          }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 5,
        "DefaultTargetCapacityType": "spot"
    },
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        "MaintenanceStrategies": {
            "CapacityRebalance": {
                "ReplacementStrategy": "launch-before-terminate",
                "TerminationDelay": "720"
            }
        }
    }
}
```

## 예제 8: 용량 최적화 플릿에서 스팟 인스턴스 시작
<a name="ec2-fleet-config9"></a>

다음 예제에서는 용량을 최적화하는 스팟 할당 전략을 사용하여 EC2 Fleet을 구성하는 방법을 보여줍니다. 용량을 최적화하려면 `AllocationStrategy`를 `capacity-optimized`로 설정해야 합니다.

다음 예제에서는 3개의 시작 사양으로 3개의 스팟 용량 풀을 지정합니다. 목표 용량은 스팟 인스턴스 50개입니다. EC2 Fleet은 시작하는 인스턴스의 수에 대한 최적의 용량을 가진 스팟 용량 풀로 스팟 인스턴스 50개를 시작하려고 시도합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized",
        },
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
                 "Overrides": [
                       {
                           "InstanceType": "r4.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2a"
                           },
                      },
                       {
                           "InstanceType": "m4.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           },
                       }, 
                       {
                           "InstanceType": "c5.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           }
                       }
                 ] 
           }
    ],
    "TargetCapacitySpecification": {
            "TotalTargetCapacity": 50,
            "DefaultTargetCapacityType": "spot"

    }
}
```

## 예제 9: 용량 최적화 플릿에서 우선순위를 사용하여 스팟 인스턴스 시작
<a name="ec2-fleet-config10"></a>

다음 예제에서는 최선의 노력을 기준으로 우선순위를 사용하는 동안 용량을 최적화하는 스팟 할당 전략을 사용하여 EC2 Fleet을 구성하는 방법을 보여줍니다.

`capacity-optimized-prioritized` 할당 전략을 사용할 때 `Priority` 파라미터를 사용하여 스팟 인스턴스 풀의 우선순위를 지정할 수 있습니다. 여기서 숫자가 낮을수록 우선순위는 높습니다. 여러 스팟 용량 풀에 선호도가 동일한 경우 동일한 우선순위를 설정해도 됩니다. 우선순위가 설정되지 않은 풀은 우선순위 측면에서 마지막으로 고려됩니다.

스팟 용량 풀의 우선순위를 지정하려면 `AllocationStrategy`를 `capacity-optimized-prioritized`로 설정해야 합니다. EC2 Fleet은 용량을 우선으로 최적화하지만 최선의 노력을 기준으로 우선순위를 따릅니다. 예를 들어 EC2 Fleet에서 최적 용량으로 프로비저닝하는 데 우선순위가 큰 영향을 미치지 않을 수 있습니다. 이 옵션은 중단 가능성을 최소화해야 하고 특정 인스턴스 유형에 대한 선호도가 중요한 워크로드에 적합합니다.

다음 예제에서는 3개의 시작 사양으로 3개의 스팟 용량 풀을 지정합니다. 각 풀의 우선순위가 지정되며, 여기서 숫자가 낮을수록 우선순위가 높습니다. 목표 용량은 스팟 인스턴스 50개입니다. EC2 Fleet은 가장 높은 우선순위의 스팟 용량 풀로 50개의 스팟 인스턴스를 시작하려고 시도하지만 먼저 용량을 최적화합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "capacity-optimized-prioritized"
        },
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
                 "Overrides": [
                        {
                           "InstanceType": "r4.2xlarge",    
                           "Priority": 1,
                           "Placement": {
                               "AvailabilityZone": "us-west-2a"
                           },
                      },
                       {
                           "InstanceType": "m4.2xlarge",
                           "Priority": 2,
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           },
                       }, 
                       {
                           "InstanceType": "c5.2xlarge",
                           "Priority": 3,
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           }
                       }
                  ] 
             }
    ],
    "TargetCapacitySpecification": {
            "TotalTargetCapacity": 50,
            "DefaultTargetCapacityType": "spot"
}
```

## 예제 10: price-capacity-optimized 플릿에서 스팟 인스턴스 시작
<a name="ec2-fleet-config11"></a>

다음 예제에서는 용량과 가격을 모두 최적화하는 스팟 할당 전략을 사용하여 EC2 Fleet을 구성하는 방법을 보여줍니다. 가격을 고려하면서 용량을 최적화하려면 스팟 `AllocationStrategy`를 `price-capacity-optimized`로 설정해야 합니다.

다음 예제에서는 3개의 시작 사양으로 3개의 스팟 용량 풀을 지정합니다. 목표 용량은 스팟 인스턴스 50개입니다. EC2 Fleet은 시작하는 인스턴스의 수에 대한 최적의 용량을 가진 스팟 용량 풀로 스팟 인스턴스 50개를 시작하는 동시에 가격이 가장 낮은 풀을 선택하려고 시도합니다.

```
{
    "SpotOptions": {
        "AllocationStrategy": "price-capacity-optimized",
        "MinTargetCapacity": 2,
        "SingleInstanceType": true
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price"
    },
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
                 "Overrides": [
                       {
                           "InstanceType": "r4.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2a"
                           },
                      },
                       {
                           "InstanceType": "m4.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           },
                       }, 
                       {
                           "InstanceType": "c5.2xlarge",
                           "Placement": {
                               "AvailabilityZone": "us-west-2b"
                           }
                       }
                 ] 
           }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 50,
        "OnDemandTargetCapacity":0,
        "SpotTargetCapacity":50,
        "DefaultTargetCapacityType": "spot"
    },
    "Type": "instant"
}
```

## 예제 11: 속성 기반 인스턴스 유형 선택 구성
<a name="ec2-fleet-config12"></a>

다음 예에서는 인스턴스 유형을 식별하는 데 속성 기반 인스턴스 유형 선택 방식을 사용하도록 EC2 Fleet을 구성하는 방법을 보여줍니다. 필요한 인스턴스 속성을 지정하려면 `InstanceRequirements` 구조에서 해당 속성을 지정합니다.

다음 예제에서는 2개의 인스턴스 속성이 지정됩니다.
+ `VCpuCount` - vCPU가 최소 2개로 지정되었습니다. 최댓값이 지정되지 않았으므로 최대 한도는 없습니다.
+ `MemoryMiB` - 메모리가 최소 4MiB로 지정되었습니다. 최댓값이 지정되지 않았으므로 최대 한도는 없습니다.

vCPU가 2개 이상이고 메모리가 4MiB 이상인 모든 인스턴스 유형이 식별됩니다. 단, [EC2 Fleet에서 플릿을 제공](ec2-fleet-attribute-based-instance-type-selection.md#how-ef-uses-abs)하는 경우 가격 보호 및 할당 전략에서 일부 인스턴스 유형이 제외될 수 있습니다.

지정 가능한 모든 속성의 목록과 설명은 *Amazon EC2 API 참조*에서 [InstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceRequirements.html)를 참조하세요.

```
{
	"SpotOptions": {
		"AllocationStrategy": "price-capacity-optimized"
	},
	"LaunchTemplateConfigs": [{
		"LaunchTemplateSpecification": {
			"LaunchTemplateName": "my-launch-template",
			"Version": "1"
		},
		"Overrides": [{
			"InstanceRequirements": {
				"VCpuCount": {
					"Min": 2
				},
				"MemoryMiB": {
					"Min": 4
				}
			}
		}]
	}],
	"TargetCapacitySpecification": {
		"TotalTargetCapacity": 20,
		"DefaultTargetCapacityType": "spot"
	},
	"Type": "instant"
}
```

# 예제 CLI 구성 스팟 플릿
<a name="spot-fleet-examples"></a>

다음과 같이 JSON 파일에서 스팟 플릿 구성을 정의하고, [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html) AWS CLI 명령으로 해당 파일을 참조하여 플릿을 생성할 수 있습니다.

```
aws ec2 request-spot-fleet --spot-fleet-request-config file://file_name.json
```

다음 예제는 다양한 스팟 플릿 사용 사례의 시작 구성을 보여줍니다. 구성 파라미터에 대한 자세한 내용은 [request-spot-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-fleet.html)을 참조하세요. 스팟 플릿 생성에 대한 자세한 내용은 [스팟 플릿 생성](create-spot-fleet.md)의 내용을 참조하세요.

**참고**  
스팟 플릿의 경우 시작 템플릿 또는 시작 사양에 네트워크 인터페이스 ID를 지정할 수 없습니다. 시작 템플릿 또는 시작 사양에서 `NetworkInterfaceID` 파라미터를 생략하세요.

**Topics**
+ [예제 1: 리전에서 최저 가격의 가용 영역을 사용하여 스팟 인스턴스 시작](#fleet-config1)
+ [예제 2: 목록에서 최저 가격의 가용 영역을 사용하여 스팟 인스턴스 시작](#fleet-config2)
+ [예제 3: 목록에서 최저 가격의 인스턴스 유형을 사용하여 스팟 인스턴스 시작](#fleet-config3)
+ [예 4. 요청에 대한 가격 재정의](#fleet-config4)
+ [예제 5: 다각화된 할당 전략을 사용하여 스팟 플릿 시작](#fleet-config5)
+ [예제 6: 인스턴스 가중치를 사용하여 스팟 플릿 시작](#fleet-config6)
+ [예제 7: 온디맨드 용량을 사용하여 스팟 플릿 시작](#fleet-config7)
+ [예제 8: 대체 스팟 인스턴스를 시작하도록 용량 리밸런싱 구성](#fleet-config8)
+ [예제 9: 용량 최적화 플릿에서 스팟 인스턴스 시작](#fleet-config9)
+ [예제 10: 용량 최적화 플릿에서 우선순위를 사용하여 스팟 인스턴스 시작](#fleet-config10)
+ [예제 11: priceCapacityOptimized 플릿에서 스팟 인스턴스 시작](#fleet-config11)
+ [예제 12: 속성 기반 인스턴스 유형 선택 구성](#fleet-config12)

## 예제 1: 리전에서 최저 가격의 가용 영역을 사용하여 스팟 인스턴스 시작
<a name="fleet-config1"></a>

다음 예는 가용 영역이나 서브넷이 없는 단일 시작 사양을 지정합니다. 스팟 플릿은 기본 서브넷을 보유한 최저 가격의 가용 영역에 있는 인스턴스를 시작합니다. 지불하는 가격이 온디맨드 가격을 초과하지 않습니다.

```
{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "KeyName": "my-key-pair",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "m3.medium",
          "IamInstanceProfile": {
              "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
          }
      }
  ]
}
```

## 예제 2: 목록에서 최저 가격의 가용 영역을 사용하여 스팟 인스턴스 시작
<a name="fleet-config2"></a>

다음 예는 가용 영역이나 서브넷은 다르지만 인스턴스 유형과 AMI는 같은 두 개의 시작 사양을 지정합니다.

**가용 영역**

스팟 플릿은 지정한 최저 가격의 가용 영역에 있는 기본 서브넷에서 인스턴스를 시작합니다.

```
{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "KeyName": "my-key-pair",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "m3.medium",
          "Placement": {
              "AvailabilityZone": "us-west-2a, us-west-2b"
          },
          "IamInstanceProfile": {
              "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
          }
      }
  ]
}
```

**서브넷**

기본 서브넷이나 기본이 아닌 서브넷을 지정할 수 있으며, 기본이 아닌 서브넷은 기본 VPC 또는 기본이 아닌 VPC의 서브넷일 수 있습니다. 스팟 서비스는 최저 가격의 가용 영역에 있는 서브넷에서 인스턴스를 시작합니다.

스팟 플릿 요청에서 동일한 가용 영역의 서로 다른 서브넷을 지정할 수 없습니다.

```
{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "KeyName": "my-key-pair",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "m3.medium",
          "SubnetId": "subnet-a61dafcf, subnet-65ea5f08",
          "IamInstanceProfile": {
              "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
          }
      }
  ]
}
```

인스턴스가 기본 VPC로 시작되는 경우, 인스턴스는 기본적으로 퍼블릭 IPv4 주소를 받습니다. 인스턴스가 기본이 아닌 VPC로 시작되는 경우, 인스턴스는 기본적으로 퍼블릭 IPv4 주소를 받지 않습니다. 시작 사양에서 네트워크 인터페이스를 사용하여 기본이 아닌 VPC에서 시작되는 인스턴스에 퍼블릭 IPv4 주소를 할당하세요. 네트워크 인터페이스를 지정할 때는 네트워크 인터페이스를 사용해 서브넷 ID 및 보안 그룹 ID를 반드시 포함시켜야 합니다.

```
  ...       
      {
          "ImageId": "ami-1a2b3c4d",
          "KeyName": "my-key-pair",
          "InstanceType": "m3.medium",
          "NetworkInterfaces": [
              {
                  "DeviceIndex": 0,
                  "SubnetId": "subnet-1a2b3c4d",
                  "Groups": [ "sg-1a2b3c4d" ],
                  "AssociatePublicIpAddress": true
              }
          ],
          "IamInstanceProfile": {
              "Arn": "arn:aws:iam::123456789012:instance-profile/my-iam-role"
          }
      }
  ...
```

## 예제 3: 목록에서 최저 가격의 인스턴스 유형을 사용하여 스팟 인스턴스 시작
<a name="fleet-config3"></a>

다음 예는 인스턴스 유형은 다르지만 AMI와 가용 영역 또는 서브넷은 같은 두 개의 시작 구성을 지정합니다. 스팟 플릿은 최저 가격으로 지정된 인스턴스 유형을 사용하여 인스턴스를 시작합니다.

**가용 영역**

```
{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "c5.4xlarge",
          "Placement": {
            "AvailabilityZone": "us-west-2b"
          }
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "r3.8xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      }
  ]
}
```

**서브넷**

```
{
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "c5.4xlarge",
          "SubnetId": "subnet-1a2b3c4d"
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "SecurityGroups": [
              {
                  "GroupId": "sg-1a2b3c4d"
              }
          ],
          "InstanceType": "r3.8xlarge",
          "SubnetId": "subnet-1a2b3c4d"
      }
  ]
}
```

## 예 4. 요청에 대한 가격 재정의
<a name="fleet-config4"></a>

기본 최고 가격인 온디맨드 가격을 사용하는 것이 좋습니다. 원할 경우 플릿 요청에 대한 최고 가격과 개별 시작 사양에 대한 최고 가격을 지정할 수 있습니다.

다음 예제에서는 플릿 요청에 대한 최고 가격과 세 가지 시작 사양 중 두 개에 대한 최고 가격을 지정합니다. 플릿 요청 대한 최고 가격은 최고 가격을 지정하지 않은 모든 시작 사양에 사용됩니다. 스팟 플릿은 최저 가격으로 인스턴스 유형을 사용하여 인스턴스를 시작합니다.

**가용 영역**

```
{
  "SpotPrice": "1.00",
  "TargetCapacity": 30,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          },
          "SpotPrice": "0.10"
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.4xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          },
          "SpotPrice": "0.20"
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.8xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      }
    ]
}
```

**서브넷**

```
{
  "SpotPrice": "1.00",
  "TargetCapacity": 30,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.2xlarge",
          "SubnetId": "subnet-1a2b3c4d",
          "SpotPrice": "0.10"
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.4xlarge",
          "SubnetId": "subnet-1a2b3c4d",
          "SpotPrice": "0.20"
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.8xlarge",
          "SubnetId": "subnet-1a2b3c4d"
      }
  ]
}
```

## 예제 5: 다각화된 할당 전략을 사용하여 스팟 플릿 시작
<a name="fleet-config5"></a>

다음 예제에서는 `diversified` 할당 전략을 사용합니다. 시작 사양의 인스턴스 유형은 다르지만 AMI와 가용 영역 또는 서브넷은 같습니다. 스팟 플릿은 3개의 시작 사양에 걸쳐 각 유형의 인스턴스가 10개씩 있도록 30개의 인스턴스를 분산합니다. 자세한 내용은 [할당 전략을 사용하여 EC2 플릿 또는 스팟 플릿이 스팟 및 온디맨드 용량을 충족하는 방법 결정](ec2-fleet-allocation-strategy.md) 섹션을 참조하세요.

**가용 영역**

```
{
  "SpotPrice": "0.70", 
  "TargetCapacity": 30,
  "AllocationStrategy": "diversified",
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c4.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "m3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "r3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      }
  ]
}
```

**서브넷**

```
{
    "SpotPrice": "0.70", 
    "TargetCapacity": 30,
    "AllocationStrategy": "diversified",
    "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
    "LaunchSpecifications": [
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "c4.2xlarge",
            "SubnetId": "subnet-1a2b3c4d"
        },
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "m3.2xlarge",
            "SubnetId": "subnet-1a2b3c4d"
        },
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "r3.2xlarge",
            "SubnetId": "subnet-1a2b3c4d"
        }
    ]
}
```

특정 가용 영역 중단 시 EC2 용량이 스팟 요청을 수행할 확률을 늘리는 가장 좋은 방법은, 영역 간에 분산하는 것입니다. 이 시나리오에서는 사용할 수 있는 각 가용 영역을 시작 사양에 포함합니다. 그리고 매번 같은 서브넷을 사용하는 대신 (각각 다른 영역에 매핑되는) 3개의 고유 서브넷을 사용합니다.

**가용 영역**

```
{
  "SpotPrice": "0.70", 
  "TargetCapacity": 30,
  "AllocationStrategy": "diversified",
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c4.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2a"
          }
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "m3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          }
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "r3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2c"
          }
      }
  ]
}
```

**서브넷**

```
{
    "SpotPrice": "0.70", 
    "TargetCapacity": 30,
    "AllocationStrategy": "diversified",
    "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
    "LaunchSpecifications": [
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "c4.2xlarge",
            "SubnetId": "subnet-1a2b3c4d"
        },
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "m3.2xlarge",
            "SubnetId": "subnet-2a2b3c4d"
        },
        {
            "ImageId": "ami-1a2b3c4d",
            "InstanceType": "r3.2xlarge",
            "SubnetId": "subnet-3a2b3c4d"
        }
    ]
}
```

## 예제 6: 인스턴스 가중치를 사용하여 스팟 플릿 시작
<a name="fleet-config6"></a>

다음 예제에서는 인스턴스 가중치를 사용하는데, 이는 곧 가격이 인스턴스 시간당이 아니라 단위 시간당 가격이라는 의미입니다. 각 시작 구성마다 다른 인스턴스 유형과 다른 가중치가 나열됩니다. 스팟 플릿은 단위 시간당 최저 가격의 인스턴스 유형을 선택합니다. 스팟 플릿은 목표 용량을 인스턴스 가중치로 나누어 시작할 스팟 인스턴스의 수를 계산합니다. 결과가 정수가 아닌 경우 스팟 플릿은 결과를 다음 정수로 반올림하므로 플릿 크기가 목표 용량을 밑돌지는 않습니다.

`r3.2xlarge` 요청이 성공하면 스팟이 이들 인스턴스 중 4개를 프로비저닝합니다. 20을 6으로 나누면 총 3.33개의 인스턴스가 되는데, 이를 올림 처리하여 4개의 인스턴스가 됩니다.

`c3.xlarge` 요청이 성공하면 스팟이 이들 인스턴스 7개를 프로비저닝합니다. 20을 3으로 나누면 총 6.66개의 인스턴스가 되는데, 이를 올림 처리하여 7개의 인스턴스가 됩니다.

자세한 내용은 [인스턴스 가중치를 사용하여 EC2 플릿 또는 스팟 플릿의 비용 및 성능 관리](ec2-fleet-instance-weighting.md) 섹션을 참조하세요.

**가용 영역**

```
{
  "SpotPrice": "0.70",
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "r3.2xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          },
          "WeightedCapacity": 6
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.xlarge",
          "Placement": {
              "AvailabilityZone": "us-west-2b"
          },
          "WeightedCapacity": 3
      }
    ]
}
```

**서브넷**

```
{
  "SpotPrice": "0.70",
  "TargetCapacity": 20,
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "LaunchSpecifications": [
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "r3.2xlarge",
          "SubnetId": "subnet-1a2b3c4d",
          "WeightedCapacity": 6
      },
      {
          "ImageId": "ami-1a2b3c4d",
          "InstanceType": "c3.xlarge",
          "SubnetId": "subnet-1a2b3c4d",
          "WeightedCapacity": 3
      }
  ]
}
```

## 예제 7: 온디맨드 용량을 사용하여 스팟 플릿 시작
<a name="fleet-config7"></a>

항상 인스턴스 용량을 사용할 수 있도록 스팟 플릿 요청에 온디맨드 용량에 대한 요청을 포함할 수 있습니다. 용량이 있는 경우 온디맨드 요청이 항상 이행됩니다. 용량이 있고 가용 상태일 경우 목표 용량의 잔고는 스팟으로 이행됩니다.

다음 예에서는 원하는 목표 용량을 10으로 지정합니다. 이 중 5는 온디맨드 용량이어야 합니다. 스팟 용량은 지정되지 않습니다. 스팟 용량은 목표 용량에서 온디맨드 용량을 뺀 잔액으로 암시됩니다. Amazon EC2는 온디맨드로 5개의 용량 단위를 시작하고 사용 가능한 Amazon EC2 용량(10-5=5) 및 가용성이 있는 경우 5개의 용량 단위를 스팟으로 시작합니다.

```
{
  "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
  "AllocationStrategy": "lowestPrice",
  "TargetCapacity": 10,
  "SpotPrice": null,
  "ValidFrom": "2018-04-04T15:58:13Z",
  "ValidUntil": "2019-04-04T15:58:13Z",
  "TerminateInstancesWithExpiration": true,
  "LaunchSpecifications": [],
  "Type": "maintain",
  "OnDemandTargetCapacity": 5,
  "LaunchTemplateConfigs": [
    {
      "LaunchTemplateSpecification": {
        "LaunchTemplateId": "lt-0dbb04d4a6cca5ad1",
        "Version": "2"
      },
      "Overrides": [
        {
          "InstanceType": "t2.medium",
          "WeightedCapacity": 1,
          "SubnetId": "subnet-d0dc51fb"
        }
      ]
    }
  ]
}
```

## 예제 8: 대체 스팟 인스턴스를 시작하도록 용량 리밸런싱 구성
<a name="fleet-config8"></a>

다음 예제에서는 Amazon EC2에서 플릿의 스팟 인스턴스에 대한 리밸런싱 권고가 생성될 때 대체 스팟 인스턴스를 시작하도록 스팟 플릿을 구성합니다. 스팟 인스턴스의 자동 대체를 구성하려면 `ReplacementStrategy`에 `launch-before-terminate`를 지정합니다. 새 대체 스팟 인스턴스가 시작되는 시점부터 이전 스팟 인스턴스가 자동으로 삭제될 때까지의 시간 지연을 구성하려면 `termination-delay`에 대해 초 단위로 값을 지정합니다. 자세한 내용은 [구성 옵션](ec2-fleet-capacity-rebalance.md#ec2-fleet-capacity-rebalance-config-options) 섹션을 참조하세요.

**참고**  
인스턴스 종료 절차가 완료되는 데 걸리는 시간을 예측할 수 있는 경우에만 `launch-before-terminate`를 사용하는 것이 좋습니다. 이렇게 하면 종료 절차가 완료된 후에만 이전 인스턴스가 종료됩니다. 두 인스턴스가 실행되는 동안에는 두 인스턴스에 대해 요금이 청구됩니다.

용량 리밸런싱 전략의 효과는 스팟 플릿 요청에 지정된 스팟 용량 풀 수에 따라 달라집니다. 다양한 인스턴스 유형 및 가용 영역 세트로 플릿을 구성하고 `AllocationStrategy`에 대해 `capacityOptimized`를 지정하는 것이 좋습니다. 용량 리밸런싱에 대해 스팟 플릿을 구성할 때 고려해야 할 사항에 대한 자세한 내용은 [EC2 플릿 및 스팟 플릿의 용량 리밸런싱을 사용하여 위험이 있는 스팟 인스턴스 교체](ec2-fleet-capacity-rebalance.md) 섹션을 참조하세요.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "capacityOptimized",
        "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateName": "LaunchTemplate",
                    "Version": "1"
                },
                 "Overrides": [
                       {
                           "InstanceType": "c3.large",
                           "WeightedCapacity": 1,
                           "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       },
                       {
                           "InstanceType": "c4.large",
                           "WeightedCapacity": 1,
                           "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       },
                       {
                           "InstanceType": "c5.large",
                           "WeightedCapacity": 1,
                           "Placement": {
                               "AvailabilityZone": "us-east-1a"
                           }
                       }
                ] 
          }
    ],
        "TargetCapacity": 5,
        "SpotMaintenanceStrategies": {
            "CapacityRebalance": {
                "ReplacementStrategy": "launch-before-terminate",
                "TerminationDelay": "720"
            }
        }
    }
}
```

## 예제 9: 용량 최적화 플릿에서 스팟 인스턴스 시작
<a name="fleet-config9"></a>

다음 예제에서는 용량을 최적화하는 스팟 할당 전략을 사용하여 스팟 플릿을 구성하는 방법을 보여줍니다. 용량을 최적화하려면 `AllocationStrategy`를 `capacityOptimized`로 설정해야 합니다.

다음 예제에서는 3개의 시작 사양으로 3개의 스팟 용량 풀을 지정합니다. 목표 용량은 스팟 인스턴스 50개입니다. 스팟 플릿은 시작하는 인스턴스의 수에 대한 최적의 용량을 가진 스팟 용량 풀로 스팟 인스턴스 50개를 시작하려고 시도합니다.

```
{
    "TargetCapacity": "50",
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "capacityOptimized",
    },
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
            "Overrides": [
                {
                    "InstanceType": "r4.2xlarge",  
                    "AvailabilityZone": "us-west-2a"
                },
                {
                    "InstanceType": "m4.2xlarge",
                    "AvailabilityZone": "us-west-2b"
                }, 
                {
                    "InstanceType": "c5.2xlarge",
                    "AvailabilityZone": "us-west-2b"
                }
            ] 
        }
    ]
}
```

## 예제 10: 용량 최적화 플릿에서 우선순위를 사용하여 스팟 인스턴스 시작
<a name="fleet-config10"></a>

다음 예제에서는 최선의 노력을 기준으로 우선순위를 사용하는 동안 용량을 최적화하는 스팟 할당 전략을 사용하여 스팟 플릿을 구성하는 방법을 보여줍니다.

`capacityOptimizedPrioritized` 할당 전략을 사용할 때 `Priority` 파라미터를 사용하여 스팟 인스턴스 풀의 우선순위를 지정할 수 있습니다. 여기서 숫자가 낮을수록 우선순위는 높습니다. 여러 스팟 용량 풀에 선호도가 동일한 경우 동일한 우선순위를 설정해도 됩니다. 우선순위가 설정되지 않은 풀은 우선순위 측면에서 마지막으로 고려됩니다.

스팟 용량 풀의 우선순위를 지정하려면 `AllocationStrategy`를 `capacityOptimizedPrioritized`로 설정해야 합니다. 스팟 플릿은 용량을 우선으로 최적화하지만 최선의 노력을 기준으로 우선순위를 따릅니다. 예를 들어 스팟 플릿에서 최적 용량으로 프로비저닝하는 데 우선순위가 큰 영향을 미치지 않을 수 있습니다. 이 옵션은 중단 가능성을 최소화해야 하고 특정 인스턴스 유형에 대한 선호도가 중요한 워크로드에 적합합니다.

다음 예제에서는 3개의 시작 사양으로 3개의 스팟 용량 풀을 지정합니다. 각 풀의 우선순위가 지정되며, 여기서 숫자가 낮을수록 우선순위가 높습니다. 목표 용량은 스팟 인스턴스 50개입니다. 스팟 플릿은 가장 높은 우선순위의 스팟 용량 풀로 50개의 스팟 인스턴스를 시작하려고 시도하지만 먼저 용량을 최적화합니다.

```
{
    "TargetCapacity": "50",
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "capacityOptimizedPrioritized"
    },
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
            "Overrides": [
                {
                    "InstanceType": "r4.2xlarge",    
                   "Priority": 1,
                    "AvailabilityZone": "us-west-2a"
                },
                {
                           "InstanceType": "m4.2xlarge",
                           "Priority": 2,
                           "AvailabilityZone": "us-west-2b"
                }, 
                {
                           "InstanceType": "c5.2xlarge",
                           "Priority": 3,
                           "AvailabilityZone": "us-west-2b"
                }
            ] 
        }
    ]
}
```

## 예제 11: priceCapacityOptimized 플릿에서 스팟 인스턴스 시작
<a name="fleet-config11"></a>

다음 예제에서는 용량과 가격을 모두 최적화하는 스팟 할당 전략을 사용하여 스팟 플릿을 구성하는 방법을 보여줍니다. 가격을 고려하면서 용량을 최적화하려면 스팟 `AllocationStrategy`를 `priceCapacityOptimized`로 설정해야 합니다.

다음 예제에서는 3개의 시작 사양으로 3개의 스팟 용량 풀을 지정합니다. 목표 용량은 스팟 인스턴스 50개입니다. 스팟 플릿은 시작하는 인스턴스의 수에 대한 최적의 용량을 가진 스팟 용량 풀로 스팟 인스턴스 50개를 시작하는 동시에 가격이 가장 낮은 풀을 선택하려고 시도합니다.

```
{
    "SpotFleetRequestConfig": {
        "AllocationStrategy": "priceCapacityOptimized",
        "OnDemandAllocationStrategy": "lowestPrice",
        "ExcessCapacityTerminationPolicy": "default",
        "IamFleetRole": "arn:aws:iam::111111111111:role/aws-ec2-spot-fleet-tagging-role",
        "LaunchTemplateConfigs": [
            {
                "LaunchTemplateSpecification": {
                    "LaunchTemplateId": "lt-0123456789example",
                    "Version": "1"
                },
                "Overrides": [
                     {
                           "InstanceType": "r4.2xlarge",  
                           "AvailabilityZone": "us-west-2a"
                      },
                      {
                           "InstanceType": "m4.2xlarge",
                           "AvailabilityZone": "us-west-2b"
                      }, 
                      {
                           "InstanceType": "c5.2xlarge",
                           "AvailabilityZone": "us-west-2b"
                      }
                ]
            }
        ],
        "TargetCapacity": 50,
        "Type": "request"
    }
}
```

## 예제 12: 속성 기반 인스턴스 유형 선택 구성
<a name="fleet-config12"></a>

다음 예에서는 인스턴스 유형을 식별하는 데 속성 기반 인스턴스 유형 선택 방식을 사용하도록 스팟 플릿을 구성하는 방법을 보여줍니다. 필요한 인스턴스 속성을 지정하려면 `InstanceRequirements` 구조에서 해당 속성을 지정합니다.

다음 예제에서는 2개의 인스턴스 속성이 지정됩니다.
+ `VCpuCount` - vCPU가 최소 2개로 지정되었습니다. 최댓값이 지정되지 않았으므로 최대 한도는 없습니다.
+ `MemoryMiB` - 메모리가 최소 4MiB로 지정되었습니다. 최댓값이 지정되지 않았으므로 최대 한도는 없습니다.

vCPU가 2개 이상이고 메모리가 4MiB 이상인 모든 인스턴스 유형이 식별됩니다. 단, [스팟 플릿에서 플릿을 제공](ec2-fleet-attribute-based-instance-type-selection.md#how-ef-uses-abs)하는 경우 가격 보호 및 할당 전략에서 일부 인스턴스 유형이 제외될 수 있습니다.

지정 가능한 모든 속성의 목록과 설명은 *Amazon EC2 API 참조*에서 [InstanceRequirements](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_InstanceRequirements.html)를 참조하세요.

```
{
	"AllocationStrategy": "priceCapacityOptimized",
	"TargetCapacity": 20,
	"Type": "request",
	"LaunchTemplateConfigs": [{
		"LaunchTemplateSpecification": {
			"LaunchTemplateName": "my-launch-template",
			"Version": "1"
		},
		"Overrides": [{
			"InstanceRequirements": {
				"VCpuCount": {
					"Min": 2
				},
				"MemoryMiB": {
					"Min": 4
				}
			}
		}]
	}]
}
```

# EC2 Fleet 및 스팟 플릿 할당량
<a name="fleet-quotas"></a>

AWS 계정에는 각 AWS 서비스에 대한 기본 할당량(이전에는 제한이라고 함)이 있습니다. 다르게 표시되지 않는 한, 리전별로 각 할당량이 적용됩니다.

EC2 Fleet 또는 스팟 플릿에서 시작되는 인스턴스에는 [스팟 인스턴스 제한](using-spot-limits.md) 및 [볼륨 제한](volume_limits.md)과 같은 일반적인 Amazon EC2 할당량이 적용됩니다.

추가로 AWS 계정에는 EC2 Fleet 및 스팟 플릿과 관련된 할당량이 있습니다.


****  

| 할당량 설명 | 할당량 | 
| --- | --- | 
| 리전당 active, deleted\$1running, cancelled\$1running 상태인 maintain 및 request 유형의 EC2 Fleet 및 스팟 플릿 수 | 1,000 ¹ ² ³ | 
| instant 유형의 EC2 Fleet 수 | 무제한 | 
| maintain 및 request 유형의 EC2 Fleet 및 스팟 플릿에 대한 스팟 용량 풀 수(인스턴스 유형과 서브넷의 고유한 조합) | 300 ¹ | 
| instant 유형의 EC2 Fleet에 대한 스팟 용량 풀 수(인스턴스 유형과 서브넷의 고유한 조합) | 무제한 | 
| 시작 사양의 사용자 데이터 크기 | 16KB ² | 
| EC2 Fleet 또는 스팟 플릿당 목표 용량 | 10,000개 | 
| 리전 내 모든 EC2 Fleet 및 스팟 플릿의 목표 용량 | 100,000 ¹ | 
|  스팟 플릿 요청 또는 스팟 플릿 요청으로 리전을 확장할 수 없습니다.  |  | 
| 스팟 플릿 요청 또는 스팟 플릿 요청으로 동일한 가용 영역의 서로 다른 서브넷을 확장할 수 없습니다. |  | 

¹ 이러한 할당량은 사용자의 EC2 Fleet 및 스팟 플릿 모두에 적용됩니다.

² 하드 할당량입니다. 사용자는 이러한 할당량의 증가를 요청할 수 없습니다.

³ EC2 Fleet을 삭제하거나 스팟 플릿 요청을 취소한 후, 그리고 사용자가 요청을 삭제하거나 취소 시 플릿이 스팟 인스턴스를 종료하지 *않아야* 한다고 지정한 경우, 플릿 요청은 `deleted_running`(EC2 Fleet) 또는 `cancelled_running`(스팟 플릿) 상태가 되고 인스턴스는 중단되거나 사용자가 수동으로 종료하지 않는 한 계속 실행됩니다. 만약 인스턴스를 종료하면 플릿 요청은 `deleted_terminating`(EC2 Fleet) 또는 `cancelled_terminating`(스팟 플릿) 상태가 되며 이러한 할당량에 포함되지 않습니다. 자세한 내용은 [EC2 Fleet 요청 및 플릿의 인스턴스 삭제](delete-fleet.md) 및 [스팟 플릿 요청 취소(삭제)](cancel-spot-fleet.md)(을)를 참조하세요.

## 목표 용량의 할당량 증가 요청
<a name="fleet-quota-increase-request"></a>

목표 용량의 기본 할당량 이상이 필요한 경우 할당량 증가를 요청할 수 있습니다.

**목표 용량의 할당량 증가 요청**

1. 지원 센터 [사례 생성(Create case)](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-ec2-fleet) 양식을 엽니다.

1. **서비스 한도 증가(Service Limit increase)**를 선택합니다.

1. **제한 유형(Limit type)**에서 **EC2 Fleet**을 선택합니다.

1. **리전**에서 할당량 증가를 요청할 AWS 리전을 선택합니다.

1. **한도(Limit)**에서, 증가시킬 할당량에 따라 **플릿당 목표 플릿 용량(단위)(Target Fleet Capacity per Fleet (in units))** 또는 **리전당 목표 플릿 용량(단위)(Target Fleet Capacity per Region (in units))**을 선택합니다.

1. **새 한도 값(New limit value)**에 새 할당량 값을 입력합니다.

1. 다른 할당량 증가를 요청하려면 **다른 요청 추가(Add another request)**를 선택하고 4\$16단계를 반복합니다.

1. **사용 사례 설명(Use case description)**에서 할당량 증가를 요청하는 이유를 입력합니다.

1. **문의 옵션(Contact options)**에서 선호하는 문의 언어와 문의 방법을 지정합니다.

1. **제출**을 선택합니다.