Amazon EC2 Auto Scaling 용량 재분배 - Amazon EC2 Auto Scaling

Amazon EC2 Auto Scaling 용량 재분배

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

작동 방식

Amazon EC2 Auto Scaling은 EC2 인스턴스 재분배 권장 알림을 인식합니다. Amazon EC2 스팟 서비스는 스팟 인스턴스의 중단 위험이 커지면 이러한 알림을 생성합니다. Auto Scaling 그룹에 대해 용량 재분배가 활성화된 경우 Amazon EC2 Auto Scaling은 재분배 권고를 수신한 그룹의 스팟 인스턴스의 사전 교체를 시도하여 중단 위험이 커지지 않는 새 스팟 인스턴스로 워크로드를 재분배할 기회를 제공합니다. 즉, 기존 인스턴스가 중단되기 전에 Amazon EC2 Auto Scaling이 새 스팟 인스턴스를 시작하는 동안 워크로드에서 작업을 계속 처리할 수 있습니다. 또한 수명 주기 후크를 선택적으로 사용하여 종료 전에 인스턴스에 대해 사용자 지정 작업을 수행할 수도 있습니다.

EC2 인스턴스 재분배 권고에 대한 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서EC2 인스턴스 재분배 권고를 참조하세요.

용량 재분배 기능에 대한 자세한 내용 및 시연은 AWS Compute 블로그의 블로그 게시물 Proactively manage Spot Instance lifecycle using the new Capacity Rebalancing feature for EC2 Auto Scaling(EC2 Auto Scaling에 새로운 용량 재분배 기능을 사용하여 스팟 인스턴스 수명 주기를 사전 예방적으로 관리)을 참조하세요.

참고

용량 재분배가 비활성화된 경우에는 Amazon EC2 스팟 서비스가 인스턴스를 중단하고 상태 확인에 실패한 후 Amazon EC2 Auto Scaling이 스팟 인스턴스를 대체합니다. Amazon EC2는 인스턴스가 중단되기 전에 항상 EC2 인스턴스 재분배 권장 사항과 스팟 인스턴스 중단 2분 알림을 둘 다 제공합니다.

용량 재분배 활성화

언제든지 용량 재분배를 활성화 또는 비활성화할 수 있습니다.

고려 사항

