용량 재조정을 사용하여 Amazon EC2 스팟 중단 처리 - Amazon EC2 Auto Scaling

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

용량 재조정을 사용하여 Amazon EC2 스팟 중단 처리

스팟 인스턴스의 가용성에 영향을 주는 변경 사항을 모니터링하고 이에 자동으로 대응하도록 Amazon EC2 Auto Scaling을 구성할 수 있습니다. 용량 리밸런싱을 사용하면 실행 중인 인스턴스가 Amazon EC2에 의해 중단되기 전에 미리 새 스팟 인스턴스로 플릿을 보강할 수 있으므로 워크로드 가용성을 유지하는 데 도움이 됩니다.

용량 재조정의 목표는 중단 없이 워크로드를 계속 처리하는 것입니다. 스팟 인스턴스가 중단될 위험이 높아지면 Amazon EC2 스팟 서비스는 Amazon EC2 Auto Scaling에 EC2 인스턴스 재조정 권장 사항을 알립니다.

Auto Scaling 그룹에 대해 용량 재조정을 활성화하면 Amazon EC2 Auto Scaling은 재조정 권장 사항을 받은 그룹의 스팟 인스턴스를 사전에 교체하려고 합니다. 이는 중단 위험이 높지 않은 새로운 스팟 인스턴스로 워크로드를 재조정할 수 있는 기회를 제공합니다. 기존 인스턴스가 중단되기 전에 Amazon EC2 Auto Scaling이 새 스팟 인스턴스를 출범하는 동안 워크로드는 계속 작업을 처리할 수 있습니다.

용량 재조정을 사용하지 않는 경우, Amazon EC2 스팟 서비스가 인스턴스를 중단하고 건전성 체크에 실패할 때까지 Amazon EC2 Auto Scaling은 스팟 인스턴스를 교체하지 않습니다. 인스턴스를 중단하기 전에 Amazon EC2는 항상 EC2 인스턴스 재조정 권장 사항과 스팟 인스턴스 중단 2분 알림을 둘 다 제공합니다.

개요

Auto Scaling 그룹과 함께 용량 재조정을 사용하려면 다음과 같은 기본 단계를 따르세요.

  1. 여러 인스턴스 타입 및 가용 영역을 사용하도록 Auto Scaling 그룹을 구성합니다. 이러한 방식으로 Amazon EC2 Auto Scaling은 각 가용 영역에서 스팟 인스턴스를 위해 사용 가능한 용량을 확인할 수 있습니다. 자세한 설명은 여러 인스턴스 유형 및 구매 옵션이 포함된 Auto Scaling 그룹 섹션을 참조하세요.

  2. 필요에 따라 라이프사이클 후크를 추가하여 재조정 알림을 수신하는 인스턴스 내에서 애플리케이션을 정상적으로 해지할 수 있습니다. 자세한 설명은 Amazon EC2 Auto Scaling 라이프사이클 후크 섹션을 참조하세요.

    다음은 라이프사이클 후크를 사용할 수 있는 몇 가지 이유입니다:

    • Amazon SQS 작업자를 정상적으로 해지하는 경우

    • 도메인 이름 시스템(DNS)에서 등록 취소를 완료하려면

    • 시스템 또는 애플리케이션 로그를 당겨 Amazon Simple Storage Service(Amazon S3)에 업로드하려면

  3. 라이프사이클 후크에 대한 맞춤 작업을 개발합니다. 맞춤 작업을 최대한 빨리 호출하려면 인스턴스가 해지될 준비가 된 시점을 알아야 합니다. 인스턴스의 라이프사이클 상태를 감지하여 이를 알아보세요.

    • 인스턴스 외부에서 작업을 호출하려면 규칙을 작성하고 이벤트 패턴이 EventBridge 규칙과 일치할 때 수행할 작업을 자동화하십시오.

    • 인스턴스 내에서 작업을 호출하려면 해지 스크립트를 실행하고 인스턴스 메타데이터를 통해 라이프사이클 상태를 검색하도록 인스턴스를 구성하세요.

    2분 이내에 완료되도록 맞춤 작업을 설계하는 것이 중요합니다. 이렇게 하면 인스턴스가 해지되기 전에 작업을 완료할 수 있는 충분한 시간이 확보됩니다.

이 단계를 완료하면 용량 재조정 사용을 시작할 수 있습니다.

용량 재조정 동작

