본문 바로가기
공부/AWS

[AWS] AWS 리소스 배포 자동화와 로드 분산을 통한 자동 확장 환경 구성

by haejang 2020. 8. 2.
728x90
728x90

목표

할 일 정리

1. 주어진 JSON 파일을 가지고 CLoudFormation 스택을 생성해 기본 VPC, EC2(Command Host)를 마련한다

2. CommandHost 인스턴스에서 CLI로 Auto Scaling Group용 AMI 를 만들 WebServerBaseImage란 인스턴스(웹서버)를 생성한다

3. AMI를 생성하고, Application Load Balancer와 Launch Configuration을 생성한다

4. Auto Scaling Group을 생성하고, CPU 지표가 일정 이상 넘어가면 자동으로 인스턴스가 더 생성되는지 확인

 

 

시작하기 전에, 미리 만들어둔 키 페어가 있어야 한다

만약 없으면 EC2를 생성하는 척 하며 키 페어를 만들고 EC2는 취소하자

키 페어 탭에서 키 페어를 생성하면 Public Key가 만들어지기 때문에 아무 쓸모 없다

 

 

이제 시작해보자

1. CloudFormation 스택 생성

서비스 >> CloudFormation >> 스택 생성

 

 

준비된 템플릿 >> 템플릿 파일 업로드 >> 준비된 json 또는 yaml 파일 선택

 

 

스택 이름 설정해주고, Key는 만들어둔 키 페어를 사용한다

참고로 여기 파라미터 섹션은 JSON 파일의 파라미터 섹션과 동일하다

 

 

다른 파라미터들은 값이 다 정해져있지만, KeyName은 정해져있지 않기 때문에 여기서 직접 정해주는거다

 

 

다 넘어가서 마지막에 저것만 체크해주고 스택 생성을 완료하자

 

 

현재 CREATE_IN_PROGRESS 상태이다. CREATE_COMPLETE 상태가 될 때까지 기다린다 (시간이 좀 걸린다)

 

 

CREATE_COMPLETE 상태가 되었다

이제 콘솔을 둘러보면 실습에 필요한 리소스들이 전부 만들어져있다

 

2. CommandHost에서 Web Server AMI 만들 웹서버 인스턴스 생성

일단 CommandHost에 접속을 해보자

접속하는 방법은 아래 글을 보자

2020/07/24 - [공부] - [AWS] EC2 CLI로 접속하기(cmd, PuTTy)

 

[AWS] EC2 CLI로 접속하기(cmd, PuTTy)

2020/07/22 - [공부] - [AWS] VPC랑 EC2 만들어보기 [AWS] VPC랑 EC2 만들어보기 먼저 아마존에 로그인한 후 계좌를 등록해야한다 1달러 빠져나가면 그 때부터 시작할 수 있다 https://aws.amazon.com/ko/ 클라우..

honglab.tistory.com

EC2 인스턴스를 만들기 위해선, 키, AMI ID, 보안그룹ID, 서브넷ID가 필요하다

키는 각자 만들어 둔 키를 사용하고, AMI ID는 본인이 있는 리전별로 다르니 주의해서 복사해놓자

"us-east-1": { "AMI": "ami-0ff8a91507f77f867" },
"us-east-2": { "AMI": "ami-0b59bfac6be064b78" },
"us-west-1": { "AMI": "ami-0bdb828fd58c52235" },
"us-west-2": { "AMI": "ami-a0cfeed8" },
"ca-central-1": { "AMI": "ami-0b18956f" },
"eu-west-1": { "AMI": "ami-047bb4163c506cd98" },
"eu-west-2": { "AMI": "ami-f976839e" },
"eu-central-1": { "AMI": "ami-0233214e13e500f77" },
"sa-east-1": { "AMI": "ami-07b14488da8ea02a0" },
"ap-southeast-1": { "AMI": "ami-08569b978cc4dfa10" },
"ap-southeast-2": { "AMI": "ami-09b42976632b27e9b" },
"ap-south-1": { "AMI": "ami-0912f71e06545ad88" },
"ap-northeast-1": { "AMI": "ami-06cd52961ce9f0d85" },
"ap-northeast-2": { "AMI": "ami-0a10b2721688ce9d2" },

보안그룹은 EC2 >> 보안그룹 >> HTTPAccess의 보안 그룹 ID를 복사해주자

서브넷은 CommandHost가 속한 Public Subnet1의 ID를 복사해주면 된다

 

 

