튜토리얼: 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개
  • 총 미사용 targeted Capacity 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.xlarge targeted Capacity Reservations 3개에 On-Demand 인스턴스 3개가 실행됩니다.
    • us-east-1b의 c5.xlarge targeted Capacity 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에 인스턴스를 실행하도록 구성하기