용량 재조정을 사용하면 인스턴스가 재조정 권장 사항을 수신할 때 Amazon EC2 Auto Scaling은 다음과 같은 방식으로 작동합니다.

  • 새 스팟 인스턴스가 출범되면 Amazon EC2 Auto Scaling은 새 인스턴스가 건전성 체크를 통과할 때까지 기다렸다가 이전 인스턴스를 해지합니다. 둘 이상의 인스턴스를 교체하는 경우, 새 인스턴스가 시작되어 건전성 체크를 통과하면 각각의 이전 인스턴스가 해지되기 시작합니다.

  • Amazon EC2 Auto Scaling에서는 이전 인스턴스 해지 전에 새 인스턴스를 출범하려고 하므로 지정된 최대 용량에 도달하거나 이에 근접하면 재조정 활동을 지연시키거나 완전히 중지할 수 있습니다. 이 문제를 방지하기 위해 Amazon EC2 Auto Scaling은 일시적으로 그룹의 최대 크기를 원하는 용량의 최대 10%까지 초과할 수 있습니다.

  • Auto Scaling 그룹에 라이프사이클 후크를 추가하지 않은 경우, Amazon EC2 Auto Scaling은 새 인스턴스가 건전성 체크를 통과하자마자 이전 인스턴스를 해지하기 시작합니다.

  • 라이프사이클 후크를 추가한 경우, 이전 인스턴스 해지를 시작하기까지 걸리는 시간이 라이프사이클 후크에 지정한 시간 초과 값만큼 연장됩니다.

  • 스케일링 정책 또는 예약된 스케일링을 사용하는 경우, 스케일링 활동이 병렬로 실행됩니다. 크기 조정 활동이 진행 중이고 Auto Scaling 그룹이 원하는 새 용량 미만일 경우, Amazon EC2 Auto Scaling은 이전 인스턴스를 해지하기 전에 먼저 스케일 아웃합니다.

한 가용 영역에 인스턴스 타입에 대한 용량이 없는 경우, Amazon EC2 Auto Scaling은 성공할 때까지 활성화된 다른 가용 영역에서 스팟 인스턴스를 계속 시작하려고 시도합니다.

더 나쁜 경우의 시나리오에서 또는 새 인스턴스가 출범에 실패했거나 건전성 체크에 불합격하는 경우, Amazon EC2 Auto Scaling은 계속해서 인스턴스를 다시 출범시키려고 합니다. 새 인스턴스를 출범시키려고 시도하는 동안, 이전 인스턴스는 결국 중단되고 강제로 해지될 것이며 장애 2분전 고지가 이루어집니다.

고려 사항

용량 재조정 사용시 다음 사항을 고려하십시오:

스팟 중단에 내성을 갖도록 애플리케이션을 설계하세요.

귀하의 애플리케이션은 인스턴스 수의 동적 변경과 스팟 인스턴스가 조기에 중단될 가능성에 대처할 수 있어야 합니다. 예컨대, Auto Scaling 그룹이 Elastic Load Balancing 로드 밸런서 뒤에 있는 경우, Amazon EC2 Auto Scaling은 인스턴스가 로드 밸런서에서 등록을 취소할 때까지 기다렸다가 라이프사이클 후크를 호출합니다. 인스턴스 등록을 취소하고 라이프사이클 작업을 완료하는 데 시간이 너무 오래 걸리면 인스턴스를 해지하기 전에 Amazon EC2 Auto Scaling이 라이프사이클 작업 완료를 기다리는 동안 인스턴스가 중단될 수도 있습니다.

Amazon EC2에서 항상 스팟 인스턴스 장애 2분전 고지보다 먼저 리밸런싱 권고 신호를 전송할 수 있는 것은 아닙니다. 때때로, 리밸런싱 권고 신호가 장애 2분전 고지와 동시에 도착합니다. 이런 일이 발생하면 Amazon EC2 Auto Scaling은 라이프사이클 후크를 호출하고 즉시 새 스팟 인스턴스를 출범하려고 시도합니다.

교체 스팟 인스턴스의 중단 위험 증가 방지

