Auto Scaling Group
을 통해서 EC2
를 자동으로 Scale up/down
시켜줌을 통해서 확장성
을 얻을 수 있다.
단순히 Auto Scaling Group
를 생성함으로써는 자동으로 확장되지 않고 Auto Scaling Group
에 정책
을 추가해주어야 Scale up/down
이 적용된다.
위의 그림과 같이 이메일도 받을 수 있도록 아키텍쳐를 가져감으로써 Scale up/down
정보를 사용자가 이메일
로 받을 수 있도록 하였다.
우선 테라폼에서의 주요 코드를 간략히 설명하고 배포하는 방법을 공유하고자 한다.
소스 코드: https://github.com/SangYunLeee/auto_scaling_group_ec2_with_terraform
EC2 오토스케일링 정책타입으로 대상 추적 정책(TargetTrackingScaling)
타입을 선택했다.
대상 추적 정책
을 사용하면 자동으로 Cloud Watch
가 생성되며 생성된 Cloud Watch
로부터 오토스케일링 그룹의 CPU 평균값
을 받아 오토스케일링을 할 지 말지 설정할 수 있다.
# 오토스케일링 정책
resource "aws_autoscaling_policy" "example" {
name = "example-policy"
# 오토스케일링 그룹 대상
autoscaling_group_name = aws_autoscaling_group.example.name
# 정책 타입
policy_type = "TargetTrackingScaling"
# 정책 세부 방식
# 알림: 자동으로 aws_cloudwatch_metric_alarm 리소스가 생성됨
target_tracking_configuration {
predefined_metric_specification {
predefined_metric_type = "ASGAverageCPUUtilization"
}
target_value = 70.0
}
}
오토스케일링 적용 상황을 SNS
등에 전달할 수 있다.
# 오토스케일링 그룹의 상태 정보를 SNS 에 알림
resource "aws_autoscaling_notification" "example_notifications" {
group_names = [
aws_autoscaling_group.example.name
]
notifications = [
"autoscaling:EC2_INSTANCE_LAUNCH",
"autoscaling:EC2_INSTANCE_TERMINATE",
"autoscaling:EC2_INSTANCE_LAUNCH_ERROR",
"autoscaling:EC2_INSTANCE_TERMINATE_ERROR",
]
topic_arn = aws_sns_topic.example.arn
}
SNS
가 받은 정보를 구독을 통해 이메일
로 전달하여 오토스케일링 정보를 사용자가 획득할 수 있다.# SNS 구독 정의 (이메일 알림)
resource "aws_sns_topic_subscription" "example" {
topic_arn = aws_sns_topic.example.arn
protocol = "email"
endpoint = var.email # 이메일 주소 입력
}
테라폼을 통해서 위의 그림과 같은 아키텍쳐를 구성해본다.
git clone https://github.com/SangYunLeee/auto_scaling_group_ec2_with_terraform.git
cd auto_scaling_group_ec2_with_terraform
STEP 1 을 진행하면 배포가 성공적으로 완료된다.
$ terraform apply
var.email
SNS 을 통해서 오토스케일링 정보를 받을 email
Enter a value: someone@gmail.com
var.pair_key
PAIR KEY FOR EC2
Enter a value: my-ssh-key
# ssh -i <key.pem> ubuntu@<public-ip>
$ ssh -i ~/.ssh/key.pem ubuntu@13.209.21.130
$ stress -c 1
stress: info: [2021] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
Email
을 통해 확인한다.EC2 오토스케일링 정책타입
에는 총 3가지가 있었다.
이중에 대상 추적 정책
을 선택한 이유는 대상 추적 정책
로 설정하면 Auto Scaling 그룹이 애플리케이션의 실제 부하에 정비례하여 조정되기 때문이다. 또한 AWS 가 직접 다뤄주는 부분이 있어 사용자의 오설정으로 인한 휴먼 에러를 방지할 수 있을 것으로 예상헀다.
단계 조정(Step scaling)
도 변화에 대응할 수는 있으나 사용자가 직접 설정해줘야 하는 내용이 있어서 제대로 알고 적용하지 않으면 의도치 않은 결과를 일으킬 수 있어 피하였다.
또한 단순 조정(Simple scaling)
의 경우 각 조정 작업
간에는 휴지 기간
이라는 게 발생하는데 휴지 기간
동안에는 추가적인 오토스케일링 인/아웃
이 동작하지 않아 즉각적인 대처가 어려울 것이라 판단하였다.
참고자료: