튜토리얼: Capacity Reservation Resource Group으로 여러 Capacity Reservation 유형에 인스턴스를 시작하도록 EC2 Fleet 구성

튜토리얼: Capacity Reservation Resource Group으로 여러 Capacity Reservation 유형에 인스턴스를 시작하도록 EC2 Fleet 구성 (Tutorial: Configure your EC2 Fleet to launch instances into multiple Capacity Reservation types using a Capacity Reservation Resource Group)

이 튜토리얼은 단일 Capacity Reservation Resource Group을 사용해 여러 Capacity Reservation 유형 — On-Demand Capacity Reservations(ODCR), Capacity Blocks for ML, 중단 가능 Capacity Reservations(interruptible Capacity Reservations) — 에 걸쳐 인스턴스를 시작하는 EC2 Fleet을 구성하는 단계를 안내해요.

출처: 문서

본문

서로 다른 Capacity Reservation 유형을 포함하는 Capacity Reservation Resource Group을 만들고, EC2 Fleet이 특정 순서로 Capacity Reservation 유형을 우선시하도록 구성하며, 예약 용량이 목표를 충족하기에 부족할 때 선택적으로 On-Demand 용량으로 폴백하는 방법을 배우게 돼요.

고려 사항 (Considerations)

  • ReservedCapacityOptions를 사용할 때는 instant 유형의 EC2 Fleet 요청만 지원돼요.
  • ReservationTypes 목록에서 대상으로 할 Capacity Reservation 유형을 명시적으로 지정해야 해요. EC2 Fleet은 지정한 Capacity Reservation 유형에만 인스턴스를 시작해요.
  • ReservedCapacityOptions는 OnDemandOptions.CapacityReservationOptions와 상호 배타적이에요. 같은 EC2 Fleet 요청에서 둘 다 사용할 수 없어요.

이 튜토리얼은 계정에 다음 Capacity Reservations가 이미 있다고 가정해요.

  • us-east-1a의 p5.48xlarge용 ODCR(cr-1234567890abcdef1)
  • us-east-1b의 p4d.24xlarge용 ODCR(cr-abcdef1234567890a)
  • us-east-1a의 p5.48xlarge용 Capacity Block(cr-0123456789abcdef0)
  • us-east-1a의 p5.48xlarge용 중단 가능 Capacity Reservation(cr-9876543210fedcba9), 조직 내 다른 계정이 공유해준 것

권한 확인 (Verify permissions)

EC2 Fleet을 만들기 전에 필요한 권한이 있는 IAM 역할을 보유하고 있는지 확인해요. 자세한 내용은 EC2 Fleet 사전 요구 사항을 참고하세요.

1단계: Capacity Reservation Resource Group 만들기 (Step 1: Create a Capacity Reservation Resource Group)

EC2 Fleet이 대상으로 하는 Capacity Reservations를 담을 Capacity Reservation Resource Group을 만들어요. 그룹이 모든 인스턴스 유형과 Capacity Reservation 유형의 Capacity Reservations를 받아들이도록 구성해요. 그러면 그룹이 여러 Capacity Reservation 유형의 혼합을 담을 수 있어요. 단계별 지침은 Capacity Reservation groups를 참고하세요.

참고 그룹을 만들 때 AWS::EC2::CapacityReservationPool 구성에서 instance-type 또는 reservation-type 파라미터를 지정하지 마세요. 이 파라미터를 생략하면 그룹이 모든 인스턴스 유형과 Capacity Reservation 유형의 Capacity Reservations를 받아들일 수 있어요.

2단계: 그룹에 Capacity Reservations 추가 (Step 2: Add Capacity Reservations to the group)

Capacity Reservations를 Capacity Reservation Resource Group에 추가해요. ODCR, Capacity Blocks for ML, 중단 가능 Capacity Reservations, UltraServer Capacity Blocks의 어떤 조합이든 추가할 수 있어요. 이 튜토리얼에서는 이 튜토리얼 앞부분에 나열된 네 개의 Capacity Reservations를 추가해요. 단계별 지침은 Capacity Reservation groups를 참고하세요.

3단계: 시작 템플릿 만들기 (Step 3: Create a launch template)

create-launch-template 명령을 사용해 Capacity Reservation Resource Group을 대상으로 하는 시작 템플릿을 만들어요. EC2 Fleet 구성에서 ReservedCapacityOptions를 사용할 때는 시작 템플릿에 MarketType을 설정할 필요가 없어요. EC2 Fleet이 각 Capacity Reservation 유형에 대해 자동으로 설정해주니까요.

aws ec2 create-launch-template \
    --launch-template-name my-cr-resource-group-template \
    --launch-template-data \
        '{"ImageId": "ami-0123456789example",
          "CapacityReservationSpecification":
            {"CapacityReservationTarget":
                {"CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-resource-group"}
            }
        }'

4단계: EC2 Fleet 만들기 (Step 4: Create an EC2 Fleet)