lowest-price 할당 전략을 사용하는 경우, 교체 스팟 인스턴스가 중단될 위험이 높아질 수도 있습니다. 이는 출범 직후에 교체 스팟 인스턴스가 중단될 수 있더라도 해당 순간에 사용 가능한 용량이 있는 최저가의 풀에서 인스턴스를 항상 출범시키기 때문입니다. 서비스 중단 위험이 높아지는 것을 방지하려면 lowest-price 할당 전략을 사용하지 않는 것이 좋습니다. 대신 price-capacity-optimized 할당 전략을 사용하는 것이 좋습니다. 이 전략은 중단될 가능성이 가장 낮고 가격이 가장 낮은 스팟 풀에서 교체 스팟 인스턴스를 출범합니다. 따라서 가까운 장래에 중단될 가능성이 적습니다.

Amazon EC2 Auto Scaling은 가용성이 동일하거나 더 나은 경우에만 새 인스턴스를 출범함

용량 리밸런싱의 목표 중 하나는 스팟 인스턴스의 가용성을 개선하는 것입니다. 기존 스팟 인스턴스에 대한 리밸런싱 권장 사항이 있는 경우, Amazon EC2 Auto Scaling은 새 인스턴스가 기존 인스턴스와 동일하거나 더 나은 가용성을 제공하는 경우에만 새 인스턴스를 출범합니다. 새 인스턴스의 중단 위험이 기존 인스턴스보다 더 높은 경우, Amazon EC2 Auto Scaling은 새 인스턴스를 출범하지 않습니다. 하지만 Amazon EC2 Auto Scaling은 Amazon EC2 스팟 서비스에서 제공하는 정보에 근거하여 스팟 용량 풀을 계속 평가하여 가용성이 향상되면 새 인스턴스를 출범합니다.

Amazon EC2 Auto Scaling이 사전에 새 인스턴스를 출범하지 않은 채로 기존 인스턴스가 중단될 수 있습니다. 이 경우, Amazon EC2 Auto Scaling은 스팟 인스턴스 중단 알림을 받는 즉시 새 인스턴스를 출범하려고 시도합니다. 이는 새 인스턴스의 중단 위험이 높은지 여부와 관계없이 발생합니다.

용량 리밸런싱은 스팟 인스턴스의 간섭 속도를 증가시키지 않음

용량 리밸런싱을 활성화하면 스팟 인스턴스 중단 속도(Amazon EC2가 용량을 회수해야 할 때 회수되는 스팟 인스턴스의 수)가 증가하지 않습니다. 그러나 용량 리밸런싱에서 중단 위험이 있는 인스턴스를 탐지할 경우, Amazon EC2 Auto Scaling이 즉시 새로운 인스턴스를 출범하려고 시도합니다. 그러므로 위험에 처한 인스턴스가 간섭된 후 Amazon EC2 Auto Scaling이 시작되기를 기다리면 새 인스턴스를 출범시키는 것보다 더 많은 인스턴스가 교체될 수 있습니다.

용량 리밸런싱을 활성화하면 더 많은 인스턴스를 교체하게 될 수도 있지만, 미리 대비할 수 있어 도움이 됩니다. 이렇게 하면 인스턴스가 중단되기 전에 작업을 수행할 수 있는 시간이 더 늘어납니다. 스팟 인스턴스 중단 알림이 오면 일반적으로 최대 2분 이내에 인스턴스를 적절히 해지해야 합니다. 용량 재조정을 통해 새 인스턴스를 미리 시작하면 위험한 인스턴스에서 기존 프로세스가 완료될 확률을 높일 수 있습니다. 또한 인스턴스 해지 절차를 시작하고, 위험 인스턴스에서 새 작업이 예약되지 않도록 하며, 새로 시작된 인스턴스가 애플리케이션을 인수할 수 있도록 준비할 수 있습니다. 용량 리밸런싱에서 전향적으로 인스턴스를 교체하기 때문에 적절한 연속성을 누릴 수 있습니다.

용량 리밸런싱을 사용할 때의 위험과 장점을 보여주는 이론적 예:

  • 오후 2:00 – 인스턴스 A에 대한 리밸런싱 권고를 받음. Amazon EC2 Auto Scaling이 즉시 교체 인스턴스 B를 출범시키려고 시도하므로 귀하는 해지 절차를 시작할 시간이 마련됩니다.

  • 오후 2:30 – 인스턴스 B에 대한 리밸런싱 권고를 받고 인스턴스 C로 교체하므로 해지 절차를 시작할 시간이 마련됩니다.

  • 오후 2:32 – 용량 리밸런싱을 활성화하지 않은 경우와 인스턴스 A에 대한 스팟 인스턴스 장애 알림을 오후 2시 32분에 받지 않은 경우, 조치를 취할 시간이 2분에 불과할 것입니다. 하지만 인스턴스 A는 이때까지 계속 실행되었을 것입니다.

