본문 바로가기

Cloud

AWS - ASG(1)

Auto Scaling Group(ASG)

- 웹 사이트와 Application은 변경되기 마련이며 사용자에 따라 받는 부하도 다름

- 트래픽 사이즈에 맞춰서 처리할 인스턴스(타겟 그룹)를 늘리거나 줄여 로드 밸런서에 자동으로 붙이거나 떼면서

자동으로 처리하는 역할을 함

 

ASG

Auto Scaling Group

 

위 그림처럼 Auto Scaling Group은 최대 사용 가능한 사이즈 이하로 해서 트래픽 증가에 따라 업무 처리에 필요한 

인스턴스를 추가 생성(Scale Out)하고 로드 밸런서에 붙여서 트래픽을 분산하고 처리하는 역할을 합니다.

트래픽이 반대로 줄어서 인스턴스가 비효율적으로 많아지는 것을 막고자 인스턴스를 종료하고 로드밸런서에서 연결을 끊는

작업(Scale In)을 합니다.

이렇듯 ASG는 수동적으로 인스턴스 추가, 제거가 아니라 트래픽에 맞춰서 자동으로 생성 및 삭제 그리고 관련 내용을

로드밸런서에 붙이고 떼는 등의 작업(Scale Out, Scale In)이 수행될 것입니다.


ASG 속성

1) 시작 구성(≒ EC2 Instance)

- AMI + Instance Type

- EC2 User Data

- EBS Volume 크기

- 보안 그룹

- SSH 키페어

 

2) 최소용량, 최대용량, 최초용량 및 기대용량 설정

3) 인스턴스를 생성할 수 있는 ASG의 네트워크와 서브넷 정보를 정의

4) Load Balancer에 따라 ELB정보, 즉 연결된 대상 그룹의 정보를 정의

5) 스케일링 정책 정의 (Scale Out에 대한 정책 및 근거 / Scale In 에 대한 정책 및 근거)

 

기존에는 ASG를 생성할 때 시작 구성을 정의한 다음에 붙여서 사용했지만 2022년 12월 31일부로 EC2 새로운 유형에 대해선

지원하지 않으며 관련 기능도 제공하지 않습니다.

따라서 바로 Auto Scaling Group을 생성하면서 시작 템플릿을 구성해주면 됩니다.

https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-templates.html?icmpid=docs_ec2as_lc_banner 

 

Launch templates - Amazon EC2 Auto Scaling

Launch templates A launch template is similar to a launch configuration, in that it specifies instance configuration information. It includes the ID of the Amazon Machine Image (AMI), the instance type, a key pair, security groups, and other parameters use

docs.aws.amazon.com

 

 

1) ASG 생성 > 시작 템플릿 생성

ASG 생성 & 시작 템플릿(시작구성X)

 

2) 시작 템플릿 이름 및 설명 정의, 기존 템플릿이 있으면 토대로 만들어도 되고 그냥 만들어도 됩니다.

 

3) AMI 셋팅하는데 기존 인스턴스와 동일하게 셋팅

 

4) 인스턴스 유형 (기존 인스턴스와 동일) & 키페어 설정 

 

5) 네트워크 설정 

 

 

이렇게 생성한 템플릿은 ASG 시작 템플릿으로 전환하여 사용합니다.

앞서 보안 그룹과 키페어 잘 설정해주셔야 합니다..! 


 

6) ASG 이름과 설명을 설정하고 시작 템플릿으로 전환해 셋팅합니다.

 

7) 인스턴스 시작 옵션을 셋팅

- ASG에서 인스턴스를 생성할 때 Application은 여러 가용 영역에서 사용될 수 있기 때문에 인스턴스가 각 AZ에 균일하게

분산시키며 트래픽을 처리하도록 설정하는 것입니다.

 

구매옵션도 설정하는데 기본적으로 온디맨드 인스턴스에 맞춰서 셋팅되지만, 스팟 인스턴스를 두어

가격을 더 줄일 수 있습니다.

생성 될 인스턴스의 비율에 맞춰서 생성되지만, 스팟 인스턴스는 신뢰가 떨어지고 내부적으로 문제 야기 가능성이 있어

온디맨드 인스턴스로 두고 구매 옵션을 처리하겠습니다.