Capacity Reservation Resource Group의 여러 Capacity Reservation 유형을 대상으로 하는 EC2 Fleet을 만들어요. 핵심 구성은 ReservedCapacityOptions로, 다음을 지정해요.

  • ReservationTypes – 대상으로 할 Capacity Reservation 유형의 순서가 있는 목록. EC2 Fleet은 이 순서대로 유형을 처리해요. 유효한 값은 on-demand-capacity-reservation, capacity-block, interruptible-capacity-reservation이에요.
  • AllocationStrategy – 각 Capacity Reservation 유형 내에서 인스턴스 유형이 어떻게 우선시되는지. 인스턴스 유형 오버라이드 순서를 따르도록 prioritized로 설정해요.
  • ReservedCapacityFallbackOptions – 예약 용량이 부족할 때 On-Demand 인스턴스를 시작하도록 MarketTypes를 ["on-demand"]로 설정해요. 폴백 옵션을 지정하지 않으면, 지정된 Capacity Reservation 유형이 소진된 후 EC2 Fleet은 다른 마켓 유형으로 폴백하지 않아요.

config.json이라는 이름의 파일을 다음 내용으로 만들어요. 다음 예시에서 리소스 식별자를 여러분의 리소스 식별자로 바꿔요.

{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-cr-resource-group-template",
                "Version": "1"
            },
            "Overrides": [
                {
                    "InstanceType": "p5.48xlarge",
                    "AvailabilityZone": "us-east-1a",
                    "Priority": 1
                },
                {
                    "InstanceType": "p4d.24xlarge",
                    "AvailabilityZone": "us-east-1b",
                    "Priority": 2
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 100,
        "DefaultTargetCapacityType": "reserved-capacity"
    },
    "ReservedCapacityOptions": {
        "ReservationTypes": ["on-demand-capacity-reservation", "capacity-block", "interruptible-capacity-reservation"],
        "ReservedCapacityFallbackOptions": {
            "MarketTypes": ["on-demand"]
        },
        "AllocationStrategy": "prioritized"
    },
    "Type": "instant"
}

create-fleet 명령으로 플릿을 시작해요.

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

자세한 내용은 EC2 Fleet 만들기를 참고하세요.

EC2 Fleet이 Capacity Reservations를 해석하는 방법 (How EC2 Fleet resolves Capacity Reservations)

위 구성에 따라 EC2 Fleet은 다음 순서로 인스턴스 시작을 시도해요.

  1. ODCR – 먼저 p5.48xlarge 예약(가장 높은 우선순위 인스턴스 유형), 그다음 p4d.24xlarge 예약. 각 인스턴스 유형 내에서 ODCR이 여러 개 있으면 하나가 무작위로 선택돼요.
  2. Capacity Blocks – 모든 ODCR에서 사용 가능한 용량이 남지 않으면 EC2 Fleet이 Capacity Blocks를 대상으로 해요. 먼저 p5.48xlarge 예약, 그다음 p4d.24xlarge, 각 인스턴스 유형 내에서 무작위 선택.
  3. 중단 가능 Capacity Reservations – 모든 Capacity Blocks에서 사용 가능한 용량이 남지 않으면 EC2 Fleet이 중단 가능 Capacity Reservations를 대상으로 해요. 먼저 p5.48xlarge 예약, 그다음 p4d.24xlarge, 각 인스턴스 유형 내에서 무작위 선택.
  4. On-Demand 폴백 – 예약 용량이 100개 인스턴스 목표를 충족하기에 부족하면 나머지 용량이 On-Demand 인스턴스로 시작돼요. EC2 Fleet은 OnDemandOptions에 지정한 할당 전략에 따라 이러한 On-Demand 인스턴스를 시작해요.

참고 EC2 Fleet은 먼저 Capacity Reservation 유형을 해석하고, 그다음 각 Capacity Reservation 유형 내에서 인스턴스 유형을 해석해요. EC2 Fleet이 순서가 있는 목록의 다음 유형으로 이동하기 전에 각 Capacity Reservation 유형이 완전히 소진돼요.

(선택 사항) 5단계: 인스턴스 속성 확인 (Step 5: Verify instance properties)

describe-instances 명령을 사용해 각 인스턴스가 소비한 Capacity Reservation 유형을 확인해요. 플릿이 시작한 인스턴스는 다음 속성을 표시해요.

Property On-Demand Capacity Reservation value Capacity Block value Interruptible Capacity Reservation value On-Demand value
instance-lifecycle null capacity-block interruptible-capacity-reservation null
capacity-reservation-id Capacity Reservation ID consumed Capacity Reservation ID consumed Capacity Reservation ID consumed Not present
capacity-reservation-specification Group ARN Group ARN Group ARN Group ARN

다음 명령으로 Capacity Reservation Resource Group별로 인스턴스를 필터링할 수 있어요.

aws ec2 describe-instances \
    --filters "Name=capacity-reservation-specification.capacity-reservation-target.capacity-reservation-resource-group-arn,Values=arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-resource-group"

정리 (Clean up)

요금 발생을 멈추려면 인스턴스가 더 이상 필요 없을 때 종료해요. Capacity Blocks에 시작된 인스턴스는 Capacity Block 예약이 끝나면 자동으로 종료된다는 점에 유의하세요. 중단 가능 Capacity Reservations에 시작된 인스턴스는 용량 소유자가 용량을 회수하면 자동으로 종료돼요.

  • Capacity Reservation groups
  • Capacity Blocks for ML
  • Interruptible Capacity Reservations
  • Reserve compute capacity with EC2 On-Demand Capacity Reservations
  • Work with EC2 Fleet
  • Create an EC2 Fleet
  • Store instance launch parameters in Amazon EC2 launch templates

더 알아보기 (Learn more)