

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

# 웜 풀을 사용하여 부팅 시간이 긴 애플리케이션의 지연 시간 단축
<a name="ec2-auto-scaling-warm-pools"></a>

웜 풀을 사용하면 예컨대, 인스턴스가 많은 양의 데이터를 디스크에 기록해야 하기 때문에 부팅 시간이 매우 길어지는 애플리케이션의 지연 시간을 줄일 수 있습니다. 웜 풀을 사용하면 애플리케이션 성능 향상을 위해 대기 시간을 관리하려고 Auto Scaling 그룹을 과도하게 프로비저닝할 필요가 없습니다. 자세한 설명은 블로그 게시물 [EC2 Auto Scaling 웜 풀로 애플리케이션의 크기를 더 빠르게 조정(Scaling your applications faster with EC2 Auto Scaling Warm Pools)](https://aws.amazon.com/blogs/compute/scaling-your-applications-faster-with-ec2-auto-scaling-warm-pools/)를 참조하세요.

**중요**  
필요하지 않은 경우, 웜 풀을 생성하면 불필요한 비용이 발생할 수 있습니다. 첫 번째 부팅 시간으로 인해 애플리케이션에서 눈에 띄는 대기 시간 문제가 발생하지 않는 경우, 웜 풀을 사용할 필요가 없습니다.

**Topics**
+ [핵심 개념](#warm-pool-core-concepts)
+ [사전 조건](#warm-pool-prerequisites)
+ [웜 풀에서 인스턴스 업데이트](#update-warm-pool)
+ [관련 리소스](#warm-pools-related-resources)
+ [제한 사항](#warm-pools-limitations)
+ [수명 주기 후크 사용](warm-pool-instance-lifecycle.md)
+ [Auto Scaling 그룹을 위한 웜 풀 생성](create-warm-pool.md)
+ [건전성 체크의 상태 보기](warm-pools-health-checks-monitor-view-status.md)
+ [AWS CLI 웜 풀 작업 예제](examples-warm-pools-aws-cli.md)

## 핵심 개념
<a name="warm-pool-core-concepts"></a>

시작하기 전에 다음과 같은 핵심 개념을 익힙니다.

**웜 풀**  
웜 풀은 Auto Scaling 그룹과 함께 있는 미리 초기화된 EC2 인스턴스의 풀입니다. 애플리케이션을 스케일 아웃해야 할 때마다 Auto Scaling 그룹은 원하는 새 용량을 충족하기 위해 웜 풀을 사용할 수 있습니다. 이렇게 하면 인스턴스가 애플리케이션 트래픽 제공을 신속하게 시작하여 스케일 아웃 이벤트에 대한 응답 속도를 높일 수 있습니다. 인스턴스가 웜 풀을 벗어나면 그룹의 원하는 용량에 가산됩니다. 이를 *웜 스타트*라고 합니다.  
인스턴스가 웜 풀에 있는 동안 조정 정책은 `InService` 상태에 있는 인스턴스의 지표 값이 대상 추적 조정 정책의 대상 사용률과 동일한 조정 정책의 경보 상한 임계값보다 큰 경우에만 스케일 아웃됩니다.

**웜 풀 크기**  
기본적으로 웜 풀의 크기는 Auto Scaling 그룹의 최대 용량과 원하는 용량 간의 차이로 계산됩니다. 예컨대, Auto Scaling 그룹의 원하는 용량이 6이고 최대 용량이 10인 경우, 웜 풀을 처음 설정하고 풀을 초기화할 때 웜 풀의 크기는 4가 됩니다.  
웜 풀의 최대 용량을 개별적으로 지정하려면 사용자 지정 사양(`MaxGroupPreparedCapacity`) 옵션을 사용하고 그룹의 현재 용량보다 큰 사용자 지정 값을 설정합니다. 사용자 지정 값을 제공하는 경우 웜 풀의 크기는 사용자 지정 값과 그룹의 현재 원하는 용량 간의 차이로 계산됩니다. 예를 들어 Auto Scaling 그룹의 원하는 용량이 6, 최대 용량이 20, 사용자 지정 값이 8인 경우 웜 풀을 처음 설정하고 풀을 초기화할 때 웜 풀의 크기는 2가 됩니다.  
대규모 Auto Scaling 그룹으로 작업할 때 웜 풀 사용에 따르는 비용 혜택을 관리하기 위해 사용자 지정 사양(`MaxGroupPreparedCapacity`) 옵션을 사용해야 할 수 있습니다. 예컨대, 최대 용량이 1,500(비상 트래픽 급증 시 추가 용량 제공용)이고, 100개의 인스턴스로 구성된 웜 풀이 있는, 인스턴스 1,000개의 Auto Scaling 그룹은 웜 풀 내에 향후 사용을 위해 예약된 인스턴스 500개를 유지하는 것보다 목표를 더 잘 달성할 수 있습니다.

**최소 웜 풀 크기**  
최소 크기 설정(`MinSize`)을 사용해 웜 풀에 유지할 최소 인스턴스 수를 정적으로 설정하는 것이 좋습니다. 기본적으로 설정된 최소 크기는 없습니다. 이 `MinSize` 설정은 Auto Scaling 그룹의 원하는 용량이 `MaxGroupPreparedCapacity`보다 높더라도 최소 인스턴스 수가 웜 풀에 유지되도록 `MaxGroupPreparedCapacity`를 지정할 때 유용합니다.

**웜 풀 인스턴스 상태**  
웜 풀의 인스턴스를 `Stopped`, `Running`, `Hibernated`의 세 가지 상태 중 하나로 유지할 수 있습니다. `Stopped` 상태로 인스턴스를 유지하는 것이 비용을 최소화하는 효과적인 방법입니다. 중지된 인스턴스의 경우, 사용하는 볼륨과 인스턴스에 연결된 탄력적 IP 주소에 대해서만 요금을 지불합니다.  
또는 인스턴스를 `Hibernated` 상태로 유지하여 메모리 콘텐츠(RAM)를 삭제하지 않고 인스턴스를 중지할 수 있습니다. 인스턴스가 최대 절전 모드로 전환되면 운영 체제에 RAM 콘텐츠를 Amazon EBS 루트 볼륨에 저장하라는 신호가 전달됩니다. 인스턴스를 다시 시작하면 루트 볼륨이 이전 상태로 복원되고 RAM의 콘텐츠가 다시 로드됩니다. 인스턴스가 최대 절전 모드에 있는 동안에는 RAM 콘텐츠용 스토리지를 포함한 EBS 볼륨과 인스턴스에 연결된 탄력적 IP 주소에 대해서만 요금을 지불하면 됩니다.  
웜 풀 내에서 인스턴스를 `Running` 상태로 유지하는 것도 가능하지만 불필요한 요금이 발생하지 않도록 하는 것이 좋습니다. 인스턴스가 중지되거나 최대 절전 모드로 전환되면 인스턴스 자체의 비용이 절감됩니다. 인스턴스가 실행 중일 때만 해당 인스턴스에 대한 요금을 지불합니다.

**수명 주기 후크**  
[수명 주기 후크](warm-pool-instance-lifecycle.md)를 사용하여 인스턴스를 대기 상태에 놓음으로써 인스턴스에서 사용자 지정 작업을 수행할 수 있습니다. 사용자 지정 작업은 인스턴스가 시작될 때 또는 해지되기 전에 수행됩니다.  
또한 웜 풀 구성에서 수명 주기 후크는 인스턴스의 초기화가 완료될 때까지 스케일 아웃 이벤트 중에 인스턴스가 중지 또는 동면되거나 서비스 상태가 되지 않도록 인스턴스를 지연시킬 수 있습니다. 수명 주기 후크 없이 Auto Scaling 그룹에 웜 풀을 추가하는 경우, 초기화를 완료하는 데 시간이 오래 걸리는 인스턴스는 준비가 되기 전에 스케일 아웃 이벤트 동안 중지되거나 최대 절전 모드로 전환된 다음 서비스 상태가 될 수 있습니다.

**인스턴스 재사용 정책**  
기본적으로 Amazon EC2 Auto Scaling은 Auto Scaling 그룹이 축소되면 인스턴스를 해지합니다. 그런 다음 웜 풀로 새 인스턴스를 시작하여 해지된 인스턴스를 교체합니다.  
그러지 않고 웜 풀로 인스턴스를 반환하려는 경우, 인스턴스 재사용 정책을 지정할 수 있습니다. 이렇게 하면 이미 애플리케이션 트래픽을 처리하도록 구성된 인스턴스를 재사용할 수 있습니다. 웜 풀이 과다 프로비저닝되지 않도록 Amazon EC2 Auto Scaling은 해당 설정을 기준으로 웜 풀이 필요 이상으로 큰 경우, 웜 풀의 인스턴스를 해지하여 그 크기를 줄일 수 있습니다. 웜 풀에서 인스턴스를 해지할 때 웜 풀은 [기본 해지 정책](ec2-auto-scaling-termination-policies.md#default-termination-policy)을 사용하여 먼저 해지할 인스턴스를 선택합니다.  
축소 시 인스턴스를 최대 절전 모드로 전환하려는 경우, Auto Scaling 그룹에 기존 인스턴스가 있으면 인스턴스가 인스턴스 최대 절전 모드에 대한 요건을 충족해야 합니다. 그렇지 않으면 인스턴스가 웜 풀로 반환될 때 최대 절전 모드 대신 중지 상태로 전환됩니다.
현재는 AWS CLI 또는 SDK만 사용하여 인스턴스 재사용 정책을 지정할 수 있습니다. 콘솔에서는 이 기능을 사용할 수 없습니다.

## 사전 조건
<a name="warm-pool-prerequisites"></a>

Auto Scaling 그룹에 대한 웜 풀을 만들기 전에 수명 주기 후크를 사용하여 새 인스턴스를 적절한 초기 상태로 초기화할 방법을 결정하세요.

수명 주기 후크로 인해 대기 상태에 있는 인스턴스에 대해 사용자 지정 작업을 수행하려면 다음 두 가지 옵션이 있습니다.
+ 시작 시 인스턴스에서 명령을 실행하는 간단한 시나리오의 경우, Auto Scaling 그룹에 대한 시작 템플릿 또는 시작 구성을 생성할 때 사용자 데이터 스크립트를 포함할 수 있습니다. 사용자 데이터 스크립트는 인스턴스를 시작할 때 cloud-init을 통해 실행되는 단순한 일반 쉘 스크립트 또는 cloud-init 명령입니다. 이 스크립트는 스크립트가 실행되는 인스턴스의 ID를 사용하여 인스턴스가 다음 상태로 전환되는 시기를 제어할 수도 있습니다. 아직 없는 경우, 인스턴스 메타데이터에서 인스턴스의 인스턴스 ID를 검색하도록 스크립트를 업데이트합니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [인스턴스 메타데이터 액세스](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)를 참조하세요.
**작은 정보**  
인스턴스가 다시 시작될 때 사용자 데이터 스크립트를 실행하려면 사용자 데이터가 MIME 멀티 파트 형식이어야 하며 사용자 데이터의 `#cloud-config` 섹션에 다음과 같은 사항을 지정해야 합니다.  

  ```
  #cloud-config
  cloud_final_modules:
   - [scripts-user, always]
  ```
+ 인스턴스가 웜 풀 AWS Lambda 에 들어오거나 나갈 때와 같은 서비스가 필요한 고급 시나리오의 경우 Auto Scaling 그룹에 대한 수명 주기 후크를 생성하고 수명 주기 알림을 기반으로 사용자 지정 작업을 수행하도록 대상 서비스를 구성할 수 있습니다. 자세한 내용은 [지원되는 알림 대상](warm-pool-instance-lifecycle.md#warm-pools-supported-notification-targets) 단원을 참조하십시오.

**인스턴스의 최대 절전 모드 준비**  
`Hibernated` 풀 상태를 사용하도록 Auto Scaling 인스턴스를 준비하려면 *Amazon EC2 사용 설명서*의 [최대 절전 모드 사전 조건](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html) 주제에 설명된 대로 인스턴스 최대 절전 모드를 지원하도록 올바르게 설정된 새 시작 템플릿 또는 시작 구성을 생성합니다. 그런 다음 새 시작 템플릿 또는 시작 구성을 Auto Scaling 그룹과 연결하고 인스턴스 새로 고침을 시작하여 이전 시작 템플릿 또는 시작 구성과 연결된 인스턴스를 교체합니다. 자세한 설명은 [인스턴스 새로 고침을 사용하여 Auto Scaling 그룹의 인스턴스 업데이트](asg-instance-refresh.md) 섹션을 참조하세요.

## 웜 풀에서 인스턴스 업데이트
<a name="update-warm-pool"></a>

웜 풀의 인스턴스를 업데이트하려면 새 시작 템플릿 또는 시작 구성을 만들어 Auto Scaling 그룹에 연결하면 됩니다. 새 인스턴스는 시작 템플릿 또는 시작 구성에 지정된 새 AMI 및 기타 업데이트를 사용하여 시작되지만 기존 인스턴스는 영향을 받지 않습니다.

새 시작 템플릿 또는 시작 구성을 사용하는 교체 웜 풀 인스턴스가 강제로 시작되도록 하려면 인스턴스 새로 고침을 시작하여 그룹의 롤링 업데이트를 수행하면 됩니다. 인스턴스 새로 고침은 먼저 `InService` 인스턴스를 교체합니다. 그런 다음 웜 풀의 인스턴스를 교체합니다. 자세한 설명은 [인스턴스 새로 고침을 사용하여 Auto Scaling 그룹의 인스턴스 업데이트](asg-instance-refresh.md) 섹션을 참조하세요.

## 관련 리소스
<a name="warm-pools-related-resources"></a>

[GitHub 리포지토리](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples)에서 웜 풀용 수명 주기 후크의 예를 확인할 수 있습니다.

## 제한 사항
<a name="warm-pools-limitations"></a>
+ 혼합 인스턴스 유형이 있는 Auto Scaling 그룹의 웜 풀 제한 사항:
  + 웜 풀은 가중치 기반 혼합 인스턴스 그룹에서 지원되지 않습니다. Auto Scaling 그룹에서 인스턴스 가중치를 사용하는 경우 웜 풀을 추가할 수 없습니다.
  + 웜 풀은 혼합 인스턴스 그룹 내의 스팟 인스턴스를 지원하지 않습니다. 혼합 인스턴스 정책은 웜 풀을 사용할 때만 온디맨드 인스턴스에 대해 구성해야 합니다.
  + 최대 절전 모드로 혼합 인스턴스 그룹과 함께 웜 풀을 사용하는 경우 시작 템플릿에서 `HibernationOptions`를 구성해야 합니다.
+ Amazon EC2 Auto Scaling은 루트 디바이스로 Amazon EBS 볼륨이 있는 경우에만 인스턴스를 `Stopped` 또는 `Hibernated` 상태로 전환할 수 있습니다. 루트 디바이스에 인스턴스 스토어를 사용하는 인스턴스는 중지하거나 최대 전절 모드로 전환할 수 없습니다.
+ Amazon EC2 Auto Scaling은 *Amazon EC2 사용 설명서*의 [최대 절전 모드 사전 조건](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html) 주제에 열거된 요건을 충족하는 경우에만 인스턴스를 `Hibernated` 상태로 전환할 수 있습니다.
+ 스케일 아웃 이벤트가 있을 때 웜 풀이 고갈되면 인스턴스는 Auto Scaling 그룹으로 바로 시작됩니다(*콜드 스타트*). 또한 가용 영역의 용량이 부족할 경우, 콜드 스타트가 발생할 수도 있습니다.
+ 웜 풀 내의 인스턴스가 시작 프로세스 중에 문제가 발생하여 `InService` 상태에 도달하지 못하는 경우 해당 인스턴스는 시작 실패로 간주되고 종료됩니다. 이는 용량 부족 오류 또는 기타 요인과 같은 기본 원인과 관계없이 적용됩니다.
+ Amazon Elastic Kubernetes Service(Amazon EKS) 관리형 노드 그룹에서 웜 풀을 사용하려는 경우, 아직 초기화 중인 인스턴스가 Amazon EKS 클러스터에 등록될 수 있습니다. 따라서 클러스터가 중지 또는 최대 절전 모드를 준비할 때 인스턴스에 대한 작업을 예약하게 될 수 있습니다.
+ 마찬가지로 Amazon ECS 클러스터에서 웜 풀을 사용하려는 경우, 초기화가 완료되기 전에 인스턴스가 클러스터에 등록될 수 있습니다. 이 문제를 해결하려면 사용자 데이터에 특수 에이전트 구성 변수를 포함하는 시작 템플릿 또는 시작 구성을 구성해야 합니다. 자세한 설명은 *Amazon Elastic Container Service 개발자 안내서*의 [Auto Scaling 그룹의 웜 풀 사용](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/asg-capacity-providers.html#using-warm-pool)을 참조하세요.

# Auto Scaling 그룹에서 웜 풀과 함께 수명 주기 후크 사용
<a name="warm-pool-instance-lifecycle"></a>

웜 풀의 인스턴스는 각 전환에 적절한 사용자 지정 작업을 생성하는 데 도움이 되도록 독립적인 자체 수명 주기를 유지합니다. 이 수명 주기는 인스턴스가 아직 초기화 중이고 서비스 상태가 되기 전에 대상 서비스에서 작업(예: Lambda 함수)을 호출하는 데 도움이 되도록 설계되었습니다.

**참고**  
수명 주기 후크를 추가 및 관리하고 수명 주기 작업을 완료하는 데 사용하는 API 작업은 변경되지 않습니다. 인스턴스 수명 주기만 변경됩니다.

수명 주기 후크 추가에 대한 자세한 설명은 [Auto Scaling 그룹에 수명 주기 후크 추가](adding-lifecycle-hooks.md) 섹션을 참조하세요. 수명 주기 작업 완료에 대한 자세한 설명은 [Auto Scaling 그룹에서 수명 주기 작업 완료](completing-lifecycle-hooks.md) 섹션을 참조하세요.

웜 풀에 들어가는 인스턴스의 경우, 다음 이유 중 하나로 인해 수명 주기 후크가 필요할 수 있습니다.
+ 초기화를 완료하는 데 시간이 오래 걸리는 AMI에서 EC2 인스턴스를 시작하려고 합니다.
+ EC2 인스턴스를 부트스트랩하기 위해 사용자 데이터 스크립트를 실행하려고 합니다.

웜 풀에서 나가는 인스턴스의 경우, 다음 이유 중 하나로 인해 수명 주기 후크가 필요할 수 있습니다.
+ 사용할 EC2 인스턴스를 준비하는 데 추가 시간이 필요할 수 있습니다. 예컨대, 애플리케이션의 올바른 작동을 위해 인스턴스를 다시 시작할 때 반드시 시작해야 하는 서비스가 있을 수 있습니다.
+ 새 서버가 비어 있는 캐시로 시작되지 않도록 캐시 데이터를 미리 채우려고 합니다.
+ 새 인스턴스를 구성 관리 서비스에 관리형 인스턴스로 등록하려고 합니다.

## 웜 풀의 인스턴스에 대한 수명 주기 상태 전환
<a name="lifecycle-state-transitions"></a>

Auto Scaling 인스턴스는 수명 주기의 일부로 여러 가지 상태로 전환할 수 있습니다.

다음 다이어그램은 웜 풀을 사용할 때 Auto Scaling 상태 간의 전환을 보여줍니다.

![\[웜 풀의 인스턴스에 대한 수명 주기 상태 전환을 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/images/warm-pools-lifecycle-diagram.png)


¹ 이 상태는 웜 풀의 풀 상태 설정에 따라 다릅니다. 풀 상태가 `Running`으로 설정된 경우는 이 상태는 `Warmed:Running`이 됩니다. 풀 상태가 `Hibernated`로 설정된 경우, 이 상태는 `Warmed:Hibernated`가 됩니다.

수명 주기 후크를 추가할 때 다음 사항을 고려하세요.
+ `autoscaling:EC2_INSTANCE_LAUNCHING` 수명 주기 작업에 대해 수명 주기 후크가 구성된 경우, 새로 시작된 인스턴스가 `Warmed:Pending:Wait` 상태에 도달하면 먼저 일시 중지하여 사용자 지정 작업을 수행하고 인스턴스가 다시 시작되어 `Pending:Wait` 상태에 도달합니다.
+ `EC2_INSTANCE_TERMINATING` 수명 주기 작업에 대해 수명 주기 후크가 구성된 경우, 해지 인스턴스가 `Terminating:Wait` 상태에 도달하면 일시 중지하여 사용자 지정 작업을 수행합니다. 하지만 인스턴스를 해지하지 않고 스케일 인 시 웜 풀에 반환하도록 인스턴스 재사용 정책을 지정하는 경우, `EC2_INSTANCE_TERMINATING` 수명 주기 작업에 대해 `Warmed:Pending:Wait` 상태에서 웜 풀에 반환한 인스턴스가 일시 중지되어 사용자 지정 작업을 수행합니다.
+ 애플리케이션의 수요로 인해 웜 풀이 고갈되는 경우, Amazon EC2 Auto Scaling은 아직 최대 용량에 도달하지 않은 Auto Scaling 그룹으로 인스턴스를 직접 시작할 수 있습니다. 인스턴스가 그룹으로 직접 시작되는 경우, `Pending:Wait` 상태에서 사용자 지정 작업을 수행하기 위해서만 일시 중지됩니다.
+ 인스턴스가 다음 상태로 전환되기 전에 대기 상태를 유지하는 기간을 제어하려면 **complete-lifecycle-action** 명령을 사용하도록 사용자 지정 작업을 구성합니다. 수명 주기 후크를 사용하면 사용자가 지정된 수명 주기 작업이 완료되었음을 Amazon EC2 Auto Scaling에 알릴 때까지 혹은 제한 시간(기본적으로 1시간)이 끝날 때까지 인스턴스는 대기 상태로 유지됩니다.

다음은 스케일 아웃 이벤트의 흐름을 요약한 것입니다.

![\[스케일 아웃 이벤트의 흐름 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/images/warm-pools-scale-out-event-diagram.png)


인스턴스가 대기 상태에 도달하면 Amazon EC2 Auto Scaling이 알림을 전송합니다. 이러한 알림의 예는 이 가이드의 EventBridge 섹션에서 확인할 수 있습니다. 자세한 설명은 [웜 풀 예 이벤트 및 패턴](warm-pools-eventbridge-events.md) 섹션을 참조하세요.

## 지원되는 알림 대상
<a name="warm-pools-supported-notification-targets"></a>

Amazon EC2 Auto Scaling은 수명 주기 알림에 대한 알림 대상으로 다음 중 하나를 정의하는 기능에 대한 지원을 제공합니다.
+ EventBridge 규칙
+ Amazon SNS 주제 
+ Amazon SQS 대기열
+ AWS Lambda 함수

**중요**  
시작 템플릿 또는 시작 구성에 인스턴스가 시작될 때 인스턴스를 구성하는 사용자 데이터(cloud-init) 스크립트가 있는 경우, 시작하거나 다시 시작하고 있는 인스턴스에 사용자 지정 작업을 수행하기 위해 알림을 받을 필요가 없습니다.

다음 섹션에는 알림 대상을 구성하는 방법을 설명하는 문서에 대한 링크가 포함되어 있습니다.

**EventBridge 규칙** - Amazon EC2 Auto Scaling이 인스턴스를 대기 상태로 설정할 때 코드를 실행하려면 EventBridge 규칙을 생성하고 Lambda 함수를 대상으로 지정할 수 있습니다. 수명 주기 알림에 따라 서로 다른 Lambda 함수를 호출하려면 여러 규칙을 생성하고 각 규칙을 특정 이벤트 패턴 및 Lambda 함수에 연결할 수 있습니다. 자세한 내용은 [웜 풀 이벤트에 대한 EventBridge 규칙 생성](warm-pool-events-eventbridge-rules.md) 단원을 참조하십시오.

**Amazon SNS 주제** - 인스턴스가 대기 상태로 설정될 때 알림을 받으려면 Amazon SNS 주제를 생성한 다음 메시지 속성에 따라 수명 주기 알림을 다르게 전송하도록 Amazon SNS 메시지 필터링을 설정합니다. 자세한 내용은 [Amazon SNS를 사용하여 알림 수신](prepare-for-lifecycle-notifications.md#sns-notifications) 단원을 참조하십시오.

**Amazon SQS 대기열** - 관련 소비자가 알림을 수신하고 처리할 수 있는 수명 주기 알림 전송 지점을 설정하려면 Amazon SQS 대기열과 해당 SQS 대기열의 메시지를 처리하는 대기열 소비자를 생성할 수 있습니다. 대기열 소비자가 메시지 속성에 따라 수명 주기 알림을 다르게 처리하도록 하려면 메시지를 구문 분석한 다음 특정 속성이 원하는 값과 일치하면 메시지에 대해 조치를 취하도록 대기열 소비자를 설정해야 합니다. 자세한 내용은 [Amazon SQS 사용하여 알림 수신](prepare-for-lifecycle-notifications.md#sqs-notifications) 단원을 참조하십시오.

**AWS Lambda 함수** - Amazon EC2 Auto Scaling이 인스턴스를 대기 상태로 전환할 때 사용자 지정 코드를 실행하려면 Lambda 함수를 알림 대상으로 지정할 수 있습니다. Lambda 함수는 수명 주기 알림 데이터와 함께 호출되므로 인스턴스 구성, 애플리케이션 설정 또는 다른 AWS 서비스와의 통합과 같은 사용자 지정 작업을 수행할 수 있습니다. Auto Scaling 서비스 연결 역할이 함수를 간접적으로 호출할 수 있도록 Lambda 함수의 리소스 기반 정책을 구성해야 합니다. 자세한 내용은 [에 AWS Lambda 직접 알림 라우팅](prepare-for-lifecycle-notifications.md#lambda-notification) 단원을 참조하십시오.

# Auto Scaling 그룹을 위한 웜 풀 생성
<a name="create-warm-pool"></a>

이 주제에서는 Auto Scaling 그룹을 위한 웜 풀을 생성하는 방법을 설명합니다.

**중요**  
계속하기 전에 웜 풀을 만들기 위한 [전제 조건](ec2-auto-scaling-warm-pools.md#warm-pool-prerequisites)을 완료하고 Auto Scaling 그룹에 대한 수명 주기 후크를 만들었는지 확인하세요.

## 웜 풀 생성
<a name="create-a-warm-pool"></a>

다음 절차에 따라 Auto Scaling 그룹에 대한 웜 풀을 생성할 수 있습니다.

**웜 풀을 생성하려면(콘솔)**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 열고 탐색 창에서 **Auto Scaling 그룹(Auto Scaling Groups)**을 선택합니다.

1. 기존 그룹 옆의 확인란을 선택합니다.

   페이지 하단에 분할 창이 열립니다.

1. **Instance management(인스턴스 관리)** 탭을 선택합니다.

1. **Warm pool(웜 풀)**에서 **Create warm pool(웜 풀 만들기)**을 선택합니다.

1. 웜 풀을 구성하려면 다음을 수행하십시오:

   1. **Warm pool instance state(웜 풀 인스턴스 상태)**에서 웜 풀에 들어갈 때 인스턴스를 전환할 상태를 선택합니다. 기본값은 `Stopped`입니다.

   1. **Minimum warm pool size(최소 웜 풀 크기)**에 웜 풀에서 유지할 최소 인스턴스 수를 입력합니다.

   1. **인스턴스 재사용**의 경우 Auto Scaling 그룹의 인스턴스가 스케일 인 시 웜 풀로 돌아가도록 허용하려면 **스케일 인 시 재사용** 확인란을 선택합니다.

   1. **웜 풀 크기**에서 사용 가능한 옵션 중 하나를 선택합니다.
      + **기본 사양**: 웜 풀의 크기는 Auto Scaling 그룹의 최대 용량과 원하는 용량 간의 차이에 따라 결정됩니다. 이 옵션은 웜 풀 관리를 간소화합니다. 웜 풀을 생성한 후에는 그룹의 최대 용량을 조정하는 것만으로 웜 풀의 크기를 쉽게 업데이트할 수 있습니다.
      + **사용자 지정 사양**: 웜 풀의 크기는 사용자 지정 값과 Auto Scaling 그룹의 원하는 용량 간의 차이에 따라 결정됩니다. 이 옵션을 사용하면 그룹의 최대 용량과 독립적으로 웜 풀의 크기를 유연하게 관리할 수 있습니다.

1. **현재 설정을 기반으로 한 예상 웜 풀 크기**를 보고 기본 또는 사용자 지정 사양이 웜 풀 크기에 어떻게 적용되는지 확인합니다. 웜 풀의 크기는 Auto Scaling 그룹의 원하는 용량에 따라 달라지며, 그룹의 규모가 조정되면 변경됩니다.

1. **생성(Create)**을 선택합니다.

## 혼합 인스턴스 그룹이 있는 인스턴스 유형 선택
<a name="warm-pool-mixed-instance-types"></a>

Auto Scaling은 그룹이 혼합 인스턴스 정책으로 구성된 경우 규모 조정 이벤트 중에 이미 웜 풀에 있는 인스턴스 유형의 우선순위를 지정합니다. 시작 동작:

1. Auto Scaling은 웜 풀에서 사용할 수 있는 인스턴스 유형을 사용하여 인스턴스를 시작하려고 시도합니다.

1. 웜 런치가 실패하면 Auto Scaling은 혼합 인스턴스 정책의 나머지 모든 인스턴스 유형을 사용하여 콜드 런치를 시도합니다.

**Example**  
**예제**  
Auto Scaling 그룹을 10개의 인스턴스 유형으로 구성했고 워밍 풀에 그중 6개가 포함되어 있다고 가정합니다. 스케일 아웃 중에 Auto Scaling은 먼저 웜 풀에서 6개의 인스턴스 유형을 시도합니다. 실패한 경우 Auto Scaling은 콜드 런치를 통해 구성된 모든 인스턴스 유형을 시도합니다.

이렇게 하면 전체 혼합 인스턴스 구성의 유연성을 유지하면서 가능하면 웜 풀 성능 이점을 얻을 수 있습니다.

## 웜 풀 삭제
<a name="delete-warm-pool"></a>

더 이상 웜 풀이 필요하지 않으면 다음 절차에 따라 삭제합니다.

**웜 풀을 삭제하려면(콘솔)**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 열고 탐색 창에서 **Auto Scaling 그룹(Auto Scaling Groups)**을 선택합니다.

1. 기존 그룹 옆의 확인란을 선택합니다.

   페이지 하단에 분할 창이 열립니다.

1. **Instance management(인스턴스 관리)** 탭을 선택합니다.

1. **웜 풀(Warm pool)**에서 **작업(Actions)**, **삭제(Delete)**를 선택합니다.

1. 확인 메시지가 나타나면 **삭제**를 선택합니다.

# 건전성 체크의 상태 및 건전성 체크 불합격 이유 보기
<a name="warm-pools-health-checks-monitor-view-status"></a>

상태 확인을 통해 Amazon EC2 Auto Scaling은 인스턴스가 비정상이며 해지되어야 하는 시점을 확인할 수 있습니다. `Stopped` 상태로 유지되는 웜 풀 인스턴스의 경우, Amazon EBS가 `Stopped`인스턴스의 가용성에 대해 알고 있는 정보를 사용하여 비건전 인스턴스를 식별할 수 있습니다. 인스턴스에 연결된 EBS 볼륨의 상태를 확인하는 `DescribeVolumeStatus` API를 호출하여 식별할 수 있습니다. `Running` 상태로 유지되는 웜 풀 인스턴스의 경우, EC2 건전성 체크에 따라 인스턴스 상태를 결정합니다. 웜 풀 인스턴스에 대한 건전성 체크 유예 기간은 없지만 Amazon EC2 Auto Scaling은 수명 주기 후크가 완료될 때까지 인스턴스 상태를 확인을 시작하지 않습니다.

인스턴스가 건전하지 않은 것으로 확인되면 Amazon EC2 Auto Scaling은 비건전 인스턴스를 자동으로 삭제하고 새 인스턴스를 생성하여 교체합니다. 인스턴스는 일반적으로 건전성 체크에 실패한 후 몇 분 이내에 해지됩니다. 자세한 설명은 [상태 확인 불합격 이유 확인](replace-unhealthy-instance.md)을 참조하세요.

사용자 지정 건전성 체크도 지원됩니다. 이는 인스턴스의 상태를 감지하고 해당 정보를 Amazon EC2 Auto Scaling에 전송할 수 있는 자체 건전성 체크 시스템이 있는 경우, 유용합니다. 자세한 내용은 [Auto Scaling 그룹에 대한 사용자 지정 상태 확인 설정](set-up-a-custom-health-check.md) 단원을 참조하십시오.

Amazon EC2 Auto Scaling 콘솔에서 웜 풀 인스턴스의 상태(정상 또는 비정상)를 확인할 수 있습니다. AWS CLI 또는 SDKs.

**웜 풀 인스턴스의 건전성 체크(콘솔)**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 열고 탐색 창에서 **Auto Scaling 그룹(Auto Scaling Groups)**을 선택합니다.

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

   **Auto Scaling 그룹(Auto Scaling groups)** 페이지 하단에 분할 창이 열립니다.

1. **인스턴스 관리(Instance management)** 탭의 **웜 풀 인스턴스(Warm pool instances)**에서 **수명 주기(Lifecycle)** 열은 인스턴스의 상태를 포함합니다.

   **건전성 체크(Health status)** 열에는 Amazon EC2 Auto Scaling이 인스턴스 상태에 대해 평가한 내용이 표시됩니다.
**참고**  
새 인스턴스가 정상으로 시작됩니다. 수명 주기 후크가 완료될 때까지 인스턴스의 상태는 확인되지 않습니다.

**건전성 체크 불합격 이유를 확인하려면(콘솔)**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 열고 탐색 창에서 **Auto Scaling 그룹(Auto Scaling Groups)**을 선택합니다.

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

   **Auto Scaling 그룹(Auto Scaling groups)** 페이지 하단에 분할 창이 열립니다.

1. **활동(Activity)** 탭에서 **활동 기록(Activity history)**의 **상태(Status)** 열에 Auto Scaling 그룹이 성공적으로 인스턴스를 시작 또는 해지했는지가 표시됩니다.

   비건전 인스턴스를 해지한 경우, **원인(Cause)** 열에는 해지 날짜 및 시간과 건전성 체크 불합격 이유가 표시됩니다. 예: “2021-04-01T21:48:35Z에 EBS 볼륨 건전성 체크 불합격에 대한 응답으로 인스턴스가 서비스 중단되었습니다.” 

**웜 풀 인스턴스의 건전성 체크(AWS CLI)**  
다음을 [describe-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-warm-pool.html) 명령을 사용하여 Auto Scaling 그룹의 웜 풀을 확인할 수 있습니다.

```
aws autoscaling describe-warm-pool --auto-scaling-group-name my-asg
```

출력 예제

```
{
    "WarmPoolConfiguration": {
        "MinSize": 0,
        "PoolState": "Stopped"
    },
    "Instances": [
        {
            "InstanceId": "i-0b5e5e7521cfaa46c",
            "InstanceType": "t2.micro",
            "AvailabilityZone": "us-west-2a",
            "LifecycleState": "Warmed:Stopped",
            "HealthStatus": "Healthy",
            "LaunchTemplate": {
                "LaunchTemplateId": "lt-08c4cd42f320d5dcd",
                "LaunchTemplateName": "my-template-for-auto-scaling",
                "Version": "1"
            }
        },
        {
            "InstanceId": "i-0e21af9dcfb7aa6bf",
            "InstanceType": "t2.micro",
            "AvailabilityZone": "us-west-2a",
            "LifecycleState": "Warmed:Stopped",
            "HealthStatus": "Healthy",
            "LaunchTemplate": {
                "LaunchTemplateId": "lt-08c4cd42f320d5dcd",
                "LaunchTemplateName": "my-template-for-auto-scaling",
                "Version": "1"
            }
        }
    ]
}
```

**건전성 체크 불합격 이유 확인(AWS CLI)**  
다음 [describe-scaling-activities](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-scaling-activities.html) 명령을 사용합니다.

```
aws autoscaling describe-scaling-activities --auto-scaling-group-name my-asg
```

다음은 응답의 예입니다. `Description`은 Auto Scaling 그룹이 인스턴스를 해지했음을 나타내며 `Cause`는 건전성 체크 불합격의 원인을 나타냅니다.

크기 조정 활동은 시작 시간으로 정렬됩니다. 아직 진행 중인 활동이 먼저 설명됩니다.

```
{
  "Activities": [
    {
      "ActivityId": "4c65e23d-a35a-4e7d-b6e4-2eaa8753dc12",
      "AutoScalingGroupName": "my-asg",
      "Description": "Terminating EC2 instance: i-04925c838b6438f14",
      "Cause": "At 2021-04-01T21:48:35Z an instance was taken out of service in response to EBS volume health check failure.",
      "StartTime": "2021-04-01T21:48:35.859Z",
      "EndTime": "2021-04-01T21:49:18Z",
      "StatusCode": "Successful",
      "Progress": 100,
      "Details": "{\"Subnet ID\":\"subnet-5ea0c127\",\"Availability Zone\":\"us-west-2a\"...}",
      "AutoScalingGroupARN": "arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:283179a2-f3ce-423d-93f6-66bb518232f7:autoScalingGroupName/my-asg"
    },
...
  ]
}
```

# 를 사용하여 웜 풀을 생성하고 관리하는 예제 AWS CLI
<a name="examples-warm-pools-aws-cli"></a>

 AWS Management Console, AWS Command Line Interface (AWS CLI) 또는 SDKs.

다음 예에서는 AWS CLI를 사용하여 웜 풀을 생성하고 관리하는 방법을 보여줍니다.

**Topics**
+ [예 1: `Stopped` 상태로 인스턴스 유지](#warm-pool-configuration-ex1)
+ [예 2: `Running` 상태로 인스턴스 유지](#warm-pool-configuration-ex2)
+ [예 3: `Hibernated` 상태로 인스턴스 유지](#warm-pool-configuration-ex3)
+ [예 4: 축소 시 웜 풀로 인스턴스 반환](#warm-pool-configuration-ex4)
+ [예 5: 웜 풀의 최소 인스턴스 수 지정](#warm-pool-configuration-ex5)
+ [예제 6: 사용자 지정 사양을 사용하여 웜 풀 크기 정의](#warm-pool-configuration-ex6)
+ [예 7: 절대 웜 풀 크기 정의](#warm-pool-configuration-ex7)
+ [예 8: 웜 풀 삭제](#delete-warm-pool-cli)

## 예 1: `Stopped` 상태로 인스턴스 유지
<a name="warm-pool-configuration-ex1"></a>

다음 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 예는 인스턴스를 `Stopped` 상태로 유지하는 웜 풀을 생성합니다.

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped
```

## 예 2: `Running` 상태로 인스턴스 유지
<a name="warm-pool-configuration-ex2"></a>

다음 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 예는 인스턴스를 `Stopped` 상태 대신 `Running` 상태로 유지하는 웜 풀을 생성합니다.

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Running
```

## 예 3: `Hibernated` 상태로 인스턴스 유지
<a name="warm-pool-configuration-ex3"></a>

다음 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 예는 인스턴스를 `Stopped` 상태 대신 `Hibernated` 상태로 유지하는 웜 풀을 생성합니다. 이렇게 하면 메모리 콘텐츠(RAM)를 삭제하지 않고 인스턴스를 중지할 수 있습니다.

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Hibernated
```

## 예 4: 축소 시 웜 풀로 인스턴스 반환
<a name="warm-pool-configuration-ex4"></a>

다음 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 예는 인스턴스를 `Stopped` 상태로 유지하고 `--instance-reuse-policy` 옵션을 포함하는 웜 풀을 생성합니다. 인스턴스 재사용 정책 값 `'{"ReuseOnScaleIn": true}'`는 Auto Scaling 그룹이 축소되면 Amazon EC2 Auto Scaling에서 인스턴스를 웜 풀로 반환하도록 지시합니다.

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --instance-reuse-policy '{"ReuseOnScaleIn": true}'
```

## 예 5: 웜 풀의 최소 인스턴스 수 지정
<a name="warm-pool-configuration-ex5"></a>

다음 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 예는 최소 4개의 인스턴스를 유지하는 웜 풀을 생성하므로 트래픽 급증을 처리할 수 있는 인스턴스가 적어도 4개가 있게 됩니다.

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --min-size 4
```

## 예제 6: 사용자 지정 사양을 사용하여 웜 풀 크기 정의
<a name="warm-pool-configuration-ex6"></a>

기본적으로 Amazon EC2 Auto Scaling은 Auto Scaling 그룹의 최대 용량과 원하는 용량 간의 차이에 따라 웜 풀의 크기를 관리합니다. 하지만 `--max-group-prepared-capacity` 옵션을 사용하여 그룹의 최대 용량과 독립적으로 웜 풀의 크기를 관리할 수 있습니다.

다음 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 예제는 웜 풀을 생성하고 웜 풀과 Auto Scaling 그룹 모두에 동시에 존재할 수 있는 최대 인스턴스 수를 설정합니다. 그룹의 원하는 용량이 800인 경우 웜 풀은 이 명령을 실행한 후 초기화될 때 처음에 크기가 100이 됩니다.

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --max-group-prepared-capacity 900
```

웜 풀의 최소 인스턴스 수를 유지하려면 다음과 같이 명령에 `--min-size` 옵션을 포함합니다.

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --max-group-prepared-capacity 900 --min-size 25
```

## 예 7: 절대 웜 풀 크기 정의
<a name="warm-pool-configuration-ex7"></a>

`--max-group-prepared-capacity` 및 `--min-size` 옵션에 동일한 값을 설정하는 경우, 웜 풀은 절대 크기를 갖습니다. 다음 [put-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-warm-pool.html) 예는 웜 풀 크기를 인스턴스 10개로 일정하게 유지하는 웜 풀을 생성합니다.

```
aws autoscaling put-warm-pool --auto-scaling-group-name my-asg /
  --pool-state Stopped --min-size 10 --max-group-prepared-capacity 10
```

## 예 8: 웜 풀 삭제
<a name="delete-warm-pool-cli"></a>

웜 풀을 삭제하려면 다음 [delete-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/delete-warm-pool.html) 명령을 사용합니다.

```
aws autoscaling delete-warm-pool --auto-scaling-group-name my-asg
```

웜 풀에 인스턴스가 있거나 조정 활동이 진행 중인 경우, `--force-delete` 옵션과 함께 [delete-warm-pool](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/delete-warm-pool.html) 명령을 사용합니다. 또한 이 옵션은 Amazon EC2 인스턴스와 모든 미처리 수명 주기 작업을 해지합니다.

```
aws autoscaling delete-warm-pool --auto-scaling-group-name my-asg --force-delete
```