ASG 네트워크 셋팅(VPC & AZ, Subnet)

 

8) 고급 옵션에서는 로드 밸런싱 설정을 하는건데, ASG가 생성할 인스턴스는 단순 인스턴스로 생성되어 처리할 수도 있지만

로드 밸런서에게 알려서 타겟 그룹에 인스턴스를 자동으로 넣고 빼며 처리할 수 있도록 합니다.

 

로드 밸런싱 (고급 옵션 셋팅)

 

지금까지 작업한 것 중 중요한 부분은 ASG 네트워크 셋팅할 때나 로드 밸런서 타겟 그룹에 가용영역 셋팅할 때 보안 그룹도 일치시키는 것이 중요하지만 인스턴스 유형(eg: t2.micro)이 해당 가용영역에서 지원이 되는지를 확인해야 합니다.

지원되지 않는 유형을 가용영역에 넣으면 ASG 생성은 되지 않을 것이니 반드시 확인해야 합니다.

 

확인하는 방법은 좌측 사이드바에서 인스턴스 유형을 누른 다음에 네트워크 탭에서 해당 유형이 어떤 가용영역에서 서비스 되는지

체크해주시면 됩니다. 

 

 

9) 생성할 로드 밸런서 네트워크 셋팅

생성한 로드 밸런서의 네트워크 셋팅

 

현재는 ap-northeast-2(a,b,c,d) (서울) 이기 때문에 이렇게 셋팅할 수 있지만, 인스턴스 유형으로 t2.micro를 셋팅했기 때문에

이 부분은 오류가 발생할 것입니다.  마찬가지로 ASG 네트워크 설정할 때에도 다음과 같이 셋팅하면 오류가 날 것입니다.

이유는 t2.micro 인스턴스 유형은 ap-northeat-2a, ap-northeast-2c 만 지원하기 때문입니다. 

2b는 빼서 다시 셋팅해야 하며, 다음 예는 이런 문제가 빈번하게 나오기 때문에 한 번 정의한 것입니다.

 

ASG가 상태를 확인할 때 인스턴스 상태를 확인하는 것은 물론 ELB까지 체크하면 로드 밸런서의 SW, HW 상의 상태까지 체크하게 됩니다.

이는 앞서 고급 옵션에서 인스턴스 생성시 타겟 그룹에 셋팅하고 로드 밸런서가 바라볼 수 있도록 정의했기 때문에 ELB를 체크해 설정하는 것인데, 만약 ASG에서 인스턴스를 생성하고 로드 밸런서에 붙이는 작업에서 타겟 그룹에 붙은 new Instance가 비정상 상태인 경우

ASG는 해당 인스턴스를 종료시키고 다시 만들어서 시작합니다.

 

이러한 비정상 케이스인 이유는 주로 1) EC2 인스턴스 구성을 잘못 했음 2) 인스턴스 보안그룹과 ASG 네트워크 상 보안 그룹을 일치시키지 않았거나, 인스턴스 보안 그룹에 HTTPS 프로토콜 소스에 로드 밸런서 보안 그룹 내용을 넣지 않아서 발생한 것입니다. (ALB 기준으로 설명했기에 HTTPS 프로토콜이라 설명, NLB라면 인스턴스의 HTTPS 프로토콜은 anywhere로 셋팅해야함)

3) 마지막으로 ASG에서 인스턴스를 생성할 때 시작 템플릿에서 고급 옵션 중 사용자 데이터 스크립트를 제대로 명시하지 않았을 때 발생합니다.  제대로 사용자 데이터 스크립트를 셋팅해야 ASG가 인스턴스를 생성할 때 Pre-In Service 상태에서 기존 인스턴스와 다르게

부트 스트랩 내용이 원활하게 적용되지 않아 문제가 발생할 수 있습니다.

 

 

10) 인스턴스 생성될 때 그룹 크기를 셋팅

- 원하는 용량만큼 생성할 것이며 최대 용량은 넘지 않도록 만들 것입니다. (Scale Out)

- 현재 운용되는 인스턴스가 원하는 용량보다 많을 경우 최소 용량을 범하지 않는 선에서 인스턴스가 종료될 것입니다. (Scale In)

 

 

