기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
인스턴스 종료를 원활하게 처리할 수 있도록 애플리케이션 설계
이 주제에서는 Amazon EC2 Auto Scaling 그룹이 아직 종료할 준비가 되지 않은 Amazon EC2 인스턴스를 종료하지 못하도록 하는 데 사용할 수 있는 기능에 대해 설명합니다. 기본적으로 Auto Scaling은 인스턴스에서 실행되는 애플리케이션을 볼 수 없습니다. 애플리케이션이 할당된 작업을 정상적으로 종료하거나 완료하기 전에 인스턴스를 종료할 수 있습니다. 이러한 기능을 통해 애플리케이션은 인스턴스 종료 전에 진행 중인 작업을 완료하거나, 상태를 전송하거나, 정리를 수행할 시간을 확보할 수 있습니다. 애플리케이션의 요구 사항에 따라 개별적으로 또는 조합하여 사용할 수 있습니다.
이러한 기능은 플릿의 각 인스턴스가 다른 인스턴스와 다른 데이터, 작업 또는 상태를 보유하는 상태 저장 워크로드에 특히 유용합니다. 정상적인 종료 없이 상태 저장 인스턴스를 종료하면 처음부터 장기 실행 작업이 다시 시작되고, 데이터 중복 또는 데이터 손실이 줄어들고, 진행 중인 트랜잭션 또는 계산이 중단될 수 있습니다. 상태 저장 인스턴스를 정상적으로 종료하려면 워크로드를 드레이닝(현재 할당된 모든 작업 완료)하거나 전송(작업, 데이터 또는 구성을 다른 활성 인스턴스로 이동)해야 합니다.
해지 수명 주기 후크
종료 수명 주기 후크는 이미 종료 대상으로 선택된 Amazon EC2 인스턴스의 수명을 연장합니다. 인스턴스에 현재 할당된 진행 중인 작업을 완료하거나 진행 상황을 저장하고 작업을 다른 인스턴스로 전송할 수 있는 추가 시간을 제공합니다.
많은 워크로드의 경우 종료 수명 주기 후크만으로도 종료 대상으로 선택된 인스턴스에서 애플리케이션을 정상적으로 종료할 수 있습니다. 이는 최선의 방법이며 종료 수명 주기 작업이 중단되는 경우 종료를 방지하는 데 사용할 수 없습니다. 워크로드에서 종료 수명 주기 작업 실패에 대한 허용 오차가 낮은 경우 인스턴스를 보존하도록 종료 수명 주기 후크와 함께 인스턴스 수명 주기 정책을 구성합니다.
종료 수명 주기 후크를 사용하려면 인스턴스가 종료 대상으로 선택되는 시기를 알아야 합니다. 이를 알 수 있는 방법은 다음 두 가지입니다:
| 옵션 | 설명 | 가장 적합한 용도 | 설명서 링크 |
|---|---|---|---|
| 인스턴스 내부 | 인스턴스 메타데이터 서비스(IMDS)는 인스턴스에서 직접 인스턴스의 상태를 폴링할 수 있는 안전한 엔드포인트입니다. 메타데이터가 Terminated(으)로 돌아오면 인스턴스가 해지되도록 예약된 것입니다. |
인스턴스가 해지되기 전에 인스턴스에서 작업을 수행해야 하는 애플리케이션. | 대상 수명 주기 상태 검색 |
| 인스턴스 외부 | 인스턴스가 해지되면 이벤트 알림이 생성됩니다. Amazon EventBridge, Amazon SQS, Amazon SNS 또는를 사용하여 규칙을 생성 AWS Lambda 하여 이러한 이벤트를 캡처하고 Lambda 함수와 같은 응답을 호출할 수 있습니다. | 인스턴스 외부에서 작업을 수행해야 하는 애플리케이션. | 알림 대상 구성 |
수명 주기 후크를 사용하려면 또한 해당 인스턴스가 언제 완전히 해지될 준비가 되는지를 알아야 합니다. Amazon EC2 Auto Scaling은 CompleteLifecycleAction API 호출을 수신하거나 제한 시간이 경과할 때까지 중 먼저 발생하는 시점까지 인스턴스를 종료하지 않습니다.
기본적으로 인스턴스는 해지 수명 주기 후크로 인해 1시간 동안 계속 실행될 수 있습니다(하트비트 타임아웃). 1시간이 수명 주기 작업을 완료하는 데 충분하지 않은 경우, 기본 시간 제한을 구성할 수 있습니다. 수명 주기 작업이 진행 중이면 RecordLifecycleActionHeartbeat API 호출을 사용하여 제한 시간을 연장할 수 있습니다.
자세한 내용은 Amazon EC2 Auto Scaling 수명 주기 후크 단원을 참조하십시오.
인스턴스 스케일 인 보호
인스턴스 스케일 인 보호를 사용하여 스케일 인 이벤트 중에 종료할 인스턴스를 제어할 수 있습니다. 특히 장기 실행 작업을 적극적으로 처리하는 인스턴스가 종료되지 않도록 할 수 있습니다. 예를 들어 컨테이너화된 워크로드를 실행할 때 모든 인스턴스를 보호하고 현재 또는 예약된 작업이 없는 인스턴스에 대해서만 보호를 제거하는 것이 일반적입니다. 인스턴스는 새 작업에 대한 폴링을 계속하고 새 작업이 할당되면 보호를 다시 활성화할 수 있습니다.
Auto Scaling 그룹 수준 및 인스턴스 수준에서 스케일 인 보호를 활성화할 수 있습니다. Auto Scaling 그룹 수준에서 스케일 인 보호를 활성화하면 새 인스턴스가 생성될 때만 보호됩니다. 기존 인스턴스의 경우 보호를 개별적으로 활성화할 수 있습니다.
애플리케이션은 인스턴스 자체 또는 각 인스턴스를 종료할 수 있는지 여부를 관리하는 중앙 집중식 컨트롤 플레인에서 보호를 설정할 수 있습니다. 대규모 플릿의 경우 또는 보호를 자주 전환해야 하는 경우 중앙 집중식 접근 방식을 사용하는 것이 좋습니다. SetInstanceProtection에 대한 호출을 일괄 처리하고 API 제한 문제를 방지할 수 있기 때문입니다.
자세한 내용은 인스턴스 스케일 인 보호를 사용하여 인스턴스 종료 제어 단원을 참조하십시오.
사용자 지정 해지 정책
인스턴스 스케일 인 보호와 마찬가지로 사용자 지정 종료 정책은 Amazon EC2 Auto Scaling 그룹이 특정 EC2 인스턴스를 종료하지 못하도록 하는 데 도움이 됩니다. 비정상 인스턴스는 사용자 지정 종료 정책에 관계없이 계속 종료할 수 있습니다.
Auto Scaling 그룹은 기본 종료 정책을 사용하여 먼저 종료하는 Amazon EC2 인스턴스를 결정합니다. 먼저 종료할 인스턴스를 더 잘 제어하려면 Lambda 함수를 사용하여 사용자 지정 종료 정책을 구현할 수 있습니다. Auto Scaling은 종료할 인스턴스를 선택해야 할 때마다이 함수를 호출하며 함수가 반환하는 인스턴스만 종료합니다. 함수가 오류, 시간 초과 또는 빈 목록을 반환하는 경우 인스턴스가 비정상이 아닌 한 Auto Scaling은 인스턴스를 종료하지 않습니다.
사용자 지정 종료 정책은 애플리케이션이 유휴 상태이거나 종료하기에 안전한 인스턴스를 식별할 수 있는 경우에 유용합니다. 여기에는 일반적으로 그룹 전반의 워크로드를 추적하는 컨트롤 플레인이 필요합니다.
자세한 내용은 Lambda를 사용하여 사용자 지정 해지 정책 생성 단원을 참조하십시오.
인스턴스 수명 주기 정책
인스턴스 수명 주기 정책은 종료 수명 주기 작업이 중단될 때 Amazon EC2 Auto Scaling 종료에 대한 보호를 제공합니다. 수명 주기 후크와 달리 인스턴스 수명 주기 정책은 정상적인 종료 절차가 성공적으로 완료되지 않을 때 인스턴스가 유지 상태로 전환되도록 설계되었습니다.
Auto Scaling이 종료할 인스턴스를 선택하면 구성된 종료 수명 주기 후크가 호출되고 애플리케이션이 정상적인 종료 절차를 시작합니다. 를 사용하여 종료 수명 주기 작업이 성공적으로 완료되면 인스턴스CONTINUE가 정상적으로 종료됩니다. 그러나 어떤 이유로든 종료 수명 주기 작업이 중단되는 경우 인스턴스 수명 주기 정책은 인스턴스를 종료하는 대신 유지 상태로 인스턴스를 이동합니다. 보관된 인스턴스는 Auto Scaling 그룹의 원하는 용량에 포함되지 않으므로 대체 인스턴스가 자동으로 시작됩니다. TerminateInstanceInAutoScalingGroup API를 사용하여 보존된 인스턴스를 수동으로 종료할 때까지 보존된 인스턴스와 대체 인스턴스 모두에 대해 표준 Amazon EC2 요금이 발생합니다.
이 기능을 사용하려면 TerminateHookAbandon 보존 트리거가 로 설정된 인스턴스 수명 주기 정책과 retain하나 이상의 종료 수명 주기 후크를 모두 구성해야 합니다. 보관된 인스턴스에는 지속적인 Amazon EC2 비용이 발생하고 수동 작업이 필요하므로 모니터링이 중요합니다. 와 같은 CloudWatch 지표를 활성화GroupTerminatingRetainedInstances하고 CloudWatch 경보를 생성하여 인스턴스가 보존 상태로 전환될 때 알림을 보내야 합니다.
자세한 내용은 인스턴스 수명 주기 정책을 사용하여 인스턴스 보존 제어 단원을 참조하십시오.
종료를 모두 일시 중지합니다.
Amazon EC2 Auto Scaling 그룹 내의 모든 EC2 인스턴스 종료를 완전히 제어해야 하는 경우 Terminate 프로세스를 일시 중지합니다. Amazon EC2 위의 옵션이 서비스에 필요한 제어 기능을 제공하지 않는 경우에만이 옵션을 사용하는 것이 좋습니다. 프로세스를 일시 중지하기 위해 SuspendProcesses를 호출하면 사용자가 TerminateInstanceInAutoScalingGroup API에 요청한 경우를 제외하고 Auto Scaling이 어떤 이유로든 종료를 시도하지 Terminate 못하게 됩니다. TerminateInstanceInAutoScalingGroup
자세한 내용은 Amazon EC2 Auto Scaling 프로세스 일시 중지 및 재개 단원을 참조하십시오.
제한 사항
중요
Amazon EC2 Auto Scaling에서 인스턴스 종료를 정상적으로 처리하도록 애플리케이션을 설계할 때는 다음 제한 사항에 유의하세요.
비정상 인스턴스는 일부 보호를 우회합니다.
인스턴스가 비정상인 경우 사용자 지정 종료 정책 또는 축소 보호 기능이 있더라도 Amazon EC2 Auto Scaling은 인스턴스를 종료하기 시작합니다. Auto Scaling을 통한 비정상 인스턴스 교체를 방지하는 유일한 방법은 HealthCheck, ReplaceUnhealthy또는 Terminate 프로세스를 일시 중지하는 것입니다. 수명 주기 후크와 인스턴스 수명 주기 정책을 사용하여 애플리케이션을 정상적으로 종료하거나 비정상 인스턴스가 종료되기 전에 복구해야 하는 데이터를 복사할 수 있습니다.
| 기능 | 정상 인스턴스 제어 | 비정상 인스턴스 제어 |
|---|---|---|
| 사용자 지정 종료 정책 | ||
| Scale-in Protection | ||
HealthCheck, ReplaceUnhealthy또는 Terminate 프로세스 일시 중지 |
||
| 수명 주기 후크 | ||
| 인스턴스 수명 주기 정책 |
수명 주기 후크만으로는 정상적인 종료를 보장하지 않습니다.
기본적으로 종료 수명 주기 후크는 최선을 다해 작동합니다. 종료 수명 주기 작업이 중단되면 Amazon EC2 Auto Scaling은 인스턴스를 즉시 종료합니다. 종료 수명 주기 후크를 인스턴스 수명 주기 정책과 결합하여 종료 수명 주기 작업이 중단될 때 인스턴스를 유지할 수 있습니다. 이 조합의 경우:
-
Auto Scaling이 인스턴스 종료를 트리거하고 구성된 Elastic Load Balancing 로드 밸런서에서 드레이닝이 완료된 후 종료 수명 주기 후크가 애플리케이션을 정상적으로 종료하려고 시도합니다.
-
어떤 이유로든 종료 수명 주기 작업이 중단되면 인스턴스는 종료되는 대신 유지 상태로 전환됩니다.
-
보관된 인스턴스는 현재 Amazon EC2 상태로 유지되므로 종료 절차를 수동으로 완료하거나 실패를 조사할 수 있습니다.
-
필요한 작업을 완료한 후 TerminateInstanceInAutoScalingGroup API를 호출하여 보관된 인스턴스를 수동으로 종료할 수 있습니다.
자세한 내용은 인스턴스 수명 주기 정책을 사용하여 인스턴스 보존 제어 단원을 참조하십시오.
특정 인스턴스 시장 옵션은 제한된 공지로 중단될 수 있습니다.
Auto Scaling 그룹에서 스팟 인스턴스 및 중단 가능한 용량 예약과 같은 인스턴스 시장 옵션을 사용하는 경우 Amazon EC2는 언제든지 인스턴스를 중단 및 회수할 수 있습니다. 이러한 중단은 다음을 포함한 모든 Amazon EC2 Auto Scaling 보호 메커니즘을 우회합니다.
-
해지 수명 주기 후크
-
인스턴스 스케일 인 보호
-
사용자 지정 종료 정책
-
인스턴스 수명 주기 정책
-
일시 중지된 프로세스
스팟 인스턴스가 중단 알림을 받으면 정상적인 종료 작업을 수행하는 데 약 2분이 걸립니다. 종료 수명 주기 후크를 사용하여 스팟 인스턴스 중단에 대응할 수 있지만 수명 주기 후크가 아직 진행 중인 경우에도 2분 기간이 끝나면 인스턴스가 강제로 종료됩니다. 또한 인스턴스 수명 주기 정책은 스팟 인스턴스 중단을 방지할 수 없습니다.
스팟 인스턴스 중단 처리에 대한 자세한 내용은 Amazon EC2 사용 설명서의 스팟 인스턴스 중단 및 Amazon EC2 스팟 모범 사례를 참조하세요. Amazon EC2 Amazon EC2
직접 Amazon EC2 종료는 모든 보호를 우회합니다.
Amazon EC2 TerminateInstances API를 사용하여 Auto Scaling 그룹의 인스턴스를 직접 종료하면 종료는 모든 Amazon EC2 Auto Scaling 보호 메커니즘을 우회합니다.
구성된 보호를 준수하면서 Auto Scaling 그룹의 인스턴스를 종료하려면 대신 TerminateInstanceInAutoScalingGroup API를 사용합니다.
예제 시나리오
Amazon EC2 Auto Scaling을 사용하는 경우 플릿 관리 Auto Scaling이 사용자를 대신하여 처리하는 양과 EC2 인스턴스 종료 결정을 직접 제어하는 정도를 선택할 수 있습니다. 워크로드가 인스턴스 종료에 더 민감할수록 더 많은 제어를 유지할 수 있습니다. 다음 예제에서는 허용 오차 수준이 서로 다른 워크로드와 권장 구성을 설명합니다.
예제 1: 분산 데이터베이스 노드(저내성)
각 EC2 인스턴스가 복제 인수가 3인 데이터 파티션을 보유하는 분산 데이터베이스를 실행합니다. 동일한 파티션의 복제본이 있는 여러 인스턴스를 분실하면 데이터가 손실되거나 해당 파티션을 사용할 수 없게 될 수 있습니다.
해결 과제: Auto Scaling은 데이터를 다른 노드에 다시 복제하는 것보다 더 빠르게 인스턴스를 종료할 수 있으며, 종료하면 복제 인수를 유지하는 데 필요한 것보다 용량이 줄어들 수 있습니다.
다음 구성을 고려하세요.
-
모든 데이터베이스 인스턴스에서 인스턴스 스케일 인 보호를 활성화합니다. 데이터가 다른 곳에 안전하게 복제되었는지 확인한 후에만 프로그래밍 방식으로 제거합니다.
-
데이터 전송이 완료될 수 있도록 인스턴스 수명 주기 정책과 함께 연장된 제한 시간으로 종료 수명 주기 후크를 구성합니다.
-
최소 정상 백분율이 100%인 인스턴스 유지 관리 정책을 설정하여 필요한 용량을 유지합니다.
예제 2: 장기 실행 작업 처리(중간 허용 오차)
장기 실행 작업을 위해 수신 메시지를 수집하는 Amazon SQS 대기열이 있습니다. 새 메시지가 도착하면 EC2 인스턴스가 메시지를 검색하고 처리하는 데 3시간이 걸리는 작업을 시작합니다. 대기열이 커지면 Auto Scaling은 조정 정책에 따라 인스턴스를 추가합니다. 대기열이 축소되면 Auto Scaling은 인스턴스를 종료합니다.
해결 과제: Auto Scaling은 유휴 인스턴스가 아닌 작업을 처리하는 데 3시간이 걸리는 인스턴스를 종료할 수 있습니다. 다른 인스턴스에서 작업을 다시 시작할 수 있지만 상당한 진행 상황을 잃게 됩니다.
다음 구성을 고려하세요.
-
유휴 인스턴스를 먼저 종료하는 우선 순위를 지정하는 사용자 지정 종료 정책을 구성합니다.
-
종료 수명 주기 후크를 사용하여 진행 중인 작업을 완료할 수 있습니다.
-
인스턴스가 작업을 시작할 때 프로그래밍 방식으로 인스턴스 스케일 인 보호를 활성화하고 작업이 완료되면 제거합니다.
예제 3: 테스트 환경을 위한 작업자 플릿(고내성)
자동화된 테스트, CI/CD 파이프라인 작업 또는 개발 워크로드를 실행하는 EC2 인스턴스 플릿을 실행합니다. 이러한 작업자 인스턴스는 대기열에서 작업을 가져오며, 작업이 실패하면 테스트 결과를 다시 생성할 수 있습니다.
해결 과제: 스케일 인 이벤트 중에 테스트 작업이 중단될 수 있지만, 영향 없이 테스트를 재시도할 수 있으므로 중단 없는 가용성이 아닌 비용과 단순성을 위해 최적화해야 합니다.
다음 구성을 고려하세요.
-
종료 수명 주기 후크를 사용하여 진행 중인 요청을 완료할 수 있습니다.
-
비용 절감을 위해 용량 최적화 할당 전략과 함께 스팟 인스턴스를 사용하는 것이 좋습니다.