Amazon Web Services 한국 블로그

Amazon EC2 Auto Scaling 및 EC2 Fleet에서 속성 기반 인스턴스 유형 선택 기능 출시

10년 전에 제가 처음 사용한 AWS 서비스는 Amazon Elastic Compute Cloud(Amazon EC2)이었습니다. 시간이 지남에 따라 EC2는 다양한 사용 사례에 맞게 최적화된 다양한 인스턴스 유형을 추가했으며, CPU/GPU, 메모리, 스토리지 및 네트워킹 용량의 다양한 조합을 통해 애플리케이션에 적합한 리소스 조합을 선택할 수 있는 유연성을 제공합니다.

클라우드의 주요 장점 중 하나는 탄력성입니다. EC2 플릿을 사용하면 여러 인스턴스 유형 및 구매 옵션에 걸쳐 용량을 동기적으로 요청하고, 여러 가용 영역에서 인스턴스를 시작하고, 온디맨드, 예약 및 스팟 인스턴스를 함께 사용할 수 있습니다. EC2 Auto Scaling을 사용하면 정의한 조건에 따라 EC2 인스턴스를 자동으로 추가 또는 제거하고 웜 풀, 인스턴스 새로 고침상태 확인과 같은 고급 인스턴스 관리 기능을 추가할 수 있습니다. 이러한 도구를 사용하여 최신 EC2 인스턴스의 이점을 활용하려면 구성을 수동으로 업데이트해야 합니다. 또한 EC2 스팟 인스턴스를 사용하여 비용을 최적화할 때는 여러 인스턴스 유형을 선택하여 최고의 스팟 용량에 액세스하는 것이 중요합니다. 지금까지는 유연한 방식으로 인스턴스 유형 구성을 구축하고 유지 관리하는 쉬운 방법이 없었습니다.

오늘은 인스턴스 요구 사항을 vCPU, 메모리, 스토리지 등의 속성 집합으로 표현할 수 있는 새로운 기능인 속성 기반 인스턴스 유형 선택 (Attribute-based instance type selection, ABS)을 소개합니다. 요구 사항은 ABS에 의해 일치하는 모든 인스턴스 유형으로 변환되므로 인스턴스 유형 구성의 생성 및 유지 관리가 간소화됩니다. 또한 최신 세대 인스턴스 유형이 릴리스될 때 자동으로 사용할 수 있으며 EC2 스팟 인스턴스를 통해 더 광범위한 용량에 액세스할 수 있습니다. EC2 플릿 및 EC2 Auto Scaling은 지정된 속성에 맞는 인스턴스를 선택하고 시작하므로 수동으로 인스턴스 유형을 선택할 필요가 없습니다.

ABS는 컨테이너 또는 웹 플릿 실행, 빅 데이터 처리, CI/CD(지속적인 통합 및 배포) 도구 구현과 같은 유연한 워크로드 및 프레임워크에 이상적입니다. 스팟 인스턴스를 사용할 때 수십 개의 인스턴스 유형 및 크기를 선택하고 입력하는 대신 간단한 속성 구성을 사용하여 모든 구성 요소를 포괄하고 새 속성 구성 요소가 나오면 포함할 수 있습니다.

속성 기반 인스턴스 유형 선택 작동 방식
ABS를 사용하여 인스턴스 유형 목록을 인스턴스 요구 사항으로 대체합니다. 시작 템플릿 내에서 또는 EC2 플릿 또는 EC2 Auto Scaling 요청에서 인스턴스 요구 사항을 시작 템플릿 재정의로 지정할 수 있습니다.

ABS는 두 단계로 작동합니다.

  • 첫째, ABS는 지정된 속성, AWS 리전, 가용 영역 및 가격을 기준으로 인스턴스 유형 목록을 결정합니다.
  • 그런 다음 EC2 Auto Scaling 또는 EC2 플릿이 선택한할당 전략을 해당 목록에 적용합니다.

스팟 인스턴스의 경우 ABS가 용량 최적화최저 가격 할당 전략을 지원합니다.

