728x90

#1-7 Auto Scaling 그룹 구성을 변경 

 

#1-8 인스턴스 실행을 확인



#1-9 실행 중인 인스턴스에 SSH 접속

 



#1-10 stress 프로그램을 이용해서 CPU 사용량을 증가

[ec2-user@ip-172-31-18-209 ~]$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

 

[ec2-user@ip-172-31-18-209 ~]$ sudo yum install stress -y

 

[ec2-user@ip-172-31-18-209 ~]$ stress --cpu 1 --timeout 600

 

부하가 증가하면, 

 

자동으로 인스턴스가 추가된 것을 확인

 

부하가 감소하면, 

 

자동으로 인스턴스가 감소하는 것을 확인



AWS ELB(Elastic Load Balancing)을 이용한 서버 트래픽 분산 관리 (P62)

 

#1 로드 벨런스 생성

 

 

 

 

 

상태 검사 경로는 애플리케이션(app.js)에서 정의한 헬스체크 URL을 입력

app.get('/health', (req, res) => {     ⇐ /health 로 GET 방식의 요청이 들어오면

  res.status(200).send();                  응답 상태코드의 값을 200으로 설정해서 반환

});

 

 

주의: 로드 밸런서 대상 그룹에 Auto Scaling Group을 추가할 예정이므로, 인스턴스를 직접 추가하지 않는다.

 



#2 Auto Scaling 그룹을 로드 밸런서 대상 그룹에 추가

 



#3 헬스 체크 및 로드 밸런서를 통한 접속 확인



 



ASG(Auto Scaling Group)과 ELB(Elastic Load Balancer)를 이용한 장애 조치 (P73)

#1 대상 그룹의 헬스 체크 설정 변경

 

 

#2 ASG 용량을 변경

 

항상 인스턴스가 2개 실행되도록 설정을 변경






#3 각 인스턴스로 SSH 접속해서 헬스 체크 확인

 

/opt/nginx/logs/access.logs 파일을 통해 헬스 체크 요청이 5초 간격으로 발생하는 것을 확인



#4 인스턴스 중 하나의 nginx 서비스를 중지했을 때 로드밸러서 동작 확인

[ec2-user@ip-172-31-17-252 ~]$ sudo service nginx stop

Stopping nginx (via systemctl):                            [  OK  ]

 

nginx 서비스 중지와 동시에 로드밸런서 퍼블릭 DNS 주소로 접속을 시도하면 502 Bad Gateway 오류가 발생 ⇒ 인스턴스의 상태가 업데이트 되기 전

 

시간이 지난 후에는 정상적으로 동작하는 것을 확인 ⇒ 정상적으로 동작(healthy)하는 인스턴스로만 요청을 전달

 



#5 모든 인스턴스를 종료 ⇒ ASG 설정을 통해




참고 ⇒ https://aws-builders-kr.workshop.aws/

 

블루/그린 배포 (P110)

#1 Auto Scaling 그룹을 생성 및 로드 밸런서 추가 - 이전 버전(Blue 버전) 서비스 환경

#1-1 Auto Scaling 그룹 생성

 

 

 

 


#1-2 로드 밸런서 대상 그룹에 Auto Scaling 그룹 추가



#2 로드 밸런서의 DNS 이름으로 접속을 확인

 




#3 새로운 버전의 코드를 적용

 

현재 서비스는 exercise-group-blue 인스턴스를 통해서 제공되고 있음

 

#3-1 새로운 버전의 코드를 반영하기 위해 exercise-instance 인스턴스를 실행

 

#3-2 exercise-instance 인스턴스에 SSH 접속



https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/managing-users.html

각 Linux 인스턴스는 기본 Linux 시스템 사용자 계정으로 시작됩니다. 기본 사용자 이름은 인스턴스를 시작할 때 지정된 AMI에 의해 결정됩니다.

  • Amazon Linux 2 또는 Amazon Linux AMI의 경우 사용자 이름은 ec2-user입니다.

  • CentOS AMI의 경우 사용자 이름은 centos입니다.

  • Debian AMI의 경우 사용자 이름은 admin입니다.

  • Fedora AMI의 경우 사용자 이름은 ec2-user 또는 fedora입니다.

  • RHEL AMI의 경우 사용자 이름은 ec2-user 또는 root입니다.

  • SUSE AMI의 경우 사용자 이름은 ec2-user 또는 root입니다.

  • Ubuntu AMI의 경우 사용자 이름은 ubuntu입니다.

  • ec2-user 및 root를 사용할 수 없는 경우 AMI 공급자에게 문의하십시오.



#3-3 새로운 버전의 코드로 업데이트

[ec2-user@ip-172-31-87-19 ~]$ cd /var/www/aws-exercise-a

 

[ec2-user@ip-172-31-87-19 aws-exercise-a]$ git pull

Already up to date.

 

[ec2-user@ip-172-31-87-19 aws-exercise-a]$ git checkout beta

M       package-lock.json

Branch 'beta' set up to track remote branch 'beta' from 'origin'.

Switched to a new branch 'beta'

 

[ec2-user@ip-172-31-87-19 aws-exercise-a]$ cat app.js

const express = require('express');

const app = express();

 

app.get('/', (req, res) => {

  res.send('AWS exercise의 A project beta 버전입니다.'); ⇐ 변경된 소스코드

});

 

app.listen(3000, () => {

  console.log('Example app listening on port 3000!');

});

 

app.get('/health', (req, res) => {

  res.status(200).send();

});




#4 새로운 버전의 코드가 반영된 인스턴스의 스냅샷 생성

#4-1 exercise-instance 인스턴스 중지