이 구성에는 다음 고려이 적용됩니다.

  • 여러 인스턴스 유형을 사용하도록 Auto Scaling 그룹을 구성하는 것이 좋습니다. 이렇게 하면 여러 인스턴스 유형 및 구매 옵션이 포함된 Auto Scaling 그룹에서 설명하는 것처럼 각 가용 영역 내의 다양한 스팟 인스턴스 풀의 인스턴스를 유연하게 시작할 수 있습니다.

  • capacity-optimized 또는 capacity-optimized-prioritized 할당 전략을 사용하는 경우 용량 재조정 기능만 사용하는 것이 좋습니다. 이러한 할당 전략은 확장 이벤트와 용량 재분배 시작 모두에 대해 최적의 스팟 풀에서 스팟 용량을 유지합니다.

  • 가능하면 리전 내 모든 가용 영역에서 Auto Scaling 그룹을 생성해야 합니다. 이를 통해 Amazon EC2 Auto Scaling이 각 가용 영역의 여유 용량을 확인할 수 있습니다. 하나의 가용 영역에서 시작에 실패하는 경우 Amazon EC2 Auto Scaling은 지정된 가용 영역에서 성공할 때까지 스팟 인스턴스를 계속 시작하려고 시도합니다.

  • Amazon EC2 Auto Scaling은 용량 재분배를 사용하여 다음과 같은 방식으로 작동합니다.

    새 인스턴스를 시작할 때 Amazon EC2 Auto Scaling은 새 인스턴스가 상태 확인을 통과할 때까지 기다렸다가 이전 인스턴스를 종료합니다. 둘 이상의 인스턴스를 교체하는 경우 새 인스턴스가 시작되어 상태 확인을 통과하면 각각의 이전 인스턴스가 종료되기 시작합니다. Amazon EC2 Auto Scaling에서는 이전 인스턴스 종료 전에 새 인스턴스를 시작하려 하므로 지정된 최대 용량에 도달하거나 이에 근접하면 재분배 활동을 지연시키거나 완전히 중지할 수 있습니다. 이 문제를 피하기 위해 Amazon EC2 Auto Scaling은 재분배 활동 중에 그룹의 지정된 최대 용량을 일시적으로 초과할 수 있습니다.

    • 새 인스턴스가 시작에 실패했거나 시작되었지만 상태 확인에 실패하는 경우 Amazon EC2 Auto Scaling은 계속해서 인스턴스를 다시 시작하려고 시도합니다. 새 인스턴스를 시작하려고 시도하는 동안 이전 인스턴스는 결국 중단되고 강제로 종료됩니다.

    • 조정 활동이 진행 중이고 Auto Scaling 그룹이 원하는 새 용량 미만일 경우 Amazon EC2 Auto Scaling은 이전 인스턴스를 종료하기 전에 먼저 확장합니다.

  • 용량 재분배를 활성화한 경우 Amazon EC2 Auto Scaling이 인스턴스를 종료하기 전에 용량 재분배 알림을 수신하는 인스턴스 내에서 애플리케이션의 정상적인 종료를 시도하도록 Auto Scaling 그룹의 종료 수명 주기 후크를 구성할 수 있습니다. 수명 주기 후크를 구성하지 않으면 Amazon EC2 Auto Scaling은 새 인스턴스가 상태 확인을 통과하자마자 이전 인스턴스를 종료하기 시작합니다.

  • 용량 재분배를 사용하는 경우 애플리케이션 중단을 방지하기 위해 애플리케이션이 일부 중단을 견뎌야 합니다. 인스턴스가 종료되기 시작하면 Amazon EC2 Auto Scaling은 인스턴스가 종료될 때까지 기다립니다. Auto Scaling 그룹이 Elastic Load Balancing 로드 밸런서 뒤에 있는 경우 Amazon EC2 Auto Scaling은 인스턴스가 로드 밸런서에서 등록을 취소할 때까지 기다렸다가 종료 수명 주기 후크를 호출합니다(구성된 경우). 연결을 드레이닝하고 수명 주기 후크를 실행하는 데 시간이 너무 오래 걸리면 Amazon EC2 Auto Scaling이 인스턴스가 종료되기를 기다리는 동안 인스턴스가 중단될 수 있습니다.

  • 인스턴스가 최종 2분 중단 알림을 받는 경우 Amazon EC2 Auto Scaling은 종료 수명 주기 후크를 호출하고 즉시 교체를 시작합니다.

용량 재분배 활성화(콘솔)

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

새 Auto Scaling 그룹에 대해 용량 재분배를 활성화하려면

새 Auto Scaling 그룹을 생성하려면 여러 인스턴스 유형 및 구매 옵션이 포함된 Auto Scaling 그룹의 지침을 따르세요. Auto Scaling 그룹을 생성할 때 마법사의 2단계에서 인스턴스 구매 옵션과 네트워크 설정을 구성합니다. 인스턴스 배포 설정, 스팟 할당 설정, 용량 재분배, Amazon EC2 Auto Scaling이 시작할 수 있는 인스턴스 유형 등 Auto Scaling 그룹에 대한 추가 설정을 지정하려면 Combine purchase options and instance types(구매 옵션과 인스턴스 유형 조합)를 선택합니다.

Instances distribution(인스턴스 배포) 섹션에서 Capacity rebalance(용량 재분배) 확인란을 선택하거나 선택 취소하여 용량 재분배를 활성화할지를 선택할 수 있습니다. 이 설정은 스팟 할당 전략이 Capacity optimized(용량 최적화)로 설정된 경우 콘솔을 사용하여 생성한 Auto Scaling 그룹에서 기본적으로 활성화됩니다.


                    Capacity rebalance(용량 재분배) 확인란

기존 Auto Scaling 그룹에 대해 용량 재분배를 활성화하려면

  1. https://console.aws.amazon.com/ec2autoscaling/에서 Amazon EC2 Auto Scaling 콘솔을 엽니다.

  2. Auto Scaling 그룹 옆의 확인란을 선택합니다.

    Auto Scaling groups(Auto Scaling 그룹) 페이지 아래쪽에 분할 창이 열리고 선택한 그룹에 대한 정보가 표시됩니다.

  3. Details(세부 정보) 탭에서 Purchase options and instance types(구매 옵션 및 인스턴스 유형),Edit(편집)를 선택합니다.

  4. Instances distribution(인스턴스 배포) 섹션에서 다음을 수행합니다.

    • 용량 재분배를 활성화하려면 Capacity rebalance(용량 재분배) 확인란을 선택합니다.

    • 용량 재분배를 비활성화하려면 Capacity rebalance(용량 재분배) 확인란을 선택 취소합니다.

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