온디맨드 인스턴스의 경우 ABS는 최저 가격 할당 전략을 지원합니다. EC2 Auto Scaling 또는 EC2 플릿은 ABS 속성을 인스턴스 유형 목록으로 확인하고 가장 낮은 가격의 인스턴스를 먼저 시작하여 용량 요청의 온디맨드 부분을 이행하고 필요한 경우 다음으로 가장 저렴한 인스턴스로 이동합니다.

기본적으로 ABS는 가격 보호를 통해 지출을 통제할 수 있도록 합니다. 가격 보호는 ABS가 사용자가 선택한 속성에 적합하고 프로비저닝된 인스턴스의 가격을 일정 범위 내에서 유지하더라도 지나치게 비싼 인스턴스 유형을 프로비저닝하지 않도록 합니다. 가격 보호를 활성화하면 ABS는 가격이 가격 보호 임계값보다 높은 인스턴스 유형을 선택하지 않습니다. 스팟 인스턴스와 온디맨드 인스턴스에 대한 두 가지 임계값을 선택적으로 사용자 지정할 수 있습니다.

몇 가지 예를 통해 ABS가 실제로 어떻게 작동하는지 살펴 보겠습니다.

EC2 Auto Scaling에서 속성 기반 인스턴스 유형 선택 사용
AWS 명령줄 인터페이스(CLI)--generate-cli-skeleton 파라미터와 함께 사용하여 CreateAutoScalingGroup API에서 허용하는 모든 파라미터와 함께 YAML 형식의 파일을 생성합니다.

AWS Autoscaling create-auto-scaling-group \
    --generate-cli-skeleton yaml-input > create-asg.yaml

YAML 파일에는 시작 템플릿의 구성을 재정의하는 데 사용할 수 있는 새로운 InstanceRequirements 섹션이 있습니다. 다음은 몇 가지 샘플 값을 사용하여 선택할 수 있는 모든 속성입니다.

InstanceRequirements:
  VCpuCount:  # [REQUIRED] 
    Min: 0
    Max: 0
  MemoryMiB: # [REQUIRED] 
    Min: 0
    Max: 0
  CpuManufacturers:
  - amd
  MemoryGiBPerVCpu:
    Min: 0.0
    Max: 0.0
  ExcludedInstanceTypes:
  -
  InstanceGenerations:
  - previous
  SpotMaxPricePercentageOverLowestPrice: 0
  OnDemandMaxPricePercentageOverLowestPrice: 0
  BareMetal: 필수 # 유효한 값: 포함됨, 제외됨, 필수.
  BurstablePerformance: 제외되는 # 유효한 값: 포함됨, 제외됨, 필수.
  RequireHibernateSupport: true
  NetworkInterfaceCount:
    Min: 0
    Max: 0
  LocalStorage: 필수 # 유효한 값: 포함됨, 제외됨, 필수.
  LocalStorageTypes:
  - ssd
  TotalLocalStorageGB:
    Min: 0.0
    Max: 0.0
  BaselineEbsBandwidthMbps:
    Min: 0
    Max: 0
  AcceleratorTypes:
  - inference
  AcceleratorCount:
    Min: 0
    Max: 0
  AcceleratorManufacturers:
  - amazon-web-services
  AcceleratorNames:
  - a100
  AcceleratorTotalMemoryMiB:
    Min: 0
    Max: 0

재정의 목록을 제공하는 대신 각각에 단일 인스턴스 유형이 선택된 InstanceType 속성이 있으므로 요구 사항에 따라 인스턴스 유형을 선택할 수 있습니다. vCPU의 최소 및 최대 양과 메모리 범위를 지정할 수 있습니다. 선택적으로 vCPU당 최소 메모리 양을 요청할 수 있습니다.

더 많은 속성 중에서 선택할 수 있습니다. 예를 들어 베어 메탈 또는 버스트 가능 인스턴스의 사용을 포함, 제외 또는 요구할 수 있습니다. 네트워킹 또는 스토리지 요구 사항을 추가할 수 있습니다. 필요한 경우 GPU 또는 FPGA 가속기 등을 요청할 수 있습니다.

