EC2 Fleet 만들기
EC2 Fleet 만들기
EC2 Fleet을 만들려면 JSON 파일에 플릿 구성을 정의하고 create-fleet 명령으로 그 파일을 참조해요. JSON 파일에서 플릿의 총 대상 용량, Spot 인스턴스·On-Demand 인스턴스의 별도 대상 용량, 그리고 플릿의 인스턴스 구성을 정의하는 시작 템플릿(AMI, 인스턴스 유형, 서브넷 또는 가용 영역, 하나 이상의 보안 그룹 등)을 지정해야 해요. 선택적으로 시작 템플릿 구성을 덮어쓰는 파라미터, EC2 용량 풀에서 Spot·On-Demand 인스턴스를 선택하는 할당 전략, 플릿에 대해 지불할 의사가 있는 최대 금액 같은 추가 구성을 지정할 수 있어요. 자세한 내용은 EC2 Fleet 또는 Spot Fleet의 구성 옵션 문서를 참고하세요.
출처: 문서
본문
EC2 Fleet은 용량을 사용할 수 있을 때 On-Demand 인스턴스를 실행하고, 최대 가격이 Spot 가격을 초과하고 용량을 사용할 수 있을 때 Spot 인스턴스를 실행해요.
플릿에 Spot 인스턴스가 포함되고 유형이 maintain이라면, Amazon EC2는 Spot 인스턴스가 중단될 때 플릿의 대상 용량을 유지하려 시도해요.
EC2 Fleet 제한 사항
EC2 Fleet에는 다음 제한 사항이 적용돼요.
- EC2 Fleet 생성은 Amazon EC2 API, AWS CLI, AWS SDKs, CloudFormation으로만 사용할 수 있어요.
- EC2 Fleet 요청은 AWS 리전을 가로지를 수 없어요. 각 리전마다 별도의 EC2 Fleet을 만들어야 해요.
- EC2 Fleet 요청은 같은 가용 영역의 서로 다른 서브넷을 가로지를 수 없어요.
EC2 Fleet 만들기
EC2 Fleet을 사용해 인스턴스 플릿을 실행하려면 플릿 요청에서 다음 파라미터만 지정하면 되고, 나머지 파라미터는 플릿이 기본값을 사용해요.
LaunchTemplateId또는LaunchTemplateName– 사용할 시작 템플릿을 지정합니다(인스턴스 유형, 가용 영역 같은 실행할 인스턴스의 파라미터 포함).TotalTargetCapacity– 플릿의 총 대상 용량을 지정합니다.DefaultTargetCapacityType– 기본 구매 옵션이 On-Demand인지 Spot인지 지정합니다.
시작 템플릿에 지정된 파라미터를 덮어쓰려면 하나 이상의 오버라이드(override)를 지정할 수 있어요. 각 오버라이드는 인스턴스 유형, 가용 영역, 서브넷, 최대 가격에 따라 달라질 수 있고, 다른 가중 용량(weighted capacity)을 포함할 수 있어요.
인스턴스 유형을 지정하는 대신 인스턴스가 가져야 하는 속성을 지정할 수 있고, Amazon EC2가 그 속성을 가진 모든 인스턴스 유형을 식별해요. 자세한 내용은 EC2 Fleet 또는 Spot Fleet의 인스턴스 유형 선택 속성 지정하기 문서를 참고하세요.
instant 유형의 EC2 Fleet에서는 다음 시작 템플릿 파라미터도 덮어쓸 수 있어요.
IamInstanceProfile– 인스턴스와 연결할 IAM 인스턴스 프로파일. 자세한 내용은 Amazon EC2용 IAM 역할 문서를 참고하세요.KeyName– 인스턴스에 사용할 키 페어의 이름. 자세한 내용은 Amazon EC2 키 페어와 Amazon EC2 인스턴스 문서를 참고하세요.MetadataOptions– 인스턴스의 인스턴스 메타데이터 서비스 구성. 자세한 내용은 인스턴스 메타데이터에 접근하기 위해 Instance Metadata Service 사용하기 문서를 참고하세요.
instant 유형의 EC2 Fleet에서는 AMI ID 대신 Systems Manager 파라미터를 지정할 수 있어요. 오버라이드 또는 시작 템플릿에서 Systems Manager 파라미터를 지정할 수 있어요. 자세한 내용은 AMI ID 대신 Systems Manager 파라미터 사용하기 문서를 참고하세요.
instant 유형의 EC2 Fleet에서는 LaunchTemplateSpecificationUserData 파라미터를 사용해 시작 템플릿 사양 수준에서 사용자 데이터를 지정할 수도 있어요. 이 파라미터로 base64로 인코딩된 사용자 데이터를 시작 템플릿 자체에 포함하지 않고 제공할 수 있어요. 사용자 데이터는 base64 인코딩 전에 16KB를 초과하면 안 됩니다.
플릿 파라미터를 JSON 파일에 지정할 수 있어요. 지정할 수 있는 모든 파라미터에 대한 정보는 모든 EC2 Fleet 구성 옵션 보기 문서를 참고하세요.
플릿 구성 예시는 EC2 Fleet용 예시 CLI 구성 문서를 참고하세요.
현재 EC2 Fleet 생성용 콘솔 지원은 없어요.
EC2 Fleet 만들기
create-fleet 명령을 사용해 플릿을 만들고 플릿 구성 파라미터가 포함된 JSON 파일을 지정합니다.
aws ec2 create-fleet --cli-input-json file://file_name.json
다음은 request 또는 maintain 유형의 플릿에 대한 예시 출력입니다.
{
"FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE"
}
다음은 대상 용량을 실행한 instant 유형의 플릿에 대한 예시 출력입니다. 응답에는 실행된 각 인스턴스 집합에 대한 가용 영역 ID, 가용 영역 이름, 서브넷 ID가 포함됩니다.
{
"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,
"AvailabilityZoneId": "use1-az1",
"AvailabilityZone": "us-east-1a",
"SubnetId": "subnet-0123456789abcdefEXAMPLE"
},
{
"LaunchTemplateAndOverrides": {
"LaunchTemplateSpecification": {
"LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
"Version": "1"
},
"Overrides": {
"InstanceType": "c4.large",
"AvailabilityZone": "us-east-1a"
}
},
"Lifecycle": "on-demand",
"InstanceIds": [
"i-5678901234abcdef0",
"i-5432109876abcdef9"
],
"AvailabilityZoneId": "use1-az1",
"AvailabilityZone": "us-east-1a",
"SubnetId": "subnet-0123456789abcdefEXAMPLE"
}
]
}
다음은 대상 용량의 일부를 실행하고 실행되지 않은 인스턴스에 대한 오류를 포함한 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": []
}
비정상 Spot 인스턴스를 교체하는 EC2 Fleet 만들기
EC2 Fleet은 플릿 안의 인스턴스의 상태를 2분마다 확인해요. 인스턴스의 상태는 healthy 또는 unhealthy 중 하나예요.
EC2 Fleet은 Amazon EC2가 제공하는 상태 검사를 사용해 인스턴스의 상태를 결정해요. 인스턴스 상태 검사 또는 시스템 상태 검사의 상태가 3회 연속 상태 검사에서 impaired면 인스턴스는 unhealthy로 결정돼요. 자세한 내용은 Amazon EC2 인스턴스의 상태 검사 문서를 참고하세요.
플릿이 비정상 Spot 인스턴스를 교체하도록 구성할 수 있어요. ReplaceUnhealthyInstances를 true로 설정하면 Spot 인스턴스가 unhealthy로 보고될 때 교체돼요. 비정상 Spot 인스턴스가 교체되는 동안 플릿이 최대 몇 분 동안 대상 용량 아래로 내려갈 수 있어요.
요구 사항
- 상태 검사 교체는 대상 용량을 유지하는 EC2 Fleet(
maintain유형의 플릿)에서만 지원되며,request나instant유형의 플릿에서는 지원되지 않아요. - 상태 검사 교체는 Spot 인스턴스에서만 지원돼요. On-Demand 인스턴스에는 이 기능이 지원되지 않아요.
- 비정상 인스턴스를 교체하도록 EC2 Fleet을 구성할 수 있는 것은 만들 때뿐이에요.
- 사용자는
ec2:DescribeInstanceStatus작업을 호출할 권한이 있을 때만 상태 검사 교체를 사용할 수 있어요.
비정상 Spot 인스턴스를 교체하도록 EC2 Fleet 구성하기
- EC2 Fleet 만들기의 EC2 Fleet 생성 정보를 사용합니다.
- 비정상 Spot 인스턴스를 교체하도록 플릿을 구성하려면 JSON 파일에서
ReplaceUnhealthyInstances에true를 지정합니다.
모든 EC2 Fleet 구성 옵션 보기
EC2 Fleet 구성 파라미터의 전체 목록을 보려면 JSON 파일을 생성할 수 있어요. 각 파라미터에 대한 설명은 create-fleet 문서를 참고하세요.
가능한 모든 EC2 Fleet 파라미터가 있는 JSON 파일 생성하기
create-fleet(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 사전 요구 사항
- EC2 Fleet 태그 지정하기