AWS 3tier Application Deployment

AWSDjangoCI/CD

 

 

Creating a VPC

 

Creating the VPC using the following CIDR blocks

 

 

생성 후

 

 

 

VPC 완료

 


 

Subnetting

 

왼쪽 메뉴

 

 

새로 만들기

don't use the first four and the last IP address of each subnet CIDR block, as they are reserved by AWS for various purposes

 

 

이렇게 만든다

 

 

이렇게 구성

 

완료 후

 

 

이제 인터넷 게이트웨이 생성

왼쪽에

 

새로 생성

 

 

이름 설정

 

생성 완료

 

VPC 와 연결

 

PROmet-vpc 선택

 

 

연결 후 상태

 

 

라우팅 테이블로 이동

 

 

새로 추가

 

 

이름과 VPC 선택

 

 

라우트 테이블 생성 완료

 

 

퍼블릭 서브넷 연결 작업

 

여기서 할 수 있음

 

똑같이 프라이빗 서브넷도 연결

 

10.0.2.0 + 10.0.6.0 그리고 10.0.3.0 + 10.0.5.0

 

똑같은 곳에서

라우트 설정

 

라우팅 편집(퍼블릭 라우트 테이블만!)

 

우리가 만든 Internet gateway 쪽으로 새로운 라우트 추가

 

 

옆 메뉴에서 NAT gatway 설정

 

 

NAT gateway 생성

 

탈력적 IP 받아서 넣음

 

대기 상태

 

 

 

다시 라우트 테이블로 돌아와서 Private 애들 라우트 편집

방금 생성한 NAT Gateway 로 라우트

 

 

다시 NAT Gateway 로 돌아가면 Available 상태 확인

 

 


 

Bastion Host 생성

 

EC2 진입

 

인스턴스 메뉴 들아감

 

라운츠 들어감

 

인스턴스 이름과 이미지 지정

 

 

타입도 지정

 

 

키 페어 생성

 

 

이렇게 설정 함

 

새로운 보안 구룹 생성

 

 

이렇게 BastionHost 생성 끝

 

웹서버 EC2 인스턴스 만들기

 

똑같이 새로운 인스턴스 만들기

 

다만 여기만 다름

 

 

그리고 보안 구룹

 

 

이제 우리 인스턴스 보면

 

간단한 Bastion host 에서 private subnet에 있는 Web server과 연결 되는지 확인 절차

 

SSH → bastionhost

 

XShell 새 세션

 

이 퍼블릭 IP는 Bastion Host의 퍼블릭 IP (공개 노노!)

 

 

사용자 이름 과 key 등록

 

이제 Bastion Host 접속

 

WebServer의 보안 구룹 설정 추가

 

 

BastionHost의 보안구룹을 받는다 라는것이다. 이러면 BastionHost만 ssh을 통해 접속 가능

 

WebServer의 .pem 키 내용을 복사 하고 BastionHost에 붙여놓기

 

 

이제 바로 WebServer로 SSH

 

바로 웹서버 접속 가능

 


 

RDS 생성

 

 

왼쪽 메뉴에서 서브넷 그룹 선택

서브넷 구룹 생성

 

 

이름 지정

 

서브넷 추가

 

 

이렇게 생성

 

 

이제 database 만들기

 

 

표준 설정으로 가기

 

 

MariaDB 물론

 

 

무조건 Free Tier

 

 

이렇게 구성

 

 

현재는 EC2 와 연결 하지 않고 진행

 

 

외부 접근 차단

 

 

보안 그룹 새로 추가

 

 

추가 설정 없이 생성

마지막에 포트 번호 꼭 확인

 

 

데이터베이스 생성 후

 

읽기 전용 배포 선택

 

 

읽기전용 db 식별자

 

 

서브넷 그룹과 보안 그룹 확인

 

 

외부 접근 막기

 

다른 AZ-영역에 배포

 

이렇게 생성 후 볼수 있음

 

마지막으로 DB의 보안그룹에 WebServer 과 BastionHost 보안 그룹들 추가

 

Bastion Host 에서 DB 접근 하기

 

Web Server에서 접근 하기

 


Load Balancer

 

새로 load balancer용 보안 그룹 생성

 

인바운드 규칙 설정

 

 

EC2 서비스 메뉴 아래에서

 

새 Target group 생성

 

 

Instance 선택

 

 

아래 설정

 

다음 화면에서

 

 

그리고 target group 생성

 

이제 똑같은 EC2 메뉴에서

 

 

로드 벨렌서 생성

 

 

ALB 선택

 

그리고 이름과 설정

 

VPC 선택 후 Public Subnet들 선택

 

 

전에 만들어놓은 보안 그룹 선택

 

 

리스너에 우리 WebServer load balancer 추가

 

이렇게 배치

 

DNS 이름 들어가서 확인 가능

 

 

 

 


 

Auto Scaling

 

Auto Scaling 설정 하기 위해 기존 웹서버 이미지 복사

 

이름 입력 후 생성

 

 

시작 탬플릿으로 이동

 

 

시작 탬플릿 생성

이름 입력 후 AutoScaling 지침 확인

 

 

