튜토리얼: EC2 Fleet이 targeted Capacity Reservations를 사용해 On-Demand 인스턴스를 실행하도록 구성하기
튜토리얼: EC2 Fleet이 targeted Capacity Reservations를 사용해 On-Demand 인스턴스를 실행하도록 구성하기
이 튜토리얼은 EC2 Fleet이 targeted Capacity Reservations에 On-Demand 인스턴스를 실행하도록 하는 데 필요한 모든 단계를 안내해요.
출처: 문서
본문
On-Demand 인스턴스를 실행할 때 먼저 targeted On-Demand Capacity Reservations를 사용하도록 플릿을 구성하는 방법을 배우게 돼요. 또한 총 On-Demand 대상 용량이 사용 가능한 미사용 Capacity Reservations 수를 초과할 때, 플릿이 나머지 대상 용량을 실행할 인스턴스 풀을 선택하는 데 지정된 할당 전략을 사용하도록 구성하는 방법도 배워요.
EC2 Fleet 구성
이 튜토리얼에서 플릿은 다음과 같이 구성돼요.
- 대상 용량: On-Demand 인스턴스 10개
- 총 미사용
targetedCapacity Reservations: 6개(플릿의 On-Demand 대상 용량 10개보다 적음) - Capacity Reservation 풀 수: 2개(
us-east-1a와us-east-1b) - 풀당 Capacity Reservations 수: 3개
- On-Demand 할당 전략:
lowest-price(미사용 Capacity Reservations 수가 On-Demand 대상 용량보다 적을 때, 플릿은 On-Demand 할당 전략을 기반으로 나머지 On-Demand 용량을 실행할 풀을 결정해요.)
lowest-price 할당 전략 대신 prioritized 할당 전략을 사용할 수도 있다는 점을 유의하세요.
targeted Capacity Reservations에 On-Demand 인스턴스를 실행하려면 여러 단계를 수행해야 해요:
- 1단계: Capacity Reservations 만들기
- 2단계: Capacity Reservation 리소스 그룹 만들기
- 3단계: Capacity Reservations를 Capacity Reservation 리소스 그룹에 추가하기
- (선택) 4단계: 리소스 그룹의 Capacity Reservations 보기
- 5단계: Capacity Reservation이 특정 리소스 그룹을 대상으로 하도록 지정하는 시작 템플릿 만들기
- (선택) 6단계: 시작 템플릿 설명하기
- 7단계: EC2 Fleet 만들기
- (선택) 8단계: 남은 미사용 Capacity Reservations 수 보기
1단계: Capacity Reservations 만들기
create-capacity-reservation 명령을 사용해 Capacity Reservations를 만듭니다. us-east-1a에 3개, us-east-1b에 3개를 만듭니다. 가용 영역을 제외하면 Capacity Reservations의 다른 속성은 동일해요.
us-east-1a에 Capacity Reservations 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
결과로 나오는 Capacity Reservation ID의 예시
cr-1234567890abcdef1
us-east-1b에 Capacity Reservations 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
결과로 나오는 Capacity Reservation ID의 예시
cr-54321abcdef567890
2단계: Capacity Reservation 리소스 그룹 만들기
resource-groups 서비스와 create-group 명령을 사용해 Capacity Reservation 리소스 그룹을 만듭니다. 이 예시에서 리소스 그룹 이름은 my-cr-group이에요. 리소스 그룹을 만들어야 하는 이유에 대한 자세한 내용은 EC2 Fleet에서 On-Demand 용량을 예약하기 위해 Capacity Reservations 사용하기 문서를 참고하세요.
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단계: Capacity Reservations를 Capacity Reservation 리소스 그룹에 추가하기
resource-groups 서비스와 group-resources 명령을 사용해 1단계에서 만든 Capacity Reservations를 Capacity Reservation 리소스 그룹에 추가합니다. On-Demand Capacity Reservations를 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단계: 리소스 그룹의 Capacity Reservations 보기
resource-groups 서비스와 list-group-resources 명령을 사용해 리소스 그룹을 설명해 포함된 Capacity Reservations를 확인할 수 있습니다.
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단계: Capacity Reservation이 특정 리소스 그룹을 대상으로 하도록 지정하는 시작 템플릿 만들기
create-launch-template 명령을 사용해 사용할 Capacity Reservations를 지정하는 시작 템플릿을 만듭니다. 이 예시에서 플릿은 리소스 그룹에 추가된 targeted Capacity Reservations를 사용할 거예요. 따라서 시작 템플릿 데이터는 Capacity Reservation이 특정 리소스 그룹을 대상으로 하도록 지정해요. 이 예시에서 시작 템플릿 이름은 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단계: 시작 템플릿 설명하기
describe-launch-template-versions 명령을 사용해 시작 템플릿을 설명해 구성을 확인할 수 있습니다.
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 Fleet 만들기
실행할 인스턴스의 구성 정보를 지정하는 EC2 Fleet을 만듭니다. 다음 EC2 Fleet 구성은 이 예시에서 관련된 구성만 보여줘요. 시작 템플릿 my-launch-template는 5단계에서 만든 시작 템플릿이에요. 인스턴스 풀이 두 개 있고, 각각 같은 인스턴스 유형(c5.xlarge)이지만 가용 영역(us-east-1a와 us-east-1b)이 달라요. 인스턴스 풀의 가격은 같아요. 가격은 가용 영역이 아니라 리전에 대해 정의되기 때문이에요. 총 대상 용량은 10이고 기본 대상 용량 유형은 on-demand예요. On-Demand 할당 전략은 lowest-price고, Capacity Reservations의 사용 전략은 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개 인스턴스가 실행돼요.
- Capacity Reservations가 먼저 사용되어 On-Demand 인스턴스 6개가 다음과 같이 실행됩니다.
us-east-1a의c5.xlargetargetedCapacity Reservations 3개에 On-Demand 인스턴스 3개가 실행됩니다.us-east-1b의c5.xlargetargetedCapacity Reservations 3개에 On-Demand 인스턴스 3개가 실행됩니다.
- 대상 용량을 충족하기 위해 On-Demand 할당 전략(이 예시에서는
lowest-price)에 따라 일반 On-Demand 용량에 On-Demand 인스턴스 4개가 추가로 실행됩니다. 하지만 풀의 가격이 같기 때문에(가격은 리전별이고 가용 영역별이 아니므로) 플릿은 나머지 On-Demand 인스턴스 4개를 두 풀 중 아무 곳에 실행해요.
(선택) 8단계: 남은 미사용 Capacity Reservations 수 보기
플릿이 실행된 후에는 선택적으로 describe-capacity-reservations를 실행해 미사용 Capacity Reservations가 얼마나 남아 있는지 확인할 수 있습니다. 이 예시에서는 다음 응답을 볼 수 있는데, 이것은 모든 풀의 모든 Capacity Reservations가 사용되었음을 보여줘요.
{ "CapacityReservationId": "cr-111",
"InstanceType": "c5.xlarge",
"AvailableInstanceCount": 0
}
{ "CapacityReservationId": "cr-222",
"InstanceType": "c5.xlarge",
"AvailableInstanceCount": 0
}
더 알아보기
- 튜토리얼: EC2 Fleet이 On-Demand 인스턴스를 기본 용량으로 사용하도록 구성하기
- 튜토리얼: EC2 Fleet이 Capacity Blocks에 인스턴스를 실행하도록 구성하기