EC2 Auto Scaling
- EC2 Auto Scaling 은 애플리케이션 실패 및 복구 상황을 방지하기 위한 서비스로 실패 발생 시 사용자가 지정한 수 만큼 인스터슨의 수를 동적으로 추가할 수 있다.
- EC2 Auto Scaling은 론치 환경설정 또는 론치 템플릿을 이용해 시작할 인스턴스의 환경을 자동으로 설정하며, 인스턴스의 기본 환경설정 파라미터 정의 및 론치 시점에 필요한 스크립트를 준비한다.
- 론치 템플릿은 론치 환경설정에 비해 좀 더 최신의 기술이 반영됐으며, aws 론치 템플릿 사용을 권장한다.
- 트래픽 분산을 위해 Application Load Balancer(ALB)를 사용하는데, Auto Scaling 생성 시 ALB 타겟 그룹에 연결하면 새 인스턴스 생성시 자동으로 ALB 타겟그룹(대상 그룹)을 추가한다.
- Auto Scaling 옵션을 사용하여 애플리케이션의 컴퓨팅 용량을 늘리거나 줄일 수 있는 기능이다.
*론치 환경설정(시작 환경설정)
- 인스턴스를 직접 생성하는 경우 AMI, 인스턴스 타입, SSH 키 페어, 시큐리티 그룹, 인스턴스 프로파일, 블록 디바이스 맵핑, EBS 최적화 여부, 플레이스먼트 테넌시, 앱 설치 및 환경설정을 위한 커스텀 스크립트 등 유저 데이터를 포함한 다양한 환경 설정 파라미터를 지정해야한다. 론치 환경설정에는 이러한 정보들이 담겨있다.
- 론치 환경설정은 기존 EC2 인스턴스의 설정 내용을 복사해서 생성하거나 처음부터 새롭게 작성할 수 있다.
- 론치 환경설정은 EC2 Auto Scaling에서만 사용할 수 있으며, 론치 환경설정만 가지고 인스턴스를 직접 론칭할 수 없으며,
한 번 론치 환경설정을 생성하면 수정할 수 없다. 설정 내용 중 수정이 필요한 경우 새 론치 환경설정을 생성해야한다.
*론치 템플릿(시작 템플릿)
- 론치 템플릿은 설정 방식 측면에서 론치 환경설정과 비슷하지만 사용 방식이 좀 더 직관적이고 이해하기 쉽다.
- Auto Scaling 작업시에도 사용할 수 있지만 EC2 인스턴스 사본 생성 또는 스팟 플릿 생성의 목적으로 사용할 수 있다.
- 모든 론치 템플릿 버전 목록을 관리하므로 필요에 따라 원하는 버전을 사용할 수있고 변경 이력을 추적할 수 있어 편리하다.
*Auto Scaling 그룹
- Auto Scaling이 관리하는 EC2 인스턴스 그룹이다.
- Auto Scaling 그룹 생성 시
> 시작 환경설정 또는 시작 템플릿을 생성해야한다.
> 그 후 몇 개의 인스턴스를 프로비전하고 실행할 것인지 템플릿에 지정한다.
> Auto Scaling 그룹의 최소 및 최대, 희망 용량 지정이 가능하다.
ex) 최소 1, 최대 10, 희망 4 이에 해당하는 용량이 지정된다는 가정하에 4개의 인스턴스 중 누군가의 실수 또는 오류로 이들 인스턴스 중 하나가 종료되면 Auto Scaling은 희망 용량 4에 맞춰 새 인스턴스를 자동으로 추가한다.
* ALB 대상 그룹(Target Group) (참고한 곳)
- 대상 그룹은 사용자의 요청을 처리할 EC2의 집합이다.
- 기본 설정으로는 "Protocol : Port" 는 HTTP 혹은 HTTPS를 정의한다. 이는 대상그룹에 소속된 EC2들이 설정된 "Protocol : Port" 만 받는다는 것을 의미한다.
- 헬스 체크는 대상그룹에 소속된 EC2들의 상태를 점검할 때 HTTP 혹은 HTTPS 를 사용하겠다는 것을 의미한다.
- ALB는 HTTP 헤더를 활용할 수 있는 로드 밸런서이기에 3-way handshake 가 끝난 후에도 웹 페이지를 요청하여 상태 체크를 실시할 수 있고 경로 또한 지정할 수 있다.
*애플리케이션 인스턴스에 헬스 체크
- Auto Scaling 그룹을 생성하면 미리 정한 최소 또는 희망 용량의 인스턴스가 항상 유지되며, 생성된 인스턴스의 헬스 상태가 좋지 못하면 이를 삭제하고 새 인스턴스로 대체한다.
*Auto Scaling 옵션
- 수동 스케일링(Menual Scaling) : 언제든지 기존 오토 스케일링의 용량을 수동으로 변경할 수 있으며 변경 즉시 반영된다.
- 동적 스케일링 정책(Dynamic Scaling Policies) : 동적 조정은 트래픽의 변화에 따라 오토 스케일링 그룹의 용량을 조정한다. CloudWatch의 경고 상황을 모니터링한 결과에 따라 희망 용량을 증가시키는 방식으로 작동한다.
- 대상(목표) 추적 조정(Target tracking scaling) -Amazon CloudWatch 지표와 목표 값을 기준으로 그룹의 현재 용량을 늘리거나 줄입니다. 이는 온도 조절기가 집안 온도를 유지하는 방식과 비슷하게 작동합니다. 사용자가 온도만 선택하면 나머지는 온도 조절기가 알아서 합니다.
- 단계 조정(Step scaling) - 그룹의 현재 용량을 일련의 조정 조절에 따라 늘리고 줄이며 경보 위반의 크기에 따라 달라지는 단계 조절이라고 합니다.
- 단순 조정(Simple scaling) - 단일 조정 설정에 따라 그룹의 현재 용량을 늘리고 줄입니다. 각 조정 작업 간에는 휴지 기간(cooldown period 알람이 울려도 반응하지 않는 기간)이 발생합니다.
> changeInCapacity: 지정 숫자만큼 희망 용량을 증가 시킴.
> ExactCapacity: 현재 값에 상관없이 용량을 지정 숫자만큼 증가 시킴.
> PercentChangeInCapacity: 현재 용량의 비율을 기준으로 증가 시킴.
- 예약 정책: 워크로드 패턴이 예측 가능한 경우나 용량 변화에 선제적으로 대응해 수요 증가 이전에 충분한 인스턴스를 확보하고자 할 떄 유용하다. 예측 정책은 다음과 같은 상황에 매우 적합하다.
- 주기적 트래픽(예: 정규 업무 시간 동안 리소스 사용량이 많고 저녁 및 주말에는 리소스가 적게 사용되는 경우)
- 반복적인 온/오프 워크로드 패턴(예: 배치 처리, 테스트 또는 주기적 데이터 분석)
- 초기화하는 데 시간이 오래 걸려 확장 이벤트 중에 애플리케이션 성능에 눈에 띄는 지연 영향을 받는 애플리케이션
https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/as-scale-based-on-demand.html