-
AWS Auto Scaling 적용하기 (Load balancer를 이용한 부하분산)네트워크 & 인프라 2022. 4. 14. 20:26
이번에는 AWS의 Auto Scaling을 이용하여 확장성에 문제가 있는 경우 scale out을 통해 부하분산이 이루어지도록 적용하자.
기존의 pulic 서버는 미리 모두 종료해두었다.
배포 스크립트 작성
먼저 부하분산된 서버에 배포할 배포스크립트를 작성해두었다. 배포스크립트는 꼭 먼저 일반 사이트에서 정상적으로 작동하는지 확인하자.
#!/bin/bash git clone -b [브랜치] --single-branch [저장소 URL] sudo apt update sudo apt install -y default-jre sudo apt install -y default-jdk cd /home/ubuntu/infra-subway-deploy ./gradlew clean build nohup java -jar $(find ./* -name "*jar" | head -1) &
Launch Template 생성
먼저 시작 템플릿을 생성해주자. ubuntu 이미지는 최신버전으로 설정하여 안정성을 높여준다.
인스턴스는 기존 public 서버와 동일하게 설정해준다. 나의 경우 ec2 public 과 동일하게 키페어 선택, 인스턴스 유형(t3 medium) 선택을 해주었다.
다음도 동일하게 서브넷(a 혹은 b(퍼블릭)) 선택, 기존 보안그룹 -> Public 보안그룹선택 해준다.
여기서 어드밴스드 네트워크 구성을 선택하여 퍼블릭 ip 자동할당 활성화 선택해주어야 한다. (public 인스턴스에서는 eip를 사용하였음)
이 부분에서 시간이 꽤 걸렸는데 😭, ip 자동할당 부분을 선택해주지 않았으니 인터넷 연경이 되지 않아 배포스크립트 자체가 실행안되는 상황이 발생했었다.
그 다음 나의 경우는 s3에서 배포 스크립트를 다운받아 실행할 계획이었기 때문에 다음과 같이 s3 IAM 역할도 추가해주었다.
어플리케이션이 생성될 때 실행될 스크립트도 추가해주었다.
#!/bin/bash ## unzip, aws 설치 sudo apt-get update sudo apt install unzip curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install ## s3에서 배포 스크립트를 다운받아 권한 부여 및 실행 sudo -i -u ubuntu aws s3 cp s3://[저장폴더]/[파일이름] /home/ubuntu sudo -i -u ubuntu chmod 755 /home/ubuntu/[파일이름] sudo -i -u ubuntu /bin/bash /home/ubuntu/[파일이름]
Load Balancer 생성
Load Balancer 먼저 생성해주자. Application Load Balancer 선택해준다.
이름을 입력 후 internet-facing, ipv4를 선택해준다.
사용할 vpc, public 서브넷을 모두 선택해준다.
보안그룹을 새로 생성해서 22번 포트에는 내ip, 8080포트(서비스 포트), 80, 443에는 0.0.0.0/0 으로 동일하게 포트 열어준다.
타겟그룹 생성하는데 8080포트, 동일한 vpc 선택, instance 선택 후 아무 인스턴스도 일단 선택하지 않은 채로 타겟 그룹만 생성해준다.
다시 돌아와서 리스너에서 생성한 타겟그룹 대상으로 8080포트 설정해준다.
TLS 인증서 발급 및 리스너 추가
완성한 후에 TLS 인증서 발급 받아서 HTTPS 리스너에서 이용하도록 설정할 것이다. 기존에 public 서버에서 생성하였던 인증정보를 Aws의 Certificate Manager에 인증서를 추가해준다.
출처 NEXTSTEP 프로젝트 공방 다시 로드밸런서의 리스너 설정에 들어가서 8080포트는 그대로 냅두고 443 포트를 8080포트로 포워드 하는 https 리스너 생성 후 인증서를 적용해준다.
Auto Scaling Group 생성
이제 생성한 로드밸런서 이용해서 Auto Scaling Group을 생성하자. 시작템플릿에서 미리 생성해둔 템플릿 선택 해준다.
사용할 vpc 선택하고 가용영역 서브넷 퍼블릭 서브넷(최소 두개이상 이어야함)으로 구성한다.
기존 로드밸런서 연결선택 후 생성한 로드밸런서 대상 그룹을 연결해준다.
원하는 용량, 최소용량, 최대용량 입력하고 대상 추적 조정 정책 선택하여 어느정도 cpu가 사용되었을 때 scale out을 적용할 지 선택한다.
ASG 생성 후 고급구성 편집을 통해 종료정책 적용가능하다.
DNS에 기존의 아이피 삭제하고 CNAME 이용해서 로드밸런서 DNS 적용해준다.
도메인으로 정상적으로 실행되는 것을 확인할 수 있다.
부하분산 확인
먼저 stress를 이용하여 cpu 부하를 최대로 실행해주면,
$ sudo apt-get stress
5분뒤에 자동으로 ec2가 생성 되는 것을 확인할 수 있다.
추가 5분을 더 적용하자 새로운 ec2 추가 생성함을 확인할 수 있다. (최대 3개까지 설정해두었음)
일정 시간이 지나면 오래된 instance 먼저 삭제하고 다시 최소 용량인 1개의 인스턴스를 유지하는 것을 확인할 수 있다.
(참고한 사이트)
NextStep 프로젝트 공방
NEXTSTEP
edu.nextstep.camp
https://intrepidgeeks.com/tutorial/week-8-2-ec2-autoscale-configuration-exercise
8주차-2 EC2 Auto Scaling 구성 실습
CloudFormation 스택 생성 https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-2#/stacks/new?stackName=AutoScalingLab&templateURL=https:%2F%2Fcloudneta-book.s3.ap-northeast-2.amazonaws.com%2Fchapter5%2Fautoscaling-AFOS.yaml 다음 클
intrepidgeeks.com
https://www.youtube.com/watch?v=aOAqH48Cyc8&t=220s&ab_channel=JustmeandOpensource
https://aws-hyoh.tistory.com/133
AWS Elastic Load Balancer(ELB) 쉽게 이해하기 #2
지난 시간에 이어서 Elastic Load Balancer(이하 ELB)에 대해 계속 이야기해보겠습니다. 첫 번째 문서에서 ELB는 VPC에 탑재하여 사용하는 서비스라고 말씀드렸습니다. 그렇기에 VPC에서 어떻게 구성되는
aws-hyoh.tistory.com
https://velog.io/@zkdlcl5050/%EB%A1%9C%EB%93%9C-%EB%B0%B8%EB%9F%B0%EC%8B%B1
로드 밸런싱
로드 밸런싱(Load balancing) 네트워크 기술의 일종으로 네트워크 트래픽을 하나 이상의 서버나 장비로 분산하기 위해 사용되는 기술 로드 밸런싱을 수행하는 소프트웨어나 하드웨어를 로드 밸런서
velog.io
EC2 인스턴스에 배포 쉘 스크립트 작성하기
EC2인스턴스에 백엔드 프로그램과 프론트엔드 프로그램을 업로드 한 후 구동을 한다. 하지만 매 기능 업데이트시마다 pull받고, build하고, 서버 재시작하고... 너무 번거롭다. 이를 한 번의 명령어
velog.io
http://devstory.ibksplatform.com/2018/02/aws.html
[AWS] 시작탬플릿을 사용하여 인스턴스 생성하기
IBK시스템 플랫폼 사업팀 블로그입니다. 플랫폼 사업을 진행하면서 경험한 생생한 IT기술을 공유하고자 합니다.
devstory.ibksplatform.com
https://galid1.tistory.com/369?category=765379
AWS - AutoScaling 서비스 및 테스팅(부하발생기)
AutoScaling 서비스 - Cloud Watch서비스와 혼용하여 부하 또는 특정 상황에따라 인스턴스의 수를 증감할 수 있는 서비스 고려사항 1. 급격한 부하증가 CloudWatch를 통해 부하를 감지하여 AutoScaling하여 부
galid1.tistory.com
https://aws-diary.tistory.com/10
AWS Network 기본 구성 구축 - 4 (ALB, ACM, Route53)
클라우드의 서버는 IP가 수시로 바뀔 수 있습니다. (오토스케일링을 적용하게 될 경우 특히나 그렇습니다.) 또한 오토스케일링을 적용하게 될 경우 하나의 서버에 트래픽을 분산 할 수 없으며,
aws-diary.tistory.com
Application Load Balancer(ALB) 사용하기
이번 블로그에서는 Application Load Balancer (ALB)를 사용해 Web 서버를 구성해보도록 하겠습니다.
medium.com
https://suyeon96.tistory.com/46
[AWS] 단계별 시나리오를 통해 알아보는 EC2 Auto Scaling
AutoScaling이란? 클라우드 컴퓨팅의 대표적인 장점 중 하나는 유연성이다. 유연성이라는 단어는 상당히 추상적이며 많은 의미를 내포하고 있지만 그 중 핵심은 빠르고 쉽게 서비스를 확장하거나
suyeon96.tistory.com
'네트워크 & 인프라' 카테고리의 다른 글
SSH 별칭으로 접속 시도시 RSA 공유키 충돌 문제 발생 (0) 2022.05.30 그림으로 공부하는 IT 인프라 구조 정리 (0) 2022.04.15 화면 응답 개선하기 (0) 2022.04.14 서버 진단하기 ( + 로깅, 모니터링) (0) 2022.04.14 부하 테스트 ( + k6, grafana + influxdb, ngrinder) (0) 2022.04.14