EC2 Fleet 또는 Spot Fleet에서 인스턴스 유형 선택을 위한 속성 지정하기
EC2 Fleet 또는 Spot Fleet에서 인스턴스 유형 선택을 위한 속성 지정하기
EC2 Fleet이나 Spot Fleet을 만들 때 플릿의 On-Demand 인스턴스와 Spot 인스턴스를 구성하기 위해 하나 이상의 인스턴스 유형을 지정해야 해요. 인스턴스 유형을 수동으로 지정하는 대신, 인스턴스가 가져야 하는 속성을 지정하면 Amazon EC2가 그 속성을 가진 모든 인스턴스 유형을 식별해요. 이것을 attribute-based instance type selection(속성 기반 인스턴스 유형 선택) 이라고 해요. 예를 들어 인스턴스에 필요한 vCPU의 최소/최대 수를 지정하면 플릿이 그 vCPU 요구 사항을 충족하는 사용 가능한 인스턴스 유형을 사용해 인스턴스를 실행해요.
속성 기반 인스턴스 유형 선택은 어떤 인스턴스 유형을 사용할지 유연할 수 있는 워크로드와 프레임워크(예: 컨테이너 또는 웹 플릿 실행, 빅데이터 처리, CI/CD(지속적 통합 및 배포) 도구 구현)에 이상적이에요.
출처: 문서
본문
이점
속성 기반 인스턴스 유형 선택은 다음과 같은 이점이 있어요.
- 올바른 인스턴스 유형을 쉽게 사용 – 사용 가능한 인스턴스 유형이 너무 많아 워크로드에 맞는 인스턴스 유형을 찾는 데 시간이 걸릴 수 있어요. 인스턴스 속성을 지정하면 인스턴스 유형이 자동으로 워크로드에 필요한 속성을 갖게 돼요.
- 구성 단순화 – 플릿에 여러 인스턴스 유형을 수동으로 지정하려면 인스턴스 유형마다 별도의 시작 템플릿 오버라이드를 만들어야 해요. 하지만 속성 기반 인스턴스 유형 선택에서는 여러 인스턴스 유형을 제공하기 위해 시작 템플릿 또는 시작 템플릿 오버라이드에 인스턴스 속성만 지정하면 돼요.
- 새 인스턴스 유형 자동 사용 – 인스턴스 유형 대신 인스턴스 속성을 지정하면 새 세대 인스턴스 유형이 릴리스될 때 플릿이 이를 사용할 수 있어 플릿 구성을 "미래 대비"할 수 있어요.
- 인스턴스 유형 유연성 – 인스턴스 유형 대신 인스턴스 속성을 지정하면 플릿이 Spot 인스턴스를 실행하기 위해 광범위한 인스턴스 유형 중에서 선택할 수 있어, 인스턴스 유형 유연성의 Spot 모범 사례를 따르게 돼요.
속성 기반 인스턴스 유형 선택 작동 방식
플릿 구성에서 속성 기반 인스턴스 유형 선택을 사용하려면 인스턴스 유형 목록을 인스턴스가 필요로 하는 인스턴스 속성 목록으로 바꿔요. EC2 Fleet 또는 Spot Fleet은 지정된 인스턴스 속성을 가진 사용 가능한 인스턴스 유형에서 인스턴스를 실행해요.
인스턴스 속성 유형
컴퓨팅 요구 사항을 표현하기 위해 지정할 수 있는 여러 인스턴스 속성이 있어요. 예:
- vCPU 수 – 인스턴스당 최소/최대 vCPU 수.
- 메모리 – 인스턴스당 최소/최대 GiB 메모리.
- 로컬 스토리지 – 로컬 스토리지에 EBS를 사용할지 인스턴스 스토어 볼륨을 사용할지.
- 버스트 가능 성능 – T4g, T3a, T3, T2 유형을 포함한 T 인스턴스 패밀리를 사용할지 여부.
각 속성의 설명과 기본값은 Amazon EC2 API Reference의 InstanceRequirements 를 참고하세요.
속성 기반 인스턴스 유형 선택을 구성할 위치
콘솔 사용 여부에 따라 다음처럼 인스턴스 속성을 지정할 수 있어요.
콘솔에서는 다음 플릿 구성 구성 요소에서 인스턴스 속성을 지정할 수 있어요.
- 시작 템플릿에서 지정하고, 그 후 플릿 요청에서 시작 템플릿 참조
- (Spot Fleet만) 플릿 요청에서 지정
AWS CLI에서는 다음 하나 또는 모든 플릿 구성 구성 요소에서 인스턴스 속성을 지정할 수 있어요.
- 시작 템플릿에서 지정하고, 그 후 플릿 요청에서 시작 템플릿 참조
- 시작 템플릿 오버라이드에서 지정
서로 다른 AMI를 사용하는 인스턴스의 혼합을 원하면 여러 시작 템플릿 오버라이드에 인스턴스 속성을 지정할 수 있어요. 예를 들어 인스턴스 유형에 따라 x86 및 Arm 기반 프로세서를 사용할 수 있어요.
- (Spot Fleet만) 시작 사양에서 지정
플릿 프로비저닝 시 EC2 Fleet 또는 Spot Fleet이 속성 기반 인스턴스 유형 선택을 사용하는 방식
EC2 Fleet 또는 Spot Fleet은 플릿을 다음과 같이 프로비저닝해요.
- 지정된 속성을 가진 인스턴스 유형을 식별합니다.
- 가격 보호(price protection)를 사용해 제외할 인스턴스 유형을 결정합니다.
- 일치하는 인스턴스 유형이 있는 AWS 리전 또는 가용 영역을 기준으로 인스턴스 실행을 고려할 용량 풀을 결정합니다.
- 지정된 할당 전략을 적용해 어느 용량 풀에서 인스턴스를 실행할지 결정합니다.
속성 기반 인스턴스 유형 선택은 플릿을 프로비저닝할 용량 풀을 고르지 않는다는 점을 유의하세요. 그건 할당 전략 의 역할입니다.
할당 전략을 지정하면 플릿이 지정된 할당 전략에 따라 인스턴스를 실행합니다.
- Spot 인스턴스의 경우 속성 기반 인스턴스 유형 선택은
price capacity optimized,capacity optimized,lowest price할당 전략을 지원합니다.lowest priceSpot 할당 전략은 Spot 인스턴스에 대한 중단 위험이 가장 높으므로 권장하지 않습니다. - On-Demand 인스턴스의 경우 속성 기반 인스턴스 유형 선택은
lowest price할당 전략을 지원합니다. - 지정된 인스턴스 속성을 가진 인스턴스 유형에 대한 용량이 없으면 인스턴스를 실행할 수 없고 플릿이 오류를 반환합니다.
가격 보호(Price protection)
가격 보호는 지정한 속성에 맞더라도 여러분이 너무 비싸다고 여길 인스턴스 유형을 EC2 Fleet 또는 Spot Fleet이 사용하지 못하게 하는 기능이에요. 가격 보호를 사용하려면 가격 임계값을 설정합니다. 그러면 Amazon EC2가 여러분의 속성을 가진 인스턴스 유형을 선택할 때 임계값보다 비싼 인스턴스 유형을 제외해요.
Amazon EC2가 가격 임계값을 계산하는 방식은 다음과 같아요.
- Amazon EC2는 먼저 여러분의 속성과 일치하는 인스턴스 유형 중에서 가장 저렴한 인스턴스 유형을 식별합니다.
- 그런 다음 가격 보호 파라미터에 지정한 값(백분율로 표시)을 식별된 인스턴스 유형의 가격과 곱합니다. 그 결과가 가격 임계값으로 사용되는 가격입니다.
On-Demand 인스턴스와 Spot 인스턴스에 대한 별도의 가격 임계값이 있어요.
속성 기반 인스턴스 유형 선택으로 플릿을 만들면 가격 보호가 기본으로 활성화됩니다. 기본값을 유지하거나 직접 지정할 수 있습니다.
가격 보호를 끌 수도 있습니다. 가격 보호 임계값이 없음을 나타내려면 999999 같은 높은 백분율 값을 지정합니다.
가장 저렴한 인스턴스 유형이 식별되는 방식
Amazon EC2는 지정한 속성과 일치하는 인스턴스 유형 중에서 가장 저렴한 가격의 인스턴스 유형을 식별해 가격 임계값의 기준이 되는 가격을 결정합니다. 이는 다음과 같이 수행됩니다.
- 먼저 여러분의 속성과 일치하는 현재 세대 C, M 또는 R 인스턴스 유형을 봅니다. 일치 항목이 있으면 가장 저렴한 인스턴스 유형을 식별합니다.
- 일치 항목이 없으면 여러분의 속성과 일치하는 현재 세대 인스턴스 유형을 봅니다. 일치 항목이 있으면 가장 저렴한 인스턴스 유형을 식별합니다.
- 일치 항목이 없으면 여러분의 속성과 일치하는 이전 세대 인스턴스 유형을 보고 가장 저렴한 인스턴스 유형을 식별합니다.
On-Demand 인스턴스 가격 보호
On-Demand 인스턴스 유형의 가격 보호 임계값은 식별된 가장 저렴한 On-Demand 인스턴스 유형(OnDemandMaxPricePercentageOverLowestPrice)보다 높은 백분율로 계산됩니다. 지불할 의사가 있는 더 높은 백분율을 지정합니다. 이 파라미터를 지정하지 않으면 기본값 20이 사용되어 식별된 가격보다 20% 높은 가격 보호 임계값을 계산합니다.
예를 들어 식별된 On-Demand 인스턴스 가격이 0.4271이고 25를 지정하면 가격 임계값은 0.4271보다 25% 높습니다. 계산은 다음과 같습니다: 0.4271 * 1.25 = 0.533875. 계산된 가격은 On-Demand 인스턴스에 지불할 의사가 있는 최대 가격이며, 이 예시에서 Amazon EC2는 0.533875보다 비싼 On-Demand 인스턴스 유형을 제외합니다.
Spot 인스턴스 가격 보호
기본적으로 Amazon EC2는 광범위한 인스턴스 유형에서 일관되게 선택하도록 최적의 Spot 인스턴스 가격 보호를 자동으로 적용합니다. 가격 보호를 직접 수동으로 설정할 수도 있습니다. 그러나 Amazon EC2가 대신 처리하게 하는 것이 Spot 용량이 충족될 가능성을 높일 수 있습니다.
다음 옵션 중 하나를 사용해 가격 보호를 수동으로 지정할 수 있습니다. 수동으로 가격 보호를 설정하려면 첫 번째 옵션을 권장합니다.
- 식별된 가장 저렴한 On-Demand 인스턴스 유형의 백분율(
MaxSpotPriceAsPercentageOfOptimalOnDemandPrice) — 예를 들어 식별된 On-Demand 인스턴스 유형 가격이0.4271이고60을 지정하면 가격 임계값은0.4271의 60%입니다.0.4271 * 0.60 = 0.25626으로 계산됩니다. 계산된 가격은 Spot 인스턴스에 지불할 의사가 있는 최대 가격이며, 이 예시에서 Amazon EC2는0.25626보다 비싼 Spot 인스턴스 유형을 제외합니다. - 식별된 가장 저렴한 Spot 인스턴스 유형보다 높은 백분율(
SpotMaxPricePercentageOverLowestPrice) — 예를 들어 식별된 Spot 인스턴스 유형 가격이0.1808이고25를 지정하면 가격 임계값은0.1808보다 25% 높습니다.0.1808 * 1.25 = 0.226으로 계산됩니다. Spot 가격은 변동될 수 있으므로 가격 보호 임계값도 변동될 수 있어 이 파라미터의 사용을 권장하지 않습니다.
가격 보호 임계값 지정하기
AWS CLI로 가격 보호 임계값 지정하기
AWS CLI로 EC2 Fleet 또는 Spot Fleet을 만드는 동안 플릿을 속성 기반 인스턴스 유형 선택으로 구성한 후 다음을 수행합니다.
- On-Demand 인스턴스 가격 보호 임계값을 지정하려면 JSON 구성 파일의
InstanceRequirements구조에서OnDemandMaxPricePercentageOverLowestPrice에 임계값을 백분율로 입력합니다. - Spot 인스턴스 가격 보호 임계값을 지정하려면 JSON 구성 파일의
InstanceRequirements구조에서 다음 파라미터 중 하나 를 지정합니다.MaxSpotPriceAsPercentageOfOptimalOnDemandPrice에 임계값을 백분율로 입력합니다.SpotMaxPricePercentageOverLowestPrice에 임계값을 백분율로 입력합니다.
자세한 내용은 EC2 Fleet 만들기 또는 Spot Fleet 만들기 를 참고하세요.
(Spot Fleet만) 콘솔로 가격 보호 임계값 지정하기
콘솔에서 Spot Fleet을 만드는 동안 플릿을 속성 기반 인스턴스 유형 선택으로 구성한 후 다음을 수행합니다.
- On-Demand 인스턴스 가격 보호 임계값을 지정하려면 Additional instance attribute 아래에서 On-demand price protection을 선택하고, Add attribute를 선택한 다음 임계값을 백분율로 입력합니다.
- Spot 인스턴스 가격 보호 임계값을 지정하려면 Additional instance attribute 아래에서 Spot price protection을 선택하고, Add attribute를 선택하고, 가격의 기준이 될 값을 선택한 다음 임계값을 백분율로 입력합니다.
참고 — 플릿을 만들 때
TargetCapacityUnitType을vcpu또는memory-mib으로 설정하면 가격 보호 임계값이 인스턴스당 가격 대신 vCPU당 또는 메모리당 가격을 기준으로 적용됩니다.
성능 보호(Performance protection)
성능 보호 는 EC2 Fleet 또는 Spot Fleet이 지정된 성능 기준과 유사하거나 초과하는 인스턴스 유형을 사용하도록 보장하는 기능이에요. 성능 보호를 사용하려면 인스턴스 패밀리를 기준 참조(baseline reference)로 지정합니다. 지정된 인스턴스 패밀리의 역량이 허용 가능한 최저 성능 수준을 설정합니다. Amazon EC2가 인스턴스 유형을 선택할 때 지정한 속성과 성능 기준을 고려합니다. 성능 기준 아래로 떨어지는 인스턴스 유형은 다른 지정 속성과 일치하더라도 선택에서 자동으로 제외됩니다. 이렇게 하면 모든 선택된 인스턴스 유형이 지정된 인스턴스 패밀리가 설정한 기준과 유사하거나 더 나은 성능을 제공합니다. Amazon EC2는 이 기준을 사용해 인스턴스 유형 선택을 안내하지만, 선택된 인스턴스 유형이 모든 애플리케이션에서 항상 기준을 초과할 것이라는 보장은 없습니다.
현재 이 기능은 기준 성능 요소로 CPU 성능만 지원합니다. 지정된 인스턴스 패밀리의 CPU 프로세서 CPU 성능이 성능 기준 역할을 하여, 선택된 인스턴스 유형이 이 기준과 유사하거나 초과하도록 보장합니다. 같은 CPU 프로세서를 가진 인스턴스 패밀리는 네트워크나 디스크 성능이 달라도 동일한 필터링 결과를 낳아요. 예를 들어 기준 참조로 c6in 또는 c6i를 지정하면 두 인스턴스 패밀리가 같은 CPU 프로세서를 사용하므로 동일한 성능 기반 필터링 결과를 생성합니다.
지원되지 않는 인스턴스 패밀리
다음 인스턴스 패밀리는 성능 보호에 대해 지원되지 않습니다:
- 범용:
Mac1,Mac2,Mac2-m1ultra,Mac2-m2,Mac2-m2pro,M1,M2,T1 - 컴퓨팅 최적화:
C1 - 메모리 최적화:
U-3tb1,U-6tb1,U-9tb1,U-12tb1,U-18tb1,u-24tb1,U7i-12tb,U7in-16tb,U7in-24tb,U7in-32tb - 가속 컴퓨팅:
G3,G3s,P3dn,P4d,P5 - 고성능 컴퓨팅:
Hpc7g
지원되는 인스턴스 패밀리를 지정해 성능 보호를 활성화하면 반환되는 인스턴스 유형에서 위의 지원되지 않는 인스턴스 패밀리가 제외됩니다.
기준 성능 값으로 지원되지 않는 인스턴스 패밀리를 지정하면 API는 GetInstanceTypesFromInstanceRequirements에 대해 빈 응답을, CreateFleet, RequestSpotFleet, ModifyFleet, ModifySpotFleetRequest에 대해 예외를 반환합니다.
예시: CPU 성능 기준 설정
다음 예시의 인스턴스 요구 사항은 c6i 인스턴스 패밀리만큼 성능이 좋은 CPU 코어를 가진 인스턴스 유형으로 실행하는 것입니다. 이렇게 하면 다른 지정 인스턴스 요구 사항(예: vCPU 수)을 충족하더라도 CPU 프로세서 성능이 낮은 인스턴스 유형을 걸러냅니다. 예를 들어 지정한 인스턴스 속성에 4개의 vCPU와 16GB 메모리가 포함되어 있다면, 이 속성을 가지지만 CPU 성능이 c6i보다 낮은 인스턴스 유형은 선택에서 제외됩니다.
"BaselinePerformanceFactors": {
"Cpu": {
"References": [
{
"InstanceFamily": "c6i"
}
]
}
고려 사항
- EC2 Fleet 또는 Spot Fleet에서 인스턴스 유형 또는 인스턴스 속성 중 하나를 지정할 수 있지만 동시에 둘 다 지정할 수는 없습니다.
- CLI를 사용할 때 시작 템플릿 오버라이드가 시작 템플릿을 덮어씁니다. 예를 들어 시작 템플릿에 인스턴스 유형이 있고 시작 템플릿 오버라이드에 인스턴스 속성이 있으면 인스턴스 속성이 식별한 인스턴스가 시작 템플릿의 인스턴스 유형을 덮어씁니다.
- CLI를 사용할 때 인스턴스 속성을 오버라이드로 지정하면 가중치나 우선순위는 지정할 수 없습니다.
- 요청 구성에서 최대 4개의
InstanceRequirements구조를 지정할 수 있습니다.
EC2 Fleet을 속성 기반 인스턴스 유형 선택으로 만들기
EC2 Fleet을 속성 기반 인스턴스 유형 선택을 사용하도록 구성할 수 있습니다. Amazon EC2 콘솔을 사용해 EC2 Fleet을 만드는 것은 불가능합니다.
속성 기반 인스턴스 유형 선택의 속성은 InstanceRequirements 구조에 지정됩니다. 플릿 구성에 InstanceRequirements가 포함되면 InstanceType과 WeightedCapacity는 제외되어야 합니다. 인스턴스 속성과 동시에 플릿 구성을 결정할 수 없습니다.
AWS CLI 및 PowerShell 예시에서 다음 속성이 지정됩니다.
VCpuCount– 최소 2개, 최대 4개 vCPU. 최대 제한이 필요하지 않으면 최대값을 생략할 수 있습니다.MemoryMiB– 최소 8GiB, 최대 16GiB 메모리. 최대 제한이 필요하지 않으면 최대값을 생략할 수 있습니다.
이 구성은 24개 vCPU와 816GiB 메모리를 가진 인스턴스 유형을 식별합니다. 그러나 EC2 Fleet이 플릿을 프로비저닝할 때 가격 보호와 할당 전략이 일부 인스턴스 유형을 제외할 수 있습니다.
AWS CLI
create-fleet 명령을 사용해 EC2 Fleet을 만듭니다. 플릿 구성을 JSON 파일에 지정합니다.
aws ec2 create-fleet \
--region us-east-1 \
--cli-input-json file://file_name.json
다음 예시 file_name.json 파일에는 EC2 Fleet이 속성 기반 인스턴스 유형 선택을 사용하도록 구성하는 파라미터가 포함됩니다.
{
"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
New-EC2Fleet 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"
Spot Fleet을 속성 기반 인스턴스 유형 선택으로 만들기
중요 — Spot Fleet은 투자 계획이 없는 레거시 API예요. 대신 EC2 Fleet 또는 Auto Scaling 그룹 사용을 권장해요. 자세한 내용은 어떤 플릿 방법이 가장 좋을까요? 문서를 참고하세요.
플릿을 속성 기반 인스턴스 유형 선택을 사용하도록 구성할 수 있습니다.
속성 기반 인스턴스 유형 선택의 속성은 InstanceRequirements 구조에 지정됩니다. 플릿 구성에 InstanceRequirements가 포함되면 InstanceType과 WeightedCapacity는 제외되어야 합니다.
AWS CLI 및 PowerShell 예시에서 다음 속성이 지정됩니다.
VCpuCount– 최소 2개, 최대 4개 vCPU.MemoryMiB– 최소 8GiB, 최대 16GiB 메모리.
이 구성은 24개 vCPU와 816GiB 메모리를 가진 인스턴스 유형을 식별합니다. 그러나 Spot Fleet이 플릿을 프로비저닝할 때 가격 보호와 할당 전략이 일부 인스턴스 유형을 제외할 수 있습니다.
콘솔
- Amazon EC2 콘솔(https://console.aws.amazon.com/ec2/)을 엽니다.
- 탐색 창에서 Spot Requests를 선택한 다음 Request Spot Instances를 선택합니다.
- 단계에 따라 Spot Fleet을 만듭니다(자세한 내용은 정의된 파라미터를 사용한 Spot Fleet 요청 만들기 참고). Spot Fleet을 만드는 동안 다음처럼 플릿을 속성 기반 인스턴스 유형 선택으로 구성합니다.
- Instance type requirements에서 Specify instance attributes that match your compute requirements를 선택합니다.
- vCPUs에 원하는 최소 및 최대 vCPU 수를 입력합니다. 제한이 없도록 하려면 No minimum, No maximum, 또는 둘 다를 선택합니다.
- Memory (GiB) 에 원하는 최소 및 최대 메모리 양을 입력합니다. 제한이 없도록 하려면 No minimum, No maximum, 또는 둘 다를 선택합니다.
- (선택 사항) Additional instance attributes에서 하나 이상의 속성을 지정해 컴퓨팅 요구 사항을 더 자세히 표현할 수 있습니다. 각 추가 속성은 요청에 더 많은 제약을 추가합니다.
- (선택 사항) Preview matching instance types를 확장해 지정한 속성을 가진 인스턴스 유형을 봅니다.
AWS CLI
request-spot-fleet 명령을 사용해 Spot Fleet을 만듭니다. 플릿 구성을 JSON 파일에 지정합니다.
aws ec2 request-spot-fleet \
--region us-east-1 \
--spot-fleet-request-config file://file_name.json
다음 예시 file_name.json 파일에는 Spot Fleet이 속성 기반 인스턴스 유형 선택을 사용하도록 구성하는 파라미터가 포함됩니다.
{
"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 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 Fleet 구성과 유효하지 않은 구성 예시
AWS CLI로 EC2 Fleet을 만들 때 플릿 구성이 유효한지 확인해야 합니다. 다음 예시는 유효한 구성과 유효하지 않은 구성을 보여줍니다.
다음을 포함하는 구성은 유효하지 않은 것으로 간주됩니다.
InstanceRequirements와InstanceType을 둘 다 포함하는 단일Overrides구조- 하나는
InstanceRequirements를, 다른 하나는InstanceType을 가진 두Overrides구조 - 같은
LaunchTemplateSpecification내에서 겹치는 속성 값을 가진 두InstanceRequirements구조
예시 구성
- 유효한 구성: 오버라이드가 있는 단일 시작 템플릿
- 유효한 구성: 여러 InstanceRequirements가 있는 단일 시작 템플릿
- 유효한 구성: 각각 오버라이드가 있는 두 시작 템플릿
- 유효한 구성: InstanceRequirements만 지정, 겹치는 속성 값 없음
- 유효하지 않은 구성: Overrides가 InstanceRequirements와 InstanceType을 포함
- 유효하지 않은 구성: 두 Overrides가 InstanceRequirements와 InstanceType을 포함
- 유효하지 않은 구성: 겹치는 속성 값
유효한 구성: 오버라이드가 있는 단일 시작 템플릿
다음 구성은 유효합니다. 하나의 시작 템플릿과 하나의 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– 인스턴스 유형은 최대 10240MiB 메모리를 가져야 합니다. 최소 0은 최소 제한이 없음을 나타냅니다.MemoryGiBPerVCpu– 인스턴스 유형은 vCPU당 최대 10,000GiB 메모리를 가져야 합니다.Min파라미터는 선택 사항입니다. 생략하면 최소 제한이 없음을 나타냅니다.
TargetCapacityUnitType
TargetCapacityUnitType 파라미터는 대상 용량의 단위를 지정합니다. 예시에서 대상 용량은 5000이고 대상 용량 단위 유형은 vcpu로, 함께 5,000개 vCPU의 원하는 대상 용량을 지정합니다. EC2 Fleet은 플릿의 총 vCPU 수가 5,000개가 되도록 충분한 인스턴스를 실행합니다.
유효한 구성: 여러 InstanceRequirements가 있는 단일 시작 템플릿
다음 구성은 유효합니다. 하나의 시작 템플릿과 두 개의 InstanceRequirements 구조를 포함하는 하나의 Overrides 구조가 포함됩니다. InstanceRequirements에 지정된 속성이 겹치지 않으므로 유효합니다 — 첫 번째 InstanceRequirements 구조는 0-2개 vCPU의 VCpuCount를 지정하고, 두 번째 구조는 4-8개 vCPU를 지정합니다.
{
"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"
}
}
유효한 구성: 각각 오버라이드가 있는 두 시작 템플릿
다음 구성은 유효합니다. 각각 하나의 InstanceRequirements 구조를 포함하는 하나의 Overrides 구조를 가진 두 시작 템플릿이 포함됩니다. 이 구성은 같은 플릿에서 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만 지정, 겹치는 속성 값 없음
다음 구성은 유효합니다. 각각 시작 템플릿과 InstanceRequirements 구조를 포함하는 Overrides 구조를 가진 두 LaunchTemplateSpecification 구조가 포함됩니다. 값이 겹치지 않으므로 유효합니다 — 첫 번째 InstanceRequirements 구조는 0-2개 vCPU, 두 번째 구조는 4-8개 vCPU를 지정합니다.
{
"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을 포함
다음 구성은 유효하지 않습니다. 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"
}
}
유효하지 않은 구성: 두 Overrides가 InstanceRequirements와 InstanceType을 포함
다음 구성은 유효하지 않습니다. Overrides 구조가 InstanceRequirements와 InstanceType을 둘 다 포함합니다. 서로 다른 Overrides 구조에 있더라도 InstanceRequirements 또는 InstanceType 중 하나만 지정할 수 있습니다.
{
"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"
}
}
유효하지 않은 구성: 겹치는 속성 값
다음 구성은 유효하지 않습니다. 두 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"
}
}
유효한 Spot Fleet 구성과 유효하지 않은 구성 예시
AWS CLI로 Spot Fleet을 만들 때 플릿 구성이 유효한지 확인해야 합니다.
다음을 포함하는 구성은 유효하지 않은 것으로 간주됩니다.
InstanceRequirements와InstanceType을 둘 다 포함하는 단일Overrides구조- 하나는
InstanceRequirements를, 다른 하나는InstanceType을 가진 두Overrides구조 - 같은
LaunchTemplateSpecification내에서 겹치는 속성 값을 가진 두InstanceRequirements구조
예시 구성
- 유효한 구성: 오버라이드가 있는 단일 시작 템플릿
- 유효한 구성: 여러 InstanceRequirements가 있는 단일 시작 템플릿
- 유효한 구성: 각각 오버라이드가 있는 두 시작 템플릿
- 유효한 구성: InstanceRequirements만 지정, 겹치는 속성 값 없음
- 유효하지 않은 구성: 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": "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), MemoryMiB(최대 10240), MemoryGiBPerVCpu(최대 10,000)가 지정됩니다.
TargetCapacityUnitType
TargetCapacityUnitType 파라미터는 대상 용량의 단위를 지정합니다. 예시에서 대상 용량은 5000, 단위 유형은 vcpu로 5,000개 vCPU의 원하는 대상 용량을 지정합니다. Spot Fleet은 플릿의 총 vCPU 수가 5,000개가 되도록 충분한 인스턴스를 실행합니다.
유효한 구성: 여러 InstanceRequirements가 있는 단일 시작 템플릿
{
"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"
}
}
유효한 구성: 각각 오버라이드가 있는 두 시작 템플릿
{
"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만 지정, 겹치는 속성 값 없음
{
"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을 포함
{
"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"
}
}
유효하지 않은 구성: 두 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
}
}
}
]
},
{
"LaunchTemplateSpecification": {
"LaunchTemplateName": "MyOtherLaunchTemplate",
"Version": "1"
},
"Overrides": [
{
"InstanceType": "m5.large"
}
]
}
],
"TargetCapacity": 1,
"OnDemandTargetCapacity": 0,
"Type": "maintain"
}
}
유효하지 않은 구성: 겹치는 속성 값
{
"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"
}
}
지정된 속성을 가진 인스턴스 유형 미리 보기
get-instance-types-from-instance-requirements 명령을 사용해 지정한 속성과 일치하는 인스턴스 유형을 미리 볼 수 있습니다. 이것은 인스턴스를 실행하지 않고 요청 구성에 어떤 속성을 지정할지 알아내는 데 특히 유용합니다. 이 명령은 사용 가능한 용량을 고려하지 않습니다.
AWS CLI로 속성을 지정해 인스턴스 유형 목록 미리 보기
- (선택 사항) 지정할 수 있는 모든 가능한 속성을 생성하려면
get-instance-types-from-instance-requirements명령과--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
},
...
더 알아보기
- EC2 Fleet 만들기 / Spot Fleet 만들기