유형이 instant인 EC2 Fleet 구성하기

유형이 instant인 EC2 Fleet 구성하기

유형이 instant인 EC2 Fleet은 **동기식 일회성 요청(synchronous one-time request)**으로, 원하는 용량을 실행하기 위해 한 번만 시도해요. API 응답에는 실행된 인스턴스와 함께, 실행하지 못한 인스턴스에 대한 오류가 나열됩니다. 유형이 instant인 EC2 Fleet을 사용하면 몇 가지 이점이 있는데, 이 문서에서 설명합니다. 문서 끝에 예시 구성도 제공돼요.

출처: 문서

본문

EC2 인스턴스를 실행하기 위해 **실행 전용 API(launch-only API)**가 필요한 워크로드에는 RunInstances API를 사용할 수 있어요. 하지만 RunInstances로는 On-Demand Instance 또는 Spot Instance 중 하나만 실행할 수 있고, 같은 요청에서 둘 다 실행할 수는 없습니다. 게다가 RunInstances로 Spot Instance를 실행하면 Spot Instance 요청이 하나의 인스턴스 유형과 하나의 가용 영역으로 제한됩니다. 이것은 하나의 Spot 용량 풀(Spot capacity pool), 즉 같은 인스턴스 유형과 가용 영역을 가진 사용되지 않는 인스턴스 집합을 대상으로 해요. 만약 해당 Spot 용량 풀에 요청을 충족할 충분한 Spot Instance 용량이 없다면, RunInstances 호출은 실패합니다.

RunInstances로 Spot Instance를 실행하는 대신, 다음과 같은 이점을 위해 type 파라미터를 instant로 설정한 CreateFleet API를 사용할 것을 권장합니다.

  • 한 요청에서 On-Demand Instance와 Spot Instance를 함께 실행할 수 있어요. EC2 Fleet은 On-Demand Instance, Spot Instance, 또는 둘 다를 실행할 수 있습니다. Spot Instance 요청은 사용 가능한 용량이 있고 요청의 시간당 최대 가격이 Spot 가격을 초과하면 충족됩니다.
  • Spot Instance의 가용성을 높여요. 유형이 instant인 EC2 Fleet을 사용하면 Spot 모범 사례를 따라 Spot Instance를 실행해 다음과 같은 이점을 얻을 수 있어요.
    • Spot 모범 사례: 인스턴스 유형과 가용 영역에 유연하게 대처하기. 여러 인스턴스 유형과 가용 영역을 지정하면 Spot 용량 풀의 수가 늘어나요. 이렇게 하면 Spot 서비스가 원하는 Spot 컴퓨팅 용량을 찾아 배포할 가능성이 높아집니다. 일반적인 기준은 각 워크로드에 대해 최소 10개 이상의 인스턴스 유형에 유연하게 대처하고, 모든 가용 영역이 VPC에서 사용하도록 구성되어 있는지 확인하는 거예요.
    • Spot 모범 사례: price-capacity-optimized 할당 전략 사용하기. price-capacity-optimized 할당 전략은 가장 사용 가능한 Spot 용량 풀에서 인스턴스를 찾아낸 다음, 이 중 가장 낮은 가격의 풀에서 인스턴스를 자동으로 프로비저닝합니다. Spot Instance 용량이 최적 용량의 풀에서 나오기 때문에, Amazon EC2가 용량을 다시 필요로 할 때 Spot Instance가 중단될 가능성이 줄어듭니다.
  • 더 넓은 기능 집합에 접근할 수 있어요. 실행 전용 API가 필요하고, EC2 Fleet이 대신 관리하도록 하기보다 인스턴스 수명 주기를 직접 관리하고 싶은 워크로드에는 RunInstances API 대신 유형이 instant인 EC2 Fleet을 사용하세요. EC2 Fleet은 다음 예시에서 보여주듯 RunInstances보다 더 넓은 기능 집합을 제공합니다. 다른 모든 워크로드에는 Amazon EC2 Auto Scaling을 사용해야 해요. Auto Scaling은 ELB 기반 애플리케이션, 컨테이너화된 워크로드, 큐 처리 작업 같은 다양한 워크로드에 더 포괄적인 기능 집합을 제공합니다.

유형이 instant인 EC2 Fleet을 사용해 Capacity Blocks에 인스턴스를 실행할 수 있어요. 자세한 내용은 Tutorial: Configure your EC2 Fleet to launch instances into Capacity Blocks 문서를 참고하세요.

AWS 서비스인 Amazon EC2 Auto Scaling과 Amazon EMR은 유형이 instant인 EC2 Fleet을 사용해 EC2 인스턴스를 실행합니다.

