클라우드 컴퓨팅 시대에서 리소스의 효율적인 관리는 기업의 경쟁력과 직결됩니다.
특히, 급변하는 비즈니스 환경에서 탄력적인 인프라 운영은 필수적인 요소로 자리 잡았습니다.
Amazon EC2 Auto Scaling은 이러한 요구에 부응하는 강력한 도구로, 트래픽 변동에 따라 컴퓨팅 리소스를 자동으로 조정함으로써 비용 최적화와 성능 향상을 동시에 달성할 수 있게 해줍니다.
- EC2 Auto Scaling 이란? : https://docs.aws.amazon.com/ko_kr/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html
EC2 Auto Scaling은 애플리케이션의 동적 요구사항에 최적화된 인프라 탄력성을 제공하기 위해 다양한 고급 크기 조정 메커니즘을 제공합니다. 이 중에서 동적 크기 조정 정책은 실시간 워크로드 변화에 자동으로 대응하는 핵심 기능을 담당합니다.
동적 크기 조정의 주요 방식은 크게 세 가지로 분류됩니다.
1. 대상 추적 크기 조정 (Target Tracking Scaling)
- 대상 추적 크기 조정은 가장 진보된 형태의 동적 크기 조정 방식입니다.
이 방식은 특정 지표(예: 평균 CPU 사용률, 평균 네트워크 I/O, 평균 ALB 요청 카운트)에 대해 사전 정의된 목표값을 설정하고, Auto Scaling 그룹이 해당 목표를 지속적으로 유지하도록 자동으로 조정합니다. - CloudWatch에서 수집된 실시간 메트릭을 기반으로, EC2 인스턴스의 수를 동적으로 증가 또는 감소시켜 목표값에 근접하게 유지합니다.
이 방식은 복잡한 수동 구성 없이도 효율적인 리소스 관리를 가능케 하며, 급격한 트래픽 변동에도 신속하게 대응할 수 있습니다.
2. 단계 크기 조정 (Step Scaling)
- 단계 크기 조정은 보다 세밀한 제어가 필요한 상황에 적합한 방식입니다.
이 정책은 특정 CloudWatch 경보를 기반으로 작동하며, 경보의 심각도에 따라 다양한 규모의 조정 단계를 정의할 수 있습니다. - 각 단계는 특정 지표 값 범위와 연관된 조정 행동(예: 인스턴스 추가 또는 제거)을 정의합니다.
이를 통해 관리자는 다양한 시나리오에 대해 더욱 정교한 대응 전략을 수립할 수 있으며, 워크로드의 특성에 맞춘 맞춤형 스케일링 로직을 구현할 수 있습니다.
3. 단순 크기 조정 (Simple Scaling)
- 단순 크기 조정은 가장 기본적인 형태의 동적 크기 조정 정책입니다.
이 방식은 단일 CloudWatch 경보를 기반으로 작동하며, 경보가 트리거될 때 미리 정의된 수의 인스턴스를 추가하거나 제거합니다. - 단순 크기 조정은 구현이 간단하지만, 급격한 워크로드 변화에 대한 대응이 덜 유연할 수 있습니다.
또한, 각 조정 활동 후 쿨다운 기간이 적용되어, 이 기간 동안 추가적인 조정 활동이 제한됩니다.
이는 리소스의 과도한 변동을 방지하지만, 동시에 빠르게 변화하는 환경에서의 즉각적인 대응을 제한할 수 있습니다.
이번 실습에서는 EC2 Auto Scaling 그룹의 평균 메모리 사용률을 기반으로 한 단순 크기 조정 정책을 구현하겠습니다
실습은 다음 단계로 진행됩니다.
1. 메모리 사용률 집계 지표를 생성하기 위한 CloudWatch Agent 구성 파일을 Systems Manager Parameter Store에 생성합니다.
2. EC2에서 CloudWatch Agent 사용을 하기 위한 AWS IAM 역할을 생성합니다.
3. Auto Scaling에 대한 시작 템플릿을 만듭니다.
4. Auto Scaling 그룹을 생성합니다.
5. 단순 크기 조정을 사용하는 Auto Scaling 동적 크기 조정 정책을 생성합니다.
1. Systems Manager Parameter 생성
Systems Manager Parameter Store는 AWS에서 제공하는 안전하고 계층적인 구성 데이터 관리 서비스입니다. 이 서비스는 애플리케이션 설정, 암호, 데이터베이스 문자열 등의 구성 데이터를 중앙에서 저장하고 관리할 수 있게 해줍니다.
- Systems Manager Parameter Store란? : https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/systems-manager-parameter-store.html
CloudWatch Agent 구성 파일을 json 형태로 Systems Manager Parameter Store 에 저장하여 사용하도록 하겠습니다.
1.1) AWS Systems Manager 콘솔 접속 후 좌측 '파라미터 스토어' -> '파라미터 생성' 을 클릭합니다.
1.2) 파라미터 이름은 'AmazonCloudWatch-Agent-Mem' 입력. 아래 이미지와 같이 선택 후 값에 json 을 입력한 뒤 '파라미터 생성'을 클릭합니다.
※ 아래 2단계 역할 생성 단계에서의 편의를 위해 파라미터 이름을 ' AmazonCloudWatch-*' 와 같이 설정했습니다.
{
"agent": {
"metrics_collection_interval": 60
},
"metrics": {
"namespace": "ASG_Memory",
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"InstanceId": "${aws:InstanceId}"
},
"aggregation_dimensions" : [["AutoScalingGroupName"]],
"metrics_collected": {
"mem": {
"measurement": [
{"name": "mem_used_percent", "rename": "MemoryUtilization", "unit": "Percent"}
],
"metrics_collection_interval": 60
}
}
}
}
2. IAM 역할 생성
AWS 리소스에 액세스하려면 권한이 필요합니다. CloudWatch Agent가 EC2 및 Systems Manager와 통신하는데 필요한 권한이 포함된 IAM 역할을 만들도록 하겠습니다. 만든 IAM 역할은 EC2 인스턴스에서 사용됩니다.
2.1) AWS IAM 콘솔 접속 후 좌측 '역할' -> '역할 생성' 을 클릭합니다.
2.2) 아래와 같이 선택 후 '다음' 을 클릭합니다.
2.3) 정책 목록에서 'CloudWatchAgentServerPolicy' 을 검색, 선택 후 '다음' 버튼을 클릭합니다.
2.4) 원하는 역할 이름 입력 후 최하단 '역할 생성' 을 클릭합니다.
3. EC2 Auto Scaling 그룹 생성을 위한 시작 템플릿 만들기
Auto Scaling 그룹에서 시작되는 모든 EC2 인스턴스에 공통된 설정이 포함된 시작 템플릿을 지정합니다.
시작 템플릿의 사용자 데이터를 활용해 CloudWatch Agent 설치 및 Parameter Store를 사용한 Agent 구성을 진행합니다.
3.1) Amazon EC2 콘솔 접속 후 좌측 '시작 템플릿' -> '시작 템플릿 생성' 버튼을 클릭합니다.
3.2) 원하는 이름 입력 -> OS는 Amazon Linux 2023 -> 인스턴스 유형, 키 페어, 네트워크 설정은 인스턴스 생성 시 접속 가능한 환경으로 선택 합니다.
3.3) 최하단 '고급 세부 정보' 선택 후 IAM 인스턴스 프로파일 -> 2단계에서 생성한 역할을 선택합니다.
3.4) '고급 세부 정보' 의 최하단 '사용자 데이터' 에 아래의 값을 입력 후 '시작 템플릿 생성' 버튼을 클릭합니다.
#!/bin/bash
# Amazon Linux용 CloudWatch 통합 에이전트 다운로드
wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
# 통합 에이전트 설치
rpm -U ./amazon-cloudwatch-agent.rpm
# SSM Parameter 를 사용하여 에이전트 구성
# ssm:[1에서 생성한 파라미터 이름 입력]
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:AmazonCloudWatch-Agent-Mem -s
※ 사용자 데이터 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/user-data.html
4. Auto Scaling 그룹 생성
앞서 생성한 시작 템플릿을 기반으로 Auto Scaling 그룹을 생성하겠습니다.
4.1) Amaozn EC2 콘솔 접속 후 좌측 'Auto Scaling 그룹' -> 'Auto Scaling 그룹 생성' 버튼을 클릭합니다.
4.2) 원하는 Auto Scaling 그룹 이름 입력, 3에서 생성한 시작 템플릿 선택 후 '다음' 버튼을 클릭합니다.
4.3) Auto Scaling 으로 생성될 인스턴스가 위치할 서브넷을 선택 후 '다음' 버튼을 클릭합니다.
4.4) '고급 옵션 구성' 은 기본값으로 둔 후 '그룹 크기 및 크기 조정 구성' 에서 원하는 용량 : 1, 원하는 최소 용량 : 1, 원하는 최대 용량 : 2 로 설정 -> 나머지는 기본값으로 둔 후 '다음' 버튼을 클릭합니다.
4.5) 최종 검토 후 'Auto Scaling 그룹 생성' 버튼을 클릭합니다. 용량 설정에 따른 인스턴스 1대 실행이 확인됩니다.
4.6) Amazon CloudWatch 콘솔에서 좌측 '모든 지표' -> CloudWatch Agent 구성 파일에서 설정한대로 'ASG_Memory' 네임스페이스에서 Auto Scaling 그룹 메모리 사용량과 그룹 내 각 인스턴스의 메모리 사용량이 확인됩니다.
5. Auto Scaling 동적 크기 조정 정책 생성
앞서 설정한 Auto Scaling 그룹의 메모리 사용량을 기반으로 하는 단순 동적 크기 조정 정책을 생성하겠습니다.
5.1) Amazon CloudWatch 콘솔에서 좌측 '모든 경보' -> '경보 생성' 버튼을 클릭합니다.
5.2) '지표 선택' 버튼을 클릭 후 앞서 만든 Etech-ASG의 MemoryUtilization 지표를 선택합니다.
5.3) 기간을 1분으로 선택 후 조건에 원하는 메모리 사용량 임계값을 설정합니다. (실습에서는 50% 이상을 선택하겠습니다.)
5.4) 다음 '작업 구성' 단계에서 알림은 제거한 후 '다음' 버튼을 클릭합니다.
5.5) '이름 및 설명' 단계에서 원하는 경보 이름을 입력 후 '다음' 버튼을 클릭 -> '경보 생성' 을 완료합니다.
5.6) Amazon EC2 콘솔 접속 후 좌측 'Auto Scaling 그룹' -> 미리 생성한 Etech-ASG를 선택합니다.
5.7) 'Automatic Scaling' 탭 선택 후 '동적 크기 조정 정책 생성' 버튼을 클릭합니다.
5.8) 정책 유형을 ';단순 크기 조정' 으로 선택 -> 원하는 크기 조정 정책 이름 입력 -> 5.5 에서 만든 CloudWatch 경보를 선택 -> 경보 발생 시 인스턴스 1대가 추가되게 설정 후 생성합니다.
6. Auto Scaling 동적 크기 조정 정책 테스트
Auto Scaling에 대한 동적 크기 조정 정책을 설정했으니, 정상적으로 작동하는지 테스트를 해보겠습니다.
6.1) 4.5 를 통해 생성한 인스턴스에 접속합니다.
6.2) stress-ng를 사용해 메모리에 대한 시스템 리소스에 대한 스트레스 테스트를 진행합니다.
6.3) CloudWatch 에서 메모리 사용량 경보가 발생한 것이 확인됩니다.
6.4) Auto Scaling 그룹에서 인스턴스가 추가되는 것이 확인됩니다.
6.5 '활동' 탭에서 자세한 내용을 확인할 수 있습니다.
지금까지 Amazon EC2 Auto Scaling을 메모리 사용량 기반으로 설정하는 실습을 진행했습니다.
이는 단지 시작점에 불과합니다. CloudWatch Agent를 통해 다양한 사용자 지정 지표를 수집하고, 이를 기반으로 경보를 설정할 수 있습니다.
이러한 경보를 Auto Scaling 정책에 연결하면, 메모리 사용량 외에도 다양한 조건에 따라 자동으로 확장 및 축소가 가능합니다.
이 글에서 소개한 방법을 토대로, 여러분의 애플리케이션과 인프라에 적합한 다양한 Auto Scaling 시나리오를 테스트해보시기 바랍니다.
이를 통해 더욱 효율적이고 탄력적인 AWS 환경을 구축할 수 있을 것입니다.
긴 글을 끝까지 읽어주셔서 감사합니다.
이 내용이 여러분의 AWS 인프라 관리에 도움이 되기를 바랍니다.
※ 이 글은 작성자의 회사 블로그에도 게재되었습니다
'AWS' 카테고리의 다른 글
AWS 퍼블릭 IPv4 요금 부과에 따른 퍼블릭 IPv4 사용량 분석하기 (0) | 2024.02.20 |
---|---|
AWS User Notifications 로 AWS Management Console 로그인 알람 받기 (0) | 2023.12.19 |
Amazon QuickSight 를 사용해 CloudTrail 이벤트 모니터링 하기 (0) | 2023.12.12 |
AWS Elemental MediaConvert로 비디오 트랜스코딩 자동화 해보기 (0) | 2023.08.03 |
Amazon Personalize를 활용한 실시간 추천 사이트 만들기 (0) | 2023.07.05 |