이런식으로 해놓고, 앞으로 쉽게 쓸 수 있게 CLI에서 변수선언을 해주겠다

 

KEYNAME=S3-key
AMIID=ami-0a10b2721688ce9d2
HTTPACCESS=sg-0395483600679e382
SUBNETID=subnet-0aaf69971053eb454

이제 WebServerBaseImage라는 인스턴스를 새로 생성해보자

aws ec2 run-instances --key-name $KEYNAME --instance-type t3.micro --image-id $AMIID --user-data file:///home/ec2-user/UserData.txt --security-group-ids $HTTPACCESS --subnet-id $SUBNETID --associate-public-ip-address --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=WebServerBaseImage}]' --output text --query 'Instances[*].InstanceId'

 

 

새로 생성된 인스턴스의 id가 나왔다

얘도 변수 선언을 해주자

NEWINSTANCEID=i-07fb868e6a07d9fc7

콘솔에 돌아가보면 새 인스턴스가 들어와있다

 

 

다시 CLI로 돌아와서, 이 인스턴스에서 웹 서버가 제대로 시작되었는지 확인해봐야 한다

퍼블릭 DNS 이름을 얻어주자

aws ec2 describe-instances --instance-id $NEWINSTANCEID --query 'Reservations[0].Instances[0].NetworkInterfaces[0].Association.PublicDnsName'

 

 

저 DNS주소/index.php를 웹 브라우저에다가 검색해보자

 

제대로 시작한 것을 확인할 수 있다

웹서버가 제대로 설치된 것을 확인했으니, 이 인스턴스로부터 AMI를 떠야 한다

AMI의 이름은 WebServer로 하겠다

aws ec2 create-image --name WebServer --instance-id $NEWINSTANCEID

 

 

새 AMI가 만들어졌다

 

3. Application LoadBalancer 생성

이제 트래픽을 2개의 가용 영역에 분산시켜줄 ALB를 만들어야 한다

EC2 >> 로드밸런서 >> Load Balancer 생성 >> Application Load Balancer 생성 클릭

 

이름 설정
각 가용 영역 별 Public Subnet 설정
보안그룹 - HTTPAccess만 선택
대상 그룹 설정
경로, 정상 임계 값, 간격 설정

 

여기까지 하고 생성을 완료하자

 

4. Launch Configuration 설정(Auto Scaling Group 만들기 위함)

EC2 >> 시작 구성 >> 시작 구성 생성

 

이름, AMI(아까 만든 것), 인스턴스 유형 설정
모니터링 선택
보안그룹-HTTPAccess 선택

 

키 페어까지 선택한 후, 생성을 완료한다

 

5. Auto Scaling Group 생성

EC2 >> Auto Scaling Groups >> Auto Scaling 그룹 생성

 

 

이름을 설정한 후 밑에 시작 구성으로 전환을 눌러준다

 

 

아까 만들어둔 시작 구성을 선택해준다

 

 

프라이빗 서브넷 2개도 연결해준다

 

 

로드밸런서와 모니터링 설정도 해준다

 

 

그룹 크기를 설정하고(인스턴스 2개에서 시작해서, 2개~4개 사이에서 Auto Scaling을 하라는 뜻), CPU 사용률 45일 때 Auto Scaling이 일어나도록 설정한다

 

 

Auto Scaling Group의 인스턴스들의 Name 태그를 설정해준 후 생성을 완료한다

 

그리고 인스턴스에 가보면

 

 

WebApp이라는 2개의 인스턴스가 생성되고 있는게 보인다

두 인스턴스의 상태검사가 "2/2개 검사 통과"가 될 때까지 조금 기다려주자

 

6. 제대로 만들어졌는지 확인

두 인스턴스의 생성이 모두 완료되었다면, EC2 >> 로드밸런서 로 가서 로드밸런서의 DNS를 복사해주자

 

 

새 웹 브라우저를 열어 저 DNS로 이동을 해보면

 

 

웹서버가 잘 설치되었다

Start Stress 버튼을  누르면 CPU 사용률이 급격히 올라간다

5분정도 기다리다 보면 CPU 사용률이 45%를 넘을 것이고, 인스턴스가 하나 새로 생성될 것이다

조금만...아니 조금 많이 기다려보자

 

 

시간이 좀 지나고, WebApp이라는 새 인스턴스 하나가 생성이 되었다

728x90
728x90

댓글