할 일 정리
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)
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 생성 클릭
여기까지 하고 생성을 완료하자
4. Launch Configuration 설정(Auto Scaling Group 만들기 위함)
EC2 >> 시작 구성 >> 시작 구성 생성
키 페어까지 선택한 후, 생성을 완료한다
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이라는 새 인스턴스 하나가 생성이 되었다
끝
'공부 > AWS' 카테고리의 다른 글
[AWS] AWS S3 스토리지 클래스 update ver. (0) | 2020.12.03 |
---|---|
[AWS] IAM 사용자 생성, MFA 설정 후 웹서버 EC2로 RDS 제어 (1) | 2020.08.13 |
[AWS] S3 CLI로 관리하기(+IAM 정책 생성/연결) (0) | 2020.08.01 |
[AWS] S3 버킷 CLI 명령어(버전 관리, 동기화, 복구) (0) | 2020.07.31 |
[AWS] EC2 CLI로 접속하기(cmd, PuTTy) (0) | 2020.07.24 |
댓글