유형이 instant인 EC2 Fleet의 사전 조건 (Prerequisites)

EC2 Fleet 생성 사전 조건은 EC2 Fleet prerequisites 문서를 참고하세요.

instant EC2 Fleet이 작동하는 방식

유형이 instant인 EC2 Fleet으로 작업할 때 이벤트 순서는 다음과 같아요.

  1. 구성 (Configure): CreateFleet 요청 유형을 instant로 구성합니다. 자세한 내용은 Create an EC2 Fleet 문서를 참고하세요. API 호출을 한 후에는 요청을 수정할 수 없어요.
  2. 요청 (Request): API 호출을 하면 Amazon EC2가 원하는 용량에 대해 동기식 일회성 요청을 합니다.
  3. 응답 (Response): API 응답에는 실행된 인스턴스와 함께 실행하지 못한 인스턴스에 대한 오류가 나열됩니다.
  4. 설명 (Describe): EC2 Fleet을 설명하거나, EC2 Fleet과 연결된 인스턴스를 나열하고, EC2 Fleet의 기록을 볼 수 있어요.
  5. 인스턴스 종료 (Terminate instances): 언제든 인스턴스를 종료할 수 있어요.
  6. 플릿 요청 삭제 (Delete fleet request): 플릿 요청은 수동 또는 자동으로 삭제할 수 있습니다.
    • 수동 (Manual): 인스턴스가 실행된 후 플릿 요청을 삭제할 수 있어요. 실행 중인 인스턴스가 있는 삭제된 instant 플릿은 지원되지 않습니다. instant 플릿을 삭제하면 Amazon EC2가 자동으로 모든 인스턴스를 종료합니다. 인스턴스가 1000개를 초과하는 플릿의 경우 삭제 요청이 실패할 수 있어요. 플릿에 인스턴스가 1000개보다 많으면 먼저 대부분의 인스턴스를 수동으로 종료해 1000개 이하로 남기세요. 그런 다음 플릿을 삭제하면 나머지 인스턴스가 자동으로 종료됩니다.
    • 자동 (Automatic): Amazon EC2는 다음 중 하나가 발생한 후 얼마 뒤에 플릿 요청을 삭제합니다.
      • 모든 인스턴스가 종료된 경우.
      • 플릿이 인스턴스 실행에 실패한 경우.

예시 (Examples)

다음 예시에서는 다양한 사용 사례에 유형이 instant인 EC2 Fleet을 사용하는 방법을 보여줘요. EC2 CreateFleet API 파라미터 사용에 대한 자세한 내용은 Amazon EC2 API Reference의 CreateFleet 문서를 참고하세요.

  • Example 1: Launch Spot Instances with the capacity-optimized allocation strategy
  • Example 2: Launch a single Spot Instance with the capacity-optimized allocation strategy
  • Example 3: Launch Spot Instances using instance weighting
  • Example 4: Launch Spot Instances within single Availability Zone
  • Example 5: Launch Spot Instances of single instance type within single Availability zone
  • Example 6: Launch Spot Instances only if minimum target capacity can be launched
  • Example 7: Launch Spot Instances only if minimum target capacity can be launched of same Instance Type in a single Availability Zone
  • Example 8: Launch instances with multiple Launch Templates
  • Example 9: Launch Spot Instance with a base of On-Demand Instances
  • Example 10: Launch Spot Instances using capacity-optimized allocation strategy with a base of On-Demand Instances using Capacity Reservations and the prioritized allocation strategy
  • Example 11: Launch Spot Instances using capacity-optimized-prioritized allocation strategy
  • Example 12: Specify a Systems Manager parameter instead of an AMI ID

Example 1: capacity-optimized 할당 전략으로 Spot Instance 실행하기

다음 예시는 유형이 instant인 EC2 Fleet에 필요한 파라미터, 즉 실행 템플릿(launch template), 대상 용량(target capacity), 기본 구매 옵션(default purchasing option), 실행 템플릿 재정의(launch template overrides)를 지정합니다.

  • 실행 템플릿은 실행 템플릿 이름과 버전 번호로 식별됩니다.
  • 12개의 실행 템플릿 재정의는 각각 별도의 가용 영역에 있는 4개의 서로 다른 인스턴스 유형과 3개의 서로 다른 서브넷을 지정합니다. 각 인스턴스 유형과 서브넷 조합이 Spot 용량 풀을 정의해 총 12개의 Spot 용량 풀이 만들어집니다.
  • 플릿의 대상 용량은 20개 인스턴스입니다.
  • 기본 구매 옵션은 spot이라서, 플릿은 실행 중인 인스턴스 수에 대해 최적 용량을 가진 Spot 용량 풀에 20개의 Spot Instance를 실행하려 시도합니다.
{
    "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"
}