용량 재조정 활성화(콘솔)

Auto Scaling 그룹을 생성하거나 업데이트할 때 용량 재조정을 사용하거나 사용하지 않도록 설정할 수 있습니다.

새 Auto Scaling 그룹에 대해 용량 재조정 활성화
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 열고 탐색 창에서 Auto Scaling Groups(Auto Scaling 그룹)를 선택합니다.

  2. Create Auto Scaling group(Auto Scaling 그룹 생성)을 선택합니다.

  3. 1단계: 출범 템플릿 또는 구성을 선택을 위해, Auto Scaling 그룹의 명칭을 입력하고 출범 템플릿을 선택한 후 다음을 선택하여 그 다음 단계로 진행합니다.

  4. 2단계: 인스턴스 출범 옵션 선택의 인스턴스 타입 요건에서 설정을 선택하여 혼합 인스턴스 그룹을 만듭니다. 여기에는 시작할 수 있는 인스턴스 타입, 인스턴스 구매 옵션, 스팟 및 온디맨드 인스턴스에 대한 할당 전략이 포함됩니다. 기본적으로 이러한 설정은 구성되어 있지 않습니다. 이러한 설정을 구성하려면 Override launch template(출범 템플릿 재정의)를 선택해야 합니다. 혼합 인스턴스 그룹 생성에 대한 자세한 설명은 여러 인스턴스 유형 및 구매 옵션이 포함된 Auto Scaling 그룹 섹션을 참조하세요.

  5. 네트워크에서 원하는 옵션을 선택합니다. 사용할 서브넷이 다른 가용 영역에 있는지 확인합니다.

  6. 할당 전략 섹션에서 스팟 할당 전략을 선택합니다. 용량 재조정을 선택하거나 확인란을 선택 취소하여 용량 재조정을 활성화하거나 비활성화합니다. 인스턴스 구매 옵션 섹션에서 스팟 인스턴스로 띄울 Auto Scaling 그룹의 백분율을 요청한 경우에만 이 옵션이 표시됩니다.

  7. Auto Scaling 그룹을 생성합니다.

  8. (옵션) 필요에 따라 라이프사이클 후크를 추가합니다. 자세한 설명은 라이프사이클 후크 추가 섹션을 참조하세요.

기존 Auto Scaling 그룹에 대해 용량 재조정을 활성화 또는 비활성화하려면
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 열고 탐색 창에서 Auto Scaling 그룹(Auto Scaling Groups)을 선택합니다.

  2. Auto Scaling 그룹 옆의 확인란을 선택합니다. 페이지 하단에 분할 창이 열립니다.

  3. Details(세부 정보) 탭에서 Allocation strategies(할당 전략), Edit(편집)을 선택합니다.

  4. 할당 전략 섹션에서 용량 재조정 아래의 확인란을 선택하거나 선택 취소하여 용량 재조정을 사용하거나 사용하지 않도록 설정합니다.

  5. 업데이트(Update)를 선택합니다.

용량 재조정 활성화(AWS CLI)

다음 예제는 를 사용하여 용량 재조정을 활성화 및 AWS CLI 비활성화하는 방법을 보여줍니다.

create-auto-scaling-groupor update-auto-scaling-group명령을 다음 파라미터와 함께 사용합니다.

  • --capacity-rebalance/--no-capacity-rebalance— 용량 재조정 활성화 여부를 나타내는 부울 값입니다.

create-auto-scaling-group명령을 호출하기 전에 Auto Scaling 그룹에서 사용하도록 구성된 시작 템플릿의 이름이 필요합니다. 자세한 설명은 Auto Scaling 그룹에 대한 시작 템플릿 생성 섹션을 참조하세요.

참고

다음 절차는 JSON 또는 YAML로 형식의 구성 파일을 사용하는 방법을 보여줍니다. AWS CLI 버전 1을 사용하는 경우 JSON 형식의 구성 파일을 지정해야 합니다. AWS CLI 버전 2를 사용하는 경우 YAML 또는 JSON 형식의 구성 파일을 지정할 수 있습니다.