저의 경우 vCPU가 2~4개이고 메모리가 2048MiB 이상인 인스턴스를 요청합니다. 이전에는 이러한 요구 사항을 충족하는 각 인스턴스 유형에 대해 하나씩 약 40개의 재정의가 필요했지만 ABS를 사용하면 InstanceRequiRequiRequiers 섹션에서 세 개의 파라미터만 지정하면 됩니다. Auto Scaling 그룹을 생성하는 데 사용할 전체 구성 파일입니다.

AutoScalingGroupName: 'my-asg' # [REQUIRED] 
MixedInstancesPolicy:
  LaunchTemplate:
    LaunchTemplateSpecification:
      LaunchTemplateId: 'lt-0537239d9aef10a77'
    Overrides:
    - InstanceRequirements:
        VCpuCount: # [REQUIRED] 
          Min: 2
          Max: 4
        MemoryMiB: # [REQUIRED] 
          Min: 2048
  InstancesDistribution:
    OnDemandPercentageAboveBaseCapacity: 50
    SpotAllocationStrategy: 'capacity-optimized'
MinSize: 0 # [REQUIRED] 
MaxSize: 100 # [REQUIRED] 
DesiredCapacity: 4
VPCZoneIdentifier: 'subnet-e76a128a,subnet-e66a128b,subnet-e16a128c'

--cli-input-yaml 파라미터를 사용하여 구성 파일을 전달하는 Auto Scaling 그룹을 만듭니다.

AWS Autoscaling create-auto-scaling-group \
    --cli-input-yaml file://my-create-asg.yaml

몇 분 후 EC2 콘솔에서 네 개의 EC2 인스턴스(DesiredCapacity에 해당)가 실행됩니다. 이 목록에는 시간과 CPU 제조업체에 걸쳐 C3 및 C5a 인스턴스가 모두 있습니다.

콘솔 스크린샷.

이러한 인스턴스 중 50%는 온디맨드 (InstancesDistribution 섹션의 OnDemandPercentageAboveBaseCapacity 옵션 기준)입니다. EC2 콘솔의 스팟 요청 탭에 다음 두 가지 요청이 표시됩니다.

콘솔 스크린샷.

예상대로 모든 인스턴스 유형은 요구 사항을 따르고 크기가 큽니다. 하지만 애플리케이션에 각 인스턴스에서 더 많은 컴퓨팅 용량이 필요하다는 것을 금방 깨닫게 됩니다. Auto Scaling 그룹을 새로운 요구 사항으로 업데이트하고 더 많은 vCPU(4~6개)를 요청합니다.

aws autoscaling update-auto-scaling-group \
    --auto-scaling-group-name my-asg \
    --mixed-instances-policy '{
        "LaunchTemplate": {
            "Overrides": [
                {
                    "InstanceRequirements": {
                    "VCpuCount":{"Min": 4, "Max": 6},
                    "MemoryMiB":{"Min": 2048} }
                } ]
        }

그런 다음 Auto Scaling 그룹의 인스턴스 새로 고침을 시작합니다.

aws autoscaling start-instance-refresh \
    --auto-scaling-group-name my-asg

EC2 Auto Scaling은 새로운 요구 사항에 따라 인스턴스의 롤링 교체를 수행합니다. 몇 분 후 모든 인스턴스가 크기가 xlarge인 새 인스턴스로 대체되었으며 C5, C5a 및 M3 인스턴스가 혼합되어 실행됩니다. 모든 이전 인스턴스가 종료되었습니다.

콘솔 스크린샷.

이전과 마찬가지로 스팟 요청을 사용하여 두 개의 새 인스턴스가 시작됩니다. 이전 스팟 요청이 종료되었습니다.

콘솔 스크린샷.

일치하는 인스턴스를 시작하지 않고 미리 보는 방법
새로운 ABS의 작동 방식을 더 잘 이해하기 위해 새로운 EC2 GetInstanceTypesFromInstanceRequirements API를 사용합니다. 이 API는 요구 사항과 일치하는 인스턴스 유형 목록을 반환합니다.

먼저 YAML 파라미터 파일을 만듭니다.

aws ec2 get-instance-types-from-instance-requirements --generate-cli-skeleton yaml-input > requirements.yaml