Example 2: capacity-optimized 할당 전략으로 단일 Spot Instance 실행하기

TotalTargetCapacity를 1로 설정하고 유형이 instant인 EC2 Fleet API 호출을 여러 번 하면, 한 번에 하나의 Spot Instance를 최적으로 실행할 수 있어요.

다음 예시는 유형이 instant인 EC2 Fleet에 필요한 파라미터, 즉 실행 템플릿, 대상 용량, 기본 구매 옵션, 실행 템플릿 재정의를 지정합니다. 실행 템플릿은 실행 템플릿 이름과 버전 번호로 식별됩니다. 12개의 실행 템플릿 재정의는 각각 별도의 가용 영역에 있는 4개의 서로 다른 인스턴스 유형과 3개의 서로 다른 서브넷을 가집니다. 플릿의 대상 용량은 1개 인스턴스이고 기본 구매 옵션은 spot이라서, 플릿은 capacity-optimized 할당 전략에 따라 12개의 Spot 용량 풀 중 하나에서 가장 사용 가능한 용량 풀의 Spot Instance를 실행하려 시도합니다.

{
    "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"
}

Example 3: 인스턴스 가중치(instance weighting)를 사용해 Spot Instance 실행하기

다음 예시는 인스턴스 가중치를 사용하는데, 이는 가격이 인스턴스 시간당이 아니라 **단위 시간당(per unit hour)**이라는 뜻이에요. 각 실행 구성은 다른 인스턴스 유형과, 워크로드 한 단위가 15GB 메모리와 4개 vCPU를 요구한다고 가정했을 때 해당 인스턴스에서 실행할 수 있는 워크로드 단위 수에 따른 다른 가중치를 나열합니다. 예를 들어 m5.xlarge(4 vCPU, 16GB 메모리)는 1단위를 실행할 수 있고 가중치 1이며, m5.2xlarge(8 vCPU, 32GB 메모리)는 2단위를 실행할 수 있고 가중치 2입니다. 총 대상 용량은 40단위로 설정됩니다. 기본 구매 옵션은 spot이고 할당 전략은 capacity-optimized라서, 40개의 m5.xlarge(40÷1), 20개의 m5.2xlarge(40÷2), 10개의 m5.4xlarge(40÷4), 5개의 m5.8xlarge(40÷8), 또는 capacity-optimized 할당 전략에 따라 가중치 합이 원하는 용량이 되는 인스턴스 유형의 조합이 실행됩니다.

자세한 내용은 Use instance weighting to manage cost and performance of your EC2 Fleet or Spot Fleet 문서를 참고하세요.

{
   "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"
}

Example 4: 단일 가용 영역 내에서 Spot Instance 실행하기

Spot 옵션 SingleAvailabilityZone을 true로 설정하면 플릿이 모든 인스턴스를 단일 가용 영역에서 실행하도록 구성할 수 있어요.

12개의 실행 템플릿 재정의는 서로 다른 인스턴스 유형과 서브넷(각각 별도의 가용 영역)을 가지지만 가중치 용량은 같습니다. 총 대상 용량은 20개 인스턴스, 기본 구매 옵션은 spot, Spot 할당 전략은 capacity-optimized입니다. EC2 Fleet은 최적 용량의 Spot 용량 풀에서 실행 사양을 사용해 단일 가용 영역의 20개 Spot Instance를 실행합니다.

{
    "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"
}

Example 5: 단일 가용 영역에서 단일 인스턴스 유형의 Spot Instance 실행하기

Spot 옵션 SingleInstanceType을 true, SingleAvailabilityZone을 true로 설정하면 플릿이 같은 인스턴스 유형의 모든 인스턴스를 단일 가용 영역에서 실행하도록 구성할 수 있어요.

12개의 실행 템플릿 재정의는 서로 다른 인스턴스 유형과 서브넷(각각 별도의 가용 영역)을 가지지만 가중치 용량은 같습니다. 총 대상 용량은 20개 인스턴스, 기본 구매 옵션은 spot, Spot 할당 전략은 capacity-optimized입니다. EC2 Fleet은 실행 사양을 사용해 최적 용량의 Spot Instance 풀에서 단일 가용 영역의 같은 인스턴스 유형 20개 Spot Instance를 실행합니다.

{
    "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"
}

Example 6: 최소 대상 용량을 실행할 수 있을 때만 Spot Instance 실행하기

