EC2 오토스케일링 적용 및 Cloud Watch를 통한 생성/삭제 정보 획득 [with Terraform]

sang yun Lee·2023년 6월 1일
0

Devops 실습

목록 보기
11/20

개요


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 오토스케일링 정책

  • 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
      }
    }

EC2 오토스케일링 정보 알림

  • 오토스케일링 적용 상황을 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
    }

Email 로 상태 정보 전달

  • SNS 가 받은 정보를 구독을 통해 이메일 로 전달하여 오토스케일링 정보를 사용자가 획득할 수 있다.
    # SNS 구독 정의 (이메일 알림)
    resource "aws_sns_topic_subscription" "example" {
      topic_arn = aws_sns_topic.example.arn
      protocol  = "email"
      endpoint  = var.email  # 이메일 주소 입력
    }

테라폼을 통한 아키텍쳐 프로비져닝 실습 예시


테라폼을 통해서 위의 그림과 같은 아키텍쳐를 구성해본다.

STEP 0: 소스코드 획득

  • 소스코드를 획득하고 해당 폴더로 이동한다.
    git clone https://github.com/SangYunLeee/auto_scaling_group_ec2_with_terraform.git
    cd auto_scaling_group_ec2_with_terraform

STEP 1: 테라폼 적용

  • 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

STEP 2: CPU 부하를 통한 오토스케일링 확인

  1. ssh 접속
    생성된 EC2에 아래의 퍼블릭 IP 를 통해 접속한다.
    # ssh -i <key.pem> ubuntu@<public-ip>
    $ ssh -i ~/.ssh/key.pem ubuntu@13.209.21.130
  2. CPU 과부하가 되도록 한다.
    $ stress -c 1
    stress: info: [2021] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
  3. Auto Scaling 이 되었는지 Email 을 통해 확인한다.
    아래과 같이 이메일이 왔으면 정상적으로 오토스케일링이 된 것이다.

대상 추적 조정 선택 사유


EC2 오토스케일링 정책타입에는 총 3가지가 있었다.

  • 대상 추적 조정
  • 단계 조정(Step scaling)
  • 단순 조정(Simple scaling)

이중에 대상 추적 정책 을 선택한 이유는 대상 추적 정책 로 설정하면 Auto Scaling 그룹이 애플리케이션의 실제 부하에 정비례하여 조정되기 때문이다. 또한 AWS 가 직접 다뤄주는 부분이 있어 사용자의 오설정으로 인한 휴먼 에러를 방지할 수 있을 것으로 예상헀다.
단계 조정(Step scaling) 도 변화에 대응할 수는 있으나 사용자가 직접 설정해줘야 하는 내용이 있어서 제대로 알고 적용하지 않으면 의도치 않은 결과를 일으킬 수 있어 피하였다.
또한 단순 조정(Simple scaling) 의 경우 각 조정 작업 간에는 휴지 기간이라는 게 발생하는데 휴지 기간 동안에는 추가적인 오토스케일링 인/아웃 이 동작하지 않아 즉각적인 대처가 어려울 것이라 판단하였다.

참고자료:

0개의 댓글