이미지 선택

 

 

무조건 무료!

 

 

키 페어는 기존 웹서버 키 페어 사용

 

 

보안 그룹은 기존 꺼 사용 그리고 서브넷 지정은 Autoscaling 설정 할때 할것

 

 

이렇게 탬플릿 생성

 

 

이제 autoscaling group 선택

 

 

생성

 

 

이름 과 탬플릿 지정

 

 

VPC 와 서브넷 그룹 지정

 

 

기존 load balancer 사용 target group도 우리가 지정 한거 사용

 

 

그룹 크기 설정

 

 

나중에 실행할 테스트를 위해 CPU 사용량 50%기중으로 크기 조정 정책

 

 

이렇게 생성

 

 

 

이렇게 autoscaling group이 자동으로 하나의 인스턴스를 실행하는걸 볼수 있다

 


 

DNS

 

 

 

 

Route53 Hosted zone 생성

 

 

 

 

 

 

 

 

Get this name server address

 

 

 

From hostinger

 

 

 

add these entries

 

 

 

Finally adding the DNS records

 

 

아마존 Hosted Zones 에서도 Records 생성및 추가

 

 

 

 

 

 


 

Amazon EFS

 

EFS 보안 그룹 생성

 

 

인바운드 규칙 추가

 

 

EFS 서비스 들어가기

 

 

새로운 File System 만들기

 

이대로 생성

 

 

생성 후

 

마운트 서브넷 과 보안 그룹 설정

 

 

 

 

VPC 설정 들어가서 VPC 설정 편집

 

 

DNS 설정 활성화

 

 

전에 만든 EFS 연결 작업

 

 

이걸 복사

 

 

 

웹서버 들어가서 마운트 작업 실행

 

 

 

 

EFS 마운트 디렉토리에 파일들이 올라온걸 확인 가능

 

 


 

SSL/TLS

 

 

 

이렇게 하고 요청 →

 

대기 상태로 Cert 생성

 

 

이제 로드 벨랜서들어가서 리스너 추가

 

====================================이거만 하면 끝=========================

 


 

SNS

 

왼쪽 메뉴에서 주제 선택

 

새로운 주제 생성

 

 

주제 정보 입력 후 생성

 

 

다시 왼쪽 메뉴에서 구독으로 이동

 

 

새로운 구독 생성

 

구독 내용

 

 

생성 하면 이메일이옴

 

 

여기 confirm 하면 됨

 

 

이렇게 confirm 받을 수 있음

 


 

CloudWatch

 

 

왼쪽 메뉴 경보 상태

 

새로운 경보 생성

 

지표 선택

 

 

여기서 BastionHost 선택

 

조건 설정 에서 60% 보다 크면 설정 선택 함

 

 

전에 설정한 SNS 설정 을 추가

 

 

생성 후

Test을 위해 BastionHost에서 CPU 로드를 좀 줘 봤다

 

 

 

Email 내용은

(BastionHost metric 점검이 아니라 WebServer metric을 점검 해야 한다. 테스트 후 EC2 상대를 Bastion에서 WebServer 로 바꿔주기!)

 


 

Grafana

 

먼저 IAM 에서 Grafana 역할 만들기

 

 

 

AWS 서비스 선택

 

 

EC2 선택

 

역할 이름 선택

 

생성 후 EC2 메뉴에서 관리할 인스턴스 보안 설정에 IAM 역할 추가

 

 

 

이제 보안 자격 증명 설정

 

 

새로운 Access Key 만들기

 

 

Grafana 를 Bastion host 에 설치

https://grafana.com/grafana/download

 

여기 참고

 

Grafana 서버에서

 

 

새로운 Data source 생성

 

 

여기에 Accesskey 입력

 

 

리전은 서울 리전

 

 

이렇게 저장하고 dashboard 로 가면

 

EC2 선택 해서 들어가보면

 

 


 

Jenkins CI/CD

 

Bastion Host의 Public IP 를 통해 Jenkins Dashboard 접속

 

 

관리로 이동

 

 

플러그인 관리

 

 

이 플러그인 설치

 

 

이제 Bastion Host를 마스터 노드로 쓰고, 2개의 worker node로 Web server들을 쓰는 설정

 

메인 Dashboard 에 서

 

 

이름과 check

 

 

 

 

Worker들과 연결과정 설정

 

인증 방법 선택

 

 

 

 

이렇게 2개 노드 연결

 

 

 

 

 

이제 새로운 jenkins 작업 생성

 

 

 

 

 

Github repo 가져오기

 

 

CD를 하기 위한 소스관리 설정

 

 

 

어떤 작업을 하면 이 jenkins 빌드가 유발 될지 지정 (저게 github webhook 임)

 

우리는 기존에 잇던 PROmet django 파일들을 삭제하고 새로 만드는 과정이라 이 옵션 필수

 

 

마지막으로 빌드 Shell 작업 지정

저장 하고 나가면

 

이제 깃 허브랑 Jenkins 연동 해 줘야함

BastionHost에서

ssh-keygen
cat .ssh/id_rsa.pub
(public 키 내용 복사)

 

 

 

Github

 

 

 

← back