#4-2 이미지 생성

 

#5 새로운 버전의 AMI를 사용하는 시작 템플릿 생성



기존에 생성한 exercise-launch-template을 기반으로 새로운 시작 템플릿을 생성 → AMI를 제외한 나머지 설정은 유지

 

 

 

#6 Auto Scaling 그룹 생성



 

 

 



#7 exercise-group-green ASG을 로드 밸런서의 대상 그룹에 등록해서 블루/그린 배포를 진행

#7-1 EXERCISE-GROUP-BLUE에서 실행되고 있는 인스턴스로 접속

 

#7-2 EXERCISE-GROUP-GREEN에서 실행되고 있는 인스턴스로 접속

 

#7-3 로드 밸런서의 대상 그룹에 exercise-group-blue ASG은 포함되어 있음



#7-4 로드밸런서의 DNS 이름으로 접속하면 exercise-group-blue ASG에 포함된 인스턴스의 서비스 결과를 확인할 수 있음

 

 

#7-5 로드밸런서 대상 그룹에 exercise-group-green ASG을 추가



#7-6 두 개의 ASG이 로드 밸런서 대상 그룹에 추가된 것을 확인

 

#7-7 로드 밸런서 DNS 이름로 접속 ⇒ 두 가지 버전이 번갈아 가면서 요청을 처리하는 것을 확인 ⇒ 두 가지 버전이 일시적으로 공존

 

#8 이전 버전(exercise-group-blue)을 중지 

#8-1 AutoScaling 그룹에서 용량을 조절 (원하는 용량, 최소 용량을 0으로 변경)

참고: 로드 밸런서 대상 그룹에서 이전 버전의 ASG를 삭제하는 방법도 있음

 

 

#8-2 exercise-group-blue ASG에 포함되어 있는 인스턴스가 모두 자동으로 종료되는 것을 확인

 

#8-3 로드 밸런서의 대상 그룹에 포함된 exercise-group-blue ASG이 healthy하지 않으므로 모든 요청이 exercise-group-green으로 라우팅되는 것을 확인 ⇒ 새로운 버전만 서비스되는 것을 확인



#9 리소스 정리

 

인스턴스가 모두 종료되었는지 확인




CodeDeploy로 현재 위치 배포 (P134)

#1 CodeDeploy를 위한 서비스 역할 생성

 

 

 

 




#2 EC2 인스턴스에 적용할 정책과 역할을 생성

 

 



 



 

 




#3 CodeDeploy로 배포 가능한 인스턴스를 생성 (P143)

#3-1 인스턴스 시작

 

#3-2 인스턴스의 퍼블릭 IP 주소로 SSH 접속

 

#3-3 CodeDeply 배포 디렉터리를 삭제 (이유 → P144)

[ec2-user@ip-172-31-87-19 ~]$ cd /var/www

[ec2-user@ip-172-31-87-19 www]$ ll

total 7032

drwxrwxr-x 4 ec2-user ec2-user     130 Mar  9 04:40 aws-exercise-a

drwxrwxr-x 5 ec2-user ec2-user     129 Mar  8 07:49 aws-exercise-b

-rw-rw-r-- 1 ec2-user ec2-user 7198910 Nov  5  2018 passenger-5.3.6.tar.gz

[ec2-user@ip-172-31-87-19 www]$ rm -rf aws-exercise-*

[ec2-user@ip-172-31-87-19 www]$ ll

total 7032

-rw-rw-r-- 1 ec2-user ec2-user 7198910 Nov  5  2018 passenger-5.3.6.tar.gz



#3-4 CodeDeploy Agent 설치

CodeDeploy Agent를 가져올 주소를 생성(확인)하는 방법


https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/resource-kit.html#resource-kit-bucket-names


wget https://bucket-name.s3.region-identifier.amazonaws.com/latest/install

                     ~~~~~~~~~~~    ~~~~~~~~~~~~~~~~~

                                   |              |   

                                   |              +--- 리전 식별자 

                                   |                   ⇒ 버지니아 북부의 경우 → us-east-1

                                   +--- 지역별 리소스 키트 버킷 이름

                                          ⇒ 버지니아 북부의 경우 → aws-codedeploy-us-east-1


버지니아 북부의 경우 

wget https://aws-codedeploy-us-east-1.s3.us-east-1.amazonaws.com/latest/install

 

[ec2-user@ip-172-31-87-19 www]$ wget https://aws-codedeploy-us-east-1.s3.us-east-1.amazonaws.com/latest/install

[ec2-user@ip-172-31-87-19 www]$ chmod +x ./install

[ec2-user@ip-172-31-87-19 www]$ sudo ./install auto

[ec2-user@ip-172-31-87-19 www]$ sudo service codedeploy-agent status

The AWS CodeDeploy agent is running as PID 3671



#3-5 CodeDeploy Agent를 설치한 인스턴스의 스냅샷을 생성

 

 




#3-6 시작 템플릿 생성

 

기존 시작 템플릿(exercise-launch-template)의 설정에서 AMI만 변경하고 나머지는 그대로 유지

 

 




#3-7 EXERCISE-GROUP ASG의 시작 템플릿을 변경

 

 



 

 

 

728x90

'CLOUD > AWS' 카테고리의 다른 글

3/11 - AWS 10차시  (0) 2021.03.11
3/10 - AWS 9차시  (0) 2021.03.10
3/8 - AWS 7차시  (0) 2021.03.08
3/5 - A Cloud Guru를 이용한 AWS 6차시  (0) 2021.03.05
3/4 - A Cloud Guru를 이용한 AWS 5차시  (0) 2021.03.04

+ Recent posts