Auto Scaling 그룹을 업데이트하는 데 사용한 것과 동일한 요구 사항으로 파일을 편집합니다. 이번에는 현재 세대 인스턴스를 사용하도록 요청합니다.

ArchitectureTypes:  # [REQUIRED] 
- x86_64
VirtualizationTypes: # [REQUIRED] 
- hvm
InstanceRequirements: # [REQUIRED] 
  VCpuCount:
    Min: 4
    Max: 6
  MemoryMiB:
    Min: 2048
  InstanceGenerations:
    - current

여기서는 아키텍처 유형(x86_64)과 가상화(hvm)를 지정해야 했습니다. Auto Scaling 그룹을 생성할 때 이 정보는 시작 템플릿에서 사용하는 Amazon Machine Image(AMI)에 의해 제공되었습니다.

이제 다음 요구 사항에 따라 선택한 모든 인스턴스 유형을 미리 보도록 하겠습니다.

aws ec2 get-instance-types-from-instance-requirements \
    --cli-input-yaml file://requirements.yaml \
    --output table

------------------------------------------
|GetInstanceTypesFromInstanceRequirements|
+----------------------------------------+
||             InstanceTypes            ||
|+--------------------------------------+|
||             InstanceType             ||
|+--------------------------------------+|
||  c4.xlarge                           ||
||  c5.xlarge                           ||
||  c5a.xlarge                          ||
||  c5ad.xlarge                         ||
||  c5d.xlarge                          ||
||  c5n.xlarge                          ||
||  d2.xlarge                           ||
||  d3.xlarge                           ||
||  d3en.xlarge                         ||
||  g3s.xlarge                          ||
||  g4ad.xlarge                         ||
||  g4dn.xlarge                         ||
||  i3.xlarge                           ||
||  i3en.xlarge                         ||
||  inf1.xlarge                         ||
||  m4.xlarge                           ||
||  m5.xlarge                           ||
||  m5a.xlarge                          ||
||  m5ad.xlarge                         ||
||  m5d.xlarge                          ||
||  m5dn.xlarge                         ||
||  m5n.xlarge                          ||
||  m5zn.xlarge                         ||
||  m6i.xlarge                          ||
||  p2.xlarge                           ||
||  r4.xlarge                           ||
||  r5.xlarge                           ||
||  r5a.xlarge                          ||
||  r5ad.xlarge                         ||
||  r5b.xlarge                          ||
||  r5d.xlarge                          ||
||  r5dn.xlarge                         ||
||  r5n.xlarge                          ||
||  x1e.xlarge                          ||
||  z1d.xlarge                          ||
|+--------------------------------------+|

이 새로운 EC2 API를 사용하여 다양한 요구 사항을 빠르게 테스트하고 인스턴스 유형에 매핑되는 방식을 확인할 수 있습니다. 새 인스턴스 유형이 릴리스되면 요구 사항과 일치하는 경우 목록에 자동으로 추가됩니다.

가용성 및 요금
현재 모든 퍼블릭 및 GovCloud AWS 리전에서 속성 기반 인스턴스 유형 선택(ABS)을 EC2 Auto ScalingEC2 플릿과 함께 사용할 수 있으며 단, 시간이 더 필요한 중국에 기반을 둔 리전은 예외입니다. AWS 명령줄 인터페이스(CLI), AWS SDK, AWS 관리 콘솔AWS CloudFormation을 사용하여 ABS를 구성할 수 있습니다. ABS 사용에 대한 추가 요금은 없으며 프로비저닝된 인스턴스에 대한 표준 EC2 요금만 지불하면 됩니다. 가격 보호에 대한 자세한 내용은 EC2 Auto Scaling 설명서를 참조하십시오.

이 새로운 기능을 사용하면 긴 인스턴스 유형 목록 대신 유연한 인스턴스 유형 구성을 쉽게 사용할 수 있습니다. 이러한 방식으로 새 세대 인스턴스 유형이 리전에서 릴리스될 때 자동으로 사용할 수 있습니다. 또한 스팟 요청을 통해 더 많은 용량에 쉽게 액세스할 수 있습니다.

속성 기반 인스턴스 유형 선택으로 EC2 인스턴스 유형 구성을 간소화합니다.

Danilo