용량 재분배 활성화(AWS CLI)

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

다음 파라미터와 함께 create-auto-scaling-group 또는 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 명령을 사용하여 JSON 파일을 Auto Scaling 그룹의 유일한 파라미터로 참조하는 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": "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 명령을 사용하여 YAML 파일을 Auto Scaling 그룹의 유일한 파라미터로 참조하는 새 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: 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 } ] }

용량 재분배를 비활성화하려면

--no-capacity-rebalance 옵션과 함께 update-auto-scaling-group 명령을 사용하여 용량 재분배를 비활성화할 수 있습니다.

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

종료 수명 주기 후크 추가

인스턴스가 종료되기 전에 인스턴스에 대한 코드를 실행하고 사용자 정의 작업을 수행할 수 있도록 용량 재분배를 활성화할 때 종료 수명 주기 후크 구성을 고려합니다.

종료 수명 주기 후크를 사용할 수 있는 이유는 다음과 같습니다.

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

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

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

종료 수명 주기 후크가 없는 경우에는 다음 절차에 따라 하나 생성하세요.

종료 수명 주기 후크를 추가하려면

  1. https://console.aws.amazon.com/ec2autoscaling/에서 Amazon EC2 Auto Scaling 콘솔을 엽니다.

  2. Auto Scaling 그룹 옆의 확인란을 선택합니다.

    Auto Scaling groups(Auto Scaling 그룹) 페이지 아래쪽에 분할 창이 열리고 선택한 그룹에 대한 정보가 표시됩니다.

  3. 인스턴스 관리 탭의 Lifecycle hooks(수명 주기 후크)에서 Create lifecycle hook(수명 주기 후크 생성)를 선택합니다.

  4. 수명 주기 후크를 정의하려면 다음을 수행합니다.

    1. Lifecycle hook name(수명 주기 후크 이름)에 수명 주기 후크의 이름을 지정합니다.

    2. Lifecycle transition(수명 주기 전환)에서 Instance terminate(인스턴스 종료)를 선택합니다.

    3. Heartbeat timeout(하트비트 제한 시간)에서 수명 주기 작업을 완료하거나 제한 시간이 종료될 때까지 시간(초)을 지정합니다. 응용 프로그램을 종료해야 하는 기간에 따라 30초에서 120초 사이의 값을 사용하는 것이 좋습니다.

    4. Defualt result(기본 결과)에 수명 주기 후크 제한 시간이 경과하거나 예기치 못한 오류가 발생할 때 Auto Scaling 그룹에서 수행하는 작업을 지정합니다. ABANDON(중단) 및 CONTINUE(계속) 둘 다 인스턴스를 종료할 수 있습니다.

      • CONTINUE(계속)를 선택하면 종료 전에 Auto Scaling 그룹이 남아 있는 모든 작업(예: 다른 수명 주기 후크)을 진행할 수 있습니다.

      • ABANDON(중단)을 선택하면 Auto Scaling 그룹이 인스턴스를 즉시 종료합니다.

    5. (선택 사항) Notification Metadata(알림 메타데이터)에 Amazon EC2 Auto Scaling이 AWS Lambda 함수 또는 6단계에서 구성하는 다른 대상으로 메시지를 전송할 때마다 포함할 추가 정보를 지정합니다.

  5. Create(생성)를 선택합니다.

  6. (선택 사항) 수명 주기 후크에 작업을 추가하려면 다음 단계를 수행하여 AWS Lambda 함수 또는 다른 대상을 구성할 수 있습니다. 그러지 않고 EC2 인스턴스에서 작업을 자동으로 실행하도록 하려면 스크립트를 실행하도록 인스턴스를 구성해야 합니다. 종료 시퀀스를 1~2분 내에 완료하도록 스크립팅하여 인스턴스 종료 전에 작업을 완료할 충분한 시간을 확보하는 것이 좋습니다.

자세한 내용은 Amazon EC2 Auto Scaling 수명 주기 후크 섹션을 참조하세요.