새 Auto Scaling 그룹 생성 및 구성
  • 다음 create-auto-scaling-group명령을 사용하여 새 Auto Scaling 그룹을 생성하고 용량 재조정을 활성화합니다. 이 명령은 JSON 파일을 Auto Scaling 그룹의 유일한 파라미터로 참조합니다.

    aws autoscaling create-auto-scaling-group --cli-input-json file://~/config.json

    혼합 인스턴스 정책을 지정하는 CLI 구성 파일이 아직 없는 경우에서 하나 생성합니다.

    구성 파일의 최상위 JSON 객체에 다음 줄을 추가합니다.

    { "CapacityRebalance": true }

    다음은 예 config.json 파일입니다.

    { "AutoScalingGroupName": "my-asg", "DesiredCapacity": 12, "MinSize": 12, "MaxSize": 15, "CapacityRebalance": true, "MixedInstancesPolicy": { "InstancesDistribution": { "OnDemandBaseCapacity": 0, "OnDemandPercentageAboveBaseCapacity": 25, "SpotAllocationStrategy": "price-capacity-optimized" }, "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Default" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c5a.large" }, { "InstanceType": "m5.large" }, { "InstanceType": "m5a.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "m4.large" }, { "InstanceType": "c3.large" }, { "InstanceType": "m3.large" } ] } }, "TargetGroupARNs": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-alb-target-group/943f017f100becff", "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }
새 Auto Scaling 그룹 생성 및 구성
  • 다음 create-auto-scaling-group명령을 사용하여 새 Auto Scaling 그룹을 생성하고 용량 재조정을 활성화합니다. 이 명령은 YAML 파일을 Auto Scaling 그룹의 유일한 파라미터로 참조합니다.

    aws autoscaling create-auto-scaling-group --cli-input-yaml file://~/config.yaml

    YAML로 형식이 지정된 구성 파일에 다음 줄을 추가합니다.

    CapacityRebalance: true

    다음은 예 config.yaml 파일입니다.

    --- AutoScalingGroupName: my-asg DesiredCapacity: 12 MinSize: 12 MaxSize: 15 CapacityRebalance: true MixedInstancesPolicy: InstancesDistribution: OnDemandBaseCapacity: 0 OnDemandPercentageAboveBaseCapacity: 25 SpotAllocationStrategy: price-capacity-optimized LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName: my-launch-template Version: $Default Overrides: - InstanceType: c5.large - InstanceType: c5a.large - InstanceType: m5.large - InstanceType: m5a.large - InstanceType: c4.large - InstanceType: m4.large - InstanceType: c3.large - InstanceType: m3.large TargetGroupARNs: - arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-alb-target-group/943f017f100becff VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782
기존 Auto Scaling 그룹에 대해 용량 재조정 활성화
  • 다음 update-auto-scaling-group명령을 사용하여 용량 재조정을 활성화합니다.

    aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \ --capacity-rebalance
기존 Auto Scaling 그룹에 대해 용량 재조정가 활성화되었는지 확인
  • 다음 describe-auto-scaling-groups명령을 사용하여 용량 재조정이 활성화되었는지 확인하고 세부 정보를 볼 수 있습니다.

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

    다음은 응답의 예입니다.

    { "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg", "AutoScalingGroupARN": "arn", ... "CapacityRebalance": true } ] }
용량 재조정을 비활성화하려면

update-auto-scaling-group명령을 --no-capacity-rebalance 옵션과 함께 사용하여 용량 재조정을 비활성화합니다.

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \ --no-capacity-rebalance

용량 재조정에 대한 자세한 내용은 Compute Blog의 EC2 Auto Scaling을 위한 새로운 용량 재조정 기능을 사용하여 스팟 인스턴스 수명 주기를 사전에 관리하기를 참조하십시오. AWS

EC2 인스턴스 재조정 권고에 대한 자세한 설명은 Linux 인스턴스를 위한 Amazon EC2 사용자 가이드EC2 인스턴스 재조정 권고를 참조하세요.

라이프사이클 후크에 대한 자세한 설명은 다음 리소스를 참조하세요.

제한 사항

  • Amazon EC2 Auto Scaling은 인스턴스가 스케일 인으로부터 보호되지 않는 경우에만 재조정 알림을 받는 인스턴스를 교체할 수 있습니다. 그러나 스케일 인 보호는 스팟 중단으로 인한 해지는 방지하지 못합니다. 자세한 설명은 인스턴스 스케일 인 방비 사용 섹션을 참조하세요.

  • Amazon EC2 Auto Scaling을 사용할 수 있는 모든 상용 AWS 리전 에서 용량 리밸런싱 지원이 가능합니다(중동(UAE) 지역은 예외).