Spot 옵션 MinTargetCapacity를 함께 실행하려는 최소 대상 용량으로 설정하면, 최소 대상 용량을 실행할 수 있을 때만 인스턴스를 실행하도록 플릿을 구성할 수 있어요.

MinTargetCapacity를 지정할 때는 SingleInstanceType 또는 SingleAvailabilityZone 파라미터 중 하나 이상을 반드시 지정해야 합니다. 이 예시에서는 SingleInstanceType을 지정해서 20개의 인스턴스가 모두 같은 인스턴스 유형을 사용해야 합니다.

12개의 실행 템플릿 재정의는 서로 다른 인스턴스 유형과 서브넷(각각 별도의 가용 영역)을 가지지만 가중치 용량은 같습니다. 총 대상 용량과 최소 대상 용량 모두 20개 인스턴스로 설정되고, 기본 구매 옵션은 spot, Spot 할당 전략은 capacity-optimized입니다. EC2 Fleet은 20개 인스턴스를 모두 동시에 실행할 수 있을 때만 실행 템플릿 재정의를 사용해 최적 용량의 Spot 용량 풀에서 20개의 Spot Instance를 실행합니다.

{
    "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"
}

Example 7: 단일 가용 영역에서 같은 인스턴스 유형의 최소 대상 용량을 실행할 수 있을 때만 Spot Instance 실행하기

Spot 옵션 MinTargetCapacity를 함께 실행하려는 최소 대상 용량으로 설정하고 SingleInstanceType과 SingleAvailabilityZone 옵션을 함께 설정하면, 단일 가용 영역에서 단일 인스턴스 유형으로 최소 대상 용량을 실행할 수 있을 때만 인스턴스를 실행하도록 플릿을 구성할 수 있어요.

실행 템플릿을 재정의하는 12개의 실행 사양은 서로 다른 인스턴스 유형과 서브넷(각각 별도의 가용 영역)을 가지지만 가중치 용량은 같습니다. 총 대상 용량과 최소 대상 용량 모두 20개 인스턴스로 설정되고, 기본 구매 옵션은 spot, Spot 할당 전략은 capacity-optimized, SingleInstanceType은 true, SingleAvailabilityZone은 true입니다. EC2 Fleet은 20개 인스턴스를 모두 동시에 실행할 수 있을 때만 실행 사양을 사용해 최적 용량의 Spot 용량 풀에서 단일 가용 영역의 같은 인스턴스 유형 20개 Spot Instance를 실행합니다.

{
    "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"
}

Example 8: 여러 실행 템플릿으로 인스턴스 실행하기

여러 실행 템플릿을 지정하면, 서로 다른 인스턴스 유형이나 인스턴스 유형 그룹에 대해 서로 다른 실행 사양으로 인스턴스를 실행하도록 플릿을 구성할 수 있어요. 이 예시에서는 각각 다른 EBS 볼륨 크기를 가지도록 ec2-fleet-lt-4xl, ec2-fleet-lt-9xl, ec2-fleet-lt-18xl 실행 템플릿에 구성했습니다.

이 예시에서는 크기에 따라 3개의 인스턴스 유형에 3개의 서로 다른 실행 템플릿을 사용합니다. 모든 실행 템플릿의 실행 사양 재정의는 인스턴스 유형의 vCPU를 기준으로 인스턴스 가중치를 사용합니다. 총 대상 용량은 144단위, 기본 구매 옵션은 spot, Spot 할당 전략은 capacity-optimized입니다. EC2 Fleet은 ec2-fleet-4xl 실행 템플릿을 사용해 9개 c5n.4xlarge(144÷16), 또는 ec2-fleet-9xl 실행 템플릿을 사용해 4개 c5n.9xlarge(144÷36), 또는 ec2-fleet-18xl 실행 템플릿을 사용해 2개 c5n.18xlarge(144÷72), 또는 capacity-optimized 할당 전략에 따라 가중치 합이 원하는 용량이 되는 인스턴스 유형의 조합을 실행할 수 있습니다.

{
    "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"
}

Example 9: On-Demand Instance 베이스와 함께 Spot Instance 실행하기

다음 예시는 플릿의 총 대상 용량을 20개 인스턴스로, On-Demand Instance 대상 용량을 5개로 지정합니다. 기본 구매 옵션은 spot입니다. 플릿은 지정된 대로 5개의 On-Demand Instance를 실행하지만, 총 대상 용량을 충족하려면 15개 인스턴스를 더 실행해야 합니다. 차이에 대한 구매 옵션은 TotalTargetCapacity – OnDemandTargetCapacity = DefaultTargetCapacityType으로 계산되어, 플릿은 capacity-optimized 할당 전략에 따라 12개의 Spot 용량 풀 중 하나에서 15개의 Spot Instance를 실행합니다.