11) 그 외에 ASG 크기 관련 조정 정책이라든지 태그, Cloud Watch 셋팅, 알람 등이 있지만 이 부분은 넘어가도록 하겠습니다.

 

 

 

이렇게 ASG가 생성되면 ASG 속성에서 활동 탭을 체크하면 ASG에서 생성 또는 종료 등의 히스토리를 알려줄 것이며,

인스턴스 관리 탭에서는 생성된 인스턴스가 어떤 것이며, 어떤 템플릿을 썻고 가용 영역은 어디고 이런 내용을 설명해줍니다.

 

 

 

ASG를 통해 생성된 인스턴스

 

 

ASG를 통해 생성된 인스턴스가 타겟 그룹에 자동으로 붙는 과정

 

 

ASG에서 만든 인스턴스를 보여줌

 

 

ASG 활동에서 보여지는 모습

 

이렇듯 ASG를 셋팅할 때 VPC, 가용영역, 보안그룹(인스턴스와 동일), 인스턴스를 생성할 때 어떤 식으로 생성할 지에 대한

환경 셋팅 등을 처리하면 인스턴스를 생성할 때 다음과 같이 자동으로 만들어지며 트래픽 분할이 될 것입니다.


Auto Scaling Alarm

- Cloud Watch 알람을 기반으로 오토 스케일링 그룹을 스케일링 할 수 있습니다.

- Cloud Watch는 메트릭(Metric)이라는 것을 모니터링 하는데, 메트릭이 올라가면 Scale Out! 하라는 알람이 울리고

EC2 Instance를 생성 및 추가합니다.

반대로 알람이 다시 내려가거나 다른 알람이 메트릭이 너무 낮다고 경고가 온다면 Scale In이 진행되어 EC2 Instance를

종료 및 떼어냅니다.

 

메트릭 종류를 확인하고 싶다면 AWS Cli로 접속해서 아래 내용을 참고해서 조회해보면 됩니다. 

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html

 

사용 가능한 지표 보기 - Amazon CloudWatch

사용 가능한 지표 보기 지표는 먼저 네임스페이스별로 그룹화된 다음, 각 네임스페이스 내에서 다양한 측정기준 조합별로 그룹화됩니다. 예를 들어 모든 EC2 지표, 인스턴스별로 그룹화된 EC2 지

docs.aws.amazon.com

참고로 AWS Cli 접근할 때 인스턴스를 새로 만들었다면 IAM Role로 AWS 서비스 사용 권한을 부여한 다음에 접근하셔야 합니다.

추가로 액세스키와 시크릿 액세스키를 처음 생성할 때 잘 보관한 상태에서 aws cli로 접속했을 때

aws configure라는 명령어를 통해 설정 정보를 순차적으로 기입해주고 셋팅을 하면 자연스럽게 ec2 접속은 물론

IAM 서비스 또한 사용할 수 있을 것입니다.

 

참고

https://haams704.tistory.com/entry/Access-Key-IAM-Role-IAM-Service

 

Access Key & IAM Role & IAM Service

Access Key AWS Cli를 이용해서 접속할 때 Cli포스팅에서 제시한 AWS Cli를 OS에 맞게 설치하고 명령어를 입력합니다. 저는 Mac OS여서 AWS Cli를 설치한 다음 Terminal를 통해서 접속하였습니다. [haams@haamsui-Mac

haams704.tistory.com


aws cloudwatch list-metrics

 

▷  AWS Cloud Watch가 모니터링 하는 메트릭의 리스트를 출력하는 것으로 양은 상당하니 옵션을 두어

필요한 것만 조회해봐도 좋습니다.

 메트릭은 필요하다면 뭐든 알람이 될 수 있고 Cloud Watch 알람은 CPU 같은 메트릭을 모니터링합니다.

(평균 값으로 관리 -> 최대, 최소가 없기 때문)

 알람을 통해 Scale In, Scale Out 정책을 생성할 수 있습니다.

 

 

반응형

'Cloud' 카테고리의 다른 글

AWS - RDS  (0) 2023.01.25
AWS - ASG(2)  (0) 2023.01.25
AWS - Connection Draining  (0) 2023.01.18
AWS - SSL/TLS  (0) 2023.01.18
AWS - Cross Zone Load Balancing  (0) 2023.01.17