AWS 3tier Application Deployment
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