{
    "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"
}

Example 10: Capacity Reservations와 prioritized 할당 전략을 사용한 On-Demand Instance 베이스로 capacity-optimized 할당 전략으로 Spot Instance 실행하기

기본 대상 용량 유형을 spot으로 하고 On-Demand Instance 베이스를 실행할 때, Capacity Reservations의 사용 전략을 use-capacity-reservations-first로 설정하면 플릿이 먼저 On-Demand Capacity Reservations를 사용하도록 구성할 수 있어요. 그리고 여러 인스턴스 풀에 사용되지 않은 Capacity Reservations가 있다면 선택된 On-Demand 할당 전략이 적용됩니다. 이 예시에서 On-Demand 할당 전략은 prioritized입니다.

이 예시에는 6개의 사용되지 않은 Capacity Reservations가 있습니다. 이는 플릿의 On-Demand 대상 용량 10개보다 적습니다.

계정에는 2개의 풀에 다음과 같은 6개의 사용되지 않은 Capacity Reservations가 있습니다. 각 풀의 Capacity Reservations 수는 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"
}

다음 플릿 구성은 이 예시와 관련된 구성만 보여줍니다. On-Demand 할당 전략은 prioritized, Capacity Reservations의 사용 전략은 use-capacity-reservations-first, Spot 할당 전략은 capacity-optimized입니다. 총 대상 용량은 20, On-Demand 대상 용량은 10, 기본 대상 용량 유형은 spot입니다.

{
    "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"
}

앞의 구성으로 instant 플릿을 만든 후, 대상 용량을 충족하기 위해 다음 20개의 인스턴스가 실행됩니다.

  • us-east-1a의 c5.large On-Demand Instance 7개 – us-east-1a의 c5.large가 먼저 우선순위가 지정되고 3개의 사용되지 않은 c5.large Capacity Reservations가 있습니다. Capacity Reservations가 먼저 사용되어 3개의 On-Demand Instance를 실행하고, 이 예시에서는 prioritized인 On-Demand 할당 전략에 따라 추가 4개의 On-Demand Instance가 실행됩니다.
  • us-east-1a의 m5.large On-Demand Instance 3개 – us-east-1a의 m5.large가 두 번째로 우선순위가 지정되고 3개의 사용되지 않은 m5.large Capacity Reservations가 있습니다.
  • capacity-optimized 할당 전략에 따라 최적 용량을 가진 12개 Spot 용량 풀 중 하나의 Spot Instance 10개

플릿이 실행된 후 describe-capacity-reservations를 실행해 사용되지 않은 Capacity Reservations가 얼마나 남아 있는지 확인할 수 있어요. 이 예시에서는 다음 응답이 보일 텐데, c5.large와 m5.large Capacity Reservations가 모두 사용되었음을 보여줍니다.

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

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

Example 11: capacity-optimized-prioritized 할당 전략으로 Spot Instance 실행하기

다음 예시는 유형이 instant인 EC2 Fleet에 필요한 파라미터, 즉 실행 템플릿, 대상 용량, 기본 구매 옵션, 실행 템플릿 재정의를 지정합니다. 실행 템플릿은 실행 템플릿 이름과 버전 번호로 식별됩니다. 실행 템플릿을 재정의하는 12개의 실행 사양은 우선순위가 할당된 4개의 서로 다른 인스턴스 유형과 각각 별도의 가용 영역에 있는 3개의 서로 다른 서브넷을 가집니다. 플릿의 대상 용량은 20개 인스턴스이고 기본 구매 옵션은 spot이라서, 플릿은 best-effort 방식으로 우선순위를 구현하되 먼저 용량을 최적화하는 capacity-optimized-prioritized 할당 전략에 따라 12개의 Spot 용량 풀 중 하나에서 20개의 Spot Instance를 실행하려 시도합니다.

{
    "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"
}

Example 12: AMI ID 대신 Systems Manager 파라미터 지정하기

다음 예시는 실행 템플릿을 사용해 플릿의 인스턴스 구성을 지정합니다. 이 예시에서 ImageId에는 AMI ID 대신 Systems Manager 파라미터로 AMI를 참조합니다. 인스턴스 실행 시 Systems Manager 파라미터가 AMI ID로 해석됩니다.

이 예시에서 Systems Manager 파라미터는 유효한 형식인 resolve:ssm:golden-ami로 지정됩니다. Systems Manager 파라미터에는 다른 유효한 형식도 있어요. 자세한 내용은 Use a Systems Manager 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"
            }]
        }]
    }
}

더 알아보기 (Learn more)