안녕하세요 서후아빠입니다. ^_^
이번 세션은 EC2 AutoScaling 구성과 동적 조정에서 사용되는 옵션들에 대해서 업무적으로 필요한 최소한의 개념에 대해서 간단히 정리해 보았습니다.
개요
Vertical (수직) | Horizontal (수평) |
인스턴스의 성능 향상 | 인스턴스 개수 확장 |
Auto Scaling : 수평 확장, 최대한 저렴하고 안정적으로 애플리케이션 모니터링하여 용량을 자동 조정
Auto Scaling 대상 : EC2, DDB, Spot Fleet(Spot 인스턴스), Aurora, ECS(도커) 등
Auto Scaling 크기 조정 : 가장 효율적인 방법은 "동적 크기 조정 + 예측 크기 조정"을 함께 사용
구분 | 내용 |
동적 크기 조정 (Dynamic scaling) |
- Target tracking scaling (대상 추적 조정, 권고) : CloudWatch 지표와 목표값을 기준으로 그룹의 용량 조정 - Step scaling (단계 조정) : CloudWatch 경보(지표 하한값, 지표 상한값) 설정 기반으로 그룹의 용량 조정 - Simple scaling (단순 조정) : 단계 조정과 비슷, Auto Scaling 초기부터 지원한 옵션 |
예측 크기 조정 (Predictive scaling) |
- CloudWatch의 기록 데이터를 기반으로 필요량 예측 - 24시간 기록 데이터 기반으로 예측 생성 시작 - 14일 동안의 CloudWatch 데이터 패턴을 찾아 이후 48시간 동안의 시간별 예측 생성 |
구성도
일반적으로는 모든 애플리케이션을 설정한 상태에서 EC2를 AMI에 등록하고, Auto Scaling을 구성하므로 아래 1단계 과정이 필요없습니다. 다만, 경우에 따라서는 Auto Scaling 동작으로 생성된 EC2가 구동을 하면서 특정 경로(ex : mybucket)의 구성 파일을 이용하여 애플리케이션을 구성하는 경우도 있으며, 이때에는 아래 1단계와 같은 과정이 추가됩니다. |
사전 작업
인프라 생성 : vpc, subnet, igw, routing table, iam, ec2 등은 설명 생략합니다.
2022.07.02 - [Networking] - [실습] Amazon VPC 구성요소 생성하기
1단계 : EC2 구동 시 참조할 구성 파일을 S3 버킷에 업로드
모든 애플리케이션이 구성된 AMI를 생성하는 경우는 1단계를 생략해도 됩니다. |
IAM > Roles > Create role
Select trusted entity | Add permissions | Name, review, and create |
Trusted entity type : AWS service Use case : EC2 |
AmazonS3ReadOnlyAccess | Role name : CustomEC2Role |
S3 > Bubkes > Create bucket
Bucket name | AWS Region | ETC |
mybucket | ap-northeast-2 | 기본값 유지 |
S3 > Bubkes > mybucket > Upload > "index.html" 파일 선택하여 업로드
# index.html 내용 예시
<html><body>hello World</body></html>
2단계 : AMI 생성
모든 애플리케이션이 구성된 AMI를 생성하는 경우만 2단계를 진행하시기 바랍니다. |
EC2 > Instances > 애플리케이션 구성이 완료된 EC2 선택(pubA-ec2) > Actions > Image and templates > Create image
Image name | Image description(옵션) | No reboot | Volumes | Tags(옵션) |
pubA-ec2-ami | - | Disabled (or Enable) | - | Tag image and snapshots together (or Tag image and snapshots separately) |
EC2 > AMIs > 생성된 AMI 확인
3단계 : 시작 템플릿 생성 (or 시작 구성)
시작 템플릿을 이용하면 버전 관리가 가능하기 때문에 가급적 시작 구성(Launch Configurations)보다는 시작 템플릿(Launch Templates)으로 진행하는 것을 권고드립니다. |
EC2 > Launch Templates > Create launch template
Launch template name and description |
AMI | Instance type | Key pair (login) |
Launch template name : pubA-ec2-lt Template version description : 1.0 Auto Scaling guidance : Disabled |
pubA-ec2-ami | t3.micro (원하는 type 선택) |
기존 pubA-ec2의 key pair 선택 |
Network settings | Storage (volumes) | Resource tags | Advanced details |
Subnet : Don't include in launch template Firewall : 기존 pubA-ec2의 SG 선택 |
- | Key : Name Value : pubA-ec2-asg Resource types : Instances |
User data : 아래 내용 참조 |
# User data 입력 예시(1단계에 업로드한 구성 파일 이용하여 애플리케이션 구성하는 경우만 해당)
#!/bin/bash
sudo yum install httpd -y
sudo systemctl start httpd.service
sudo aws s3 cp s3://asg-config-file/index.html /var/www/html --region ap-northeast-2
Firewall(Security Group) 주의 : Instance가 생성될 VPC의 SG 선택 Resource tags : Auto Scaling으로 생성된 EC2의 Name값 - Resource types 선택 옵션 : Instance, Volumes, Network Interfaces, Spot instance request Auto Scaling으로 동작중인 Instance 중에서 1개를 선택하여 설정 변경한 경우 1. 해당 Instance에 대해서 AMI를 생성 (2단계 참조) 2. Launch Templates에 대해서 새로운 Version으로 생성하고, Default version 설정을 최신 버전으로 지정 - EC2 > Launch templates > pubA-ec2-lt > Actions > Modify template (Create new version) > Template version description (2.0) - EC2 > Launch templates > pubA-ec2-lt > Actions > Set default version > Template version (2.0) |
4단계 : Auto Scaling 그룹 생성 (albA 설명은 SKIP)
EC2 > Auto Scaling Groups > Create Auto Scaling group
Choose launch template or configuration | Choose instance launch options | Configure advanced options |
Name : pubA-ec2-asg launch template : pubA-ec2-lt (Version : 원하는 버전 선택) |
VPC : vpcA Subnets : pubA-sn-a, pubA-sn-c |
Load balancing (옵션) : Attach to an existing load balancer Choose from your load balancer target groups : albA-tg Health checks (옵션) - Health check type : EC2, ELB - Health check grace period : 60초 Additional settings (옵션) - Monitoring(CloudWatch) : Disabled (or Enable) - Default instance warmup : 60초 |
Configure group size and scaling policies | Add notifications |
Group size (Desired/Minimum/Maximum) : 2/2/10 Scaling policies (옵션) : Target tracking scaling policy (or None) - Scaling policy name : Target Tracking Policy - Metric type : Average CPU utilization - Target value (%) : 50 - Instances need (워밍업, 기본 60초) : - Disable scale in to create only a scale-out policy : Disabled (or Enable) Instance scale-in protection (옵션) : Disable (or Enable) |
SNS Topic : mytopic Event types - Launch : Disabled - Terminate : Disabled - Fail to launch : Enable - Fail to terminate : Enable |
Load balancing(옵션) : No load balancer, Attach to an existing load balancer, Attach to a new load balancer Target groups(elbA-tg) - pubA-ec2의 서비스에 대해서 elbA(Target Group 포함)를 사전에 생성해 두어야 합니다. - pubA-ec2의 서비스가 여러개일 경우는 Target Group를 여러개 생성해서 elbA에 연결해 놓고, Auto Scaling에도 등록합니다. Health checks(옵션) - Health check type : ELB를 연결하는 경우는 ELB 선택 - Health check grace period (상태 확인 유예기간, 기본 300초) : 새 인스턴스가 비정상일지라도 즉시 종료시키지 않고, 대기하는 시간으로 애플리케이션 구성되는 시간을 감안해서 설정 ※ 적용 대상 : 새로 시작된 인스턴스, 대기 상태에서 서비스 재시작하는 인스턴스, 그룹에서 수동으로 연결된 인스턴스 Default instance warmup (기본 인스턴스 워밍업) : 새 인스턴스가 서비스 준비동안 CloudWatch에 지표를 제공하지 않는 시간 - Auto Scaling Group에 대한 모든 워밍업 및 휴지 설정을 통합하는 개념으로 활성화 권고 - 설정 시 개별 조정 정책(Instances need) 및 인스턴스 새로 고침에서 워밍업 설정 불필요 - 애플리케이션 구성하는 시간을 감안하여 시간 설정 Scaling policies - Metric type (옵션) : Average CPU utilization, ALB request count per target, Average network in, Average network out - Target value : 특정 시간 급격히 들어오는 경우는 빠른 대응을 위해 낮은 수치로 설정합니다. 새로운 인스턴스가 준비하는 동안 기존 인스턴스의 과부하로 인하여 서비스 지연이나 장애가 발생될 수 있기 때문입니다. ※ 더불어, 스케줄링 설정을 하여 해당 시간에 미리 인스턴스를 배포하는 방법도 병행하면 좋습니다. - Instances need : 기본 인스턴스 워밍업 설정 시 불필요 Instance scale-in protection : 새로 시작된 인스턴스는 제거되지 않도록 하는 기능 (기본 비활성화) |
EC2 > Auto Scaling Groups > pubA-ec2-asg 선택 > Instance management (tab) > Health status "Healthy" 확인
EC2 > Target Groups > elbA-tg 선택 > Targets (tab) > Health status "Healthy" 확인
Auto Scaling Groups의 Healthy는 "EC2 > Instances의 Instance state"와 같이 인스턴스 상태를 의미이므로 Target Groups의 서비스 상태와 혼동하지 않도록 주의하기 바랍니다. 모든 인스턴스 중지 : EC2 > Auto Scaling Groups > pubA-ec2-asg 선택 > Edit > Desired/Minimum/Maximum (0/0/0) |
기타 : Auto Scaling 예측 크기 조정 (Predictive scaling policy)
EC2 > Auto Scaling Groups > pubA-ec2-asg 선택 > Automatic scaling (tab) > Create Predictive scaling policy
Policy details | Turn on scaling | Metrics and target utilization | Additional scaling settings (옵션) |
Name : pubA-ec2-predictive | Scale based on forecast : Enable | Metrics : CPU utilization Target utilization (%) : 50 |
Pre-launch instances : 5 Min Max capacity behavior (0~100) : 50 |
Metrics (옵션) : CPU utilization, Network in, Network out, ALB request count, Custom metric pair Pre-launch instances : 예측시점이 도달하기 5분 전에 인스턴스를 미리 준비하기 시작 Max capacity behavior (기본값 비활성화) : 예측수량이 Auto Scaling에 설정된 Maximum값을 초과할 경우 50%까지 확장할 수 있도록 버퍼 설정한다는 의미 |
기타 : Auto Scaling 스케줄링 (Scheduled actions)
EC2 > Auto Scaling Groups > pubA-ec2-asg 선택 > Automatic scaling (tab) > Scheduled actions에서 Create scheduled action
Name | Desired / Min / Max | Recurrence | Time zone | Specific start time |
09:00-min-4 | - / 4 / - | Cron 0 9 * * 1-5 | Asia/Seoul | yyyy-mm-dd hh:mm 지정 |
매주 월~금 9시에 Min값을 4대로 자동 설정되도록 지정하는 내용입니다. Recurrence : Cron, Every 5 min, Every 30 min, Every 1 hour, Every day, Every week, Once Set End Time (종료일) : 특정 기간만 사용할 경우 종료일 지정하고 그 외는 사용하지 않습니다. |
참고 URL
Target tracking scaling : https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/as-scaling-target-tracking.html
Default instance warmup : https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/ec2-auto-scaling-default-instance-warmup.html
Health check grace period : https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/consolidated-view-of-warm-up-and-cooldown-settings.html
Default cooldown : https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/ec2-auto-scaling-scaling-cooldowns.html
예측 조정 : https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/ec2-auto-scaling-predictive-scaling.html
수명주기 후크 : https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/lifecycle-hooks.html
Auto Scaling 인스턴스 수명주기 : https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/ec2-auto-scaling-lifecycle.html
'Compute' 카테고리의 다른 글
[실습] EKS - Cluster (eksctl, AWS 콘솔), Ingress Controller, Container Image (0) | 2023.06.02 |
---|---|
[Tip] Amazon EC2 다양한 Error 상황 알아보기 (0) | 2022.08.04 |
[이론] 도커 (Docker) 기본 개념 (0) | 2022.07.26 |
[Tip] Windows에서 EC2 RDP 접속 2가지 방법 알아보기 (0) | 2022.07.13 |
[Tip] EC2 터미널 접속하는 4가지 방법 알아보기 (0) | 2022.07.12 |