인프라

AWS 프로젝트 환경 구성(VPC, EC2, RDS, CodeDeploy)

jwKim96 2022. 5. 26. 17:00

1. 프로젝트용 사용자 생성

필요한 권한(FullAccess)

  • VPC
  • RDS
  • EC2

2. VPC 서브넷 구축

Multi AZ 로 구성하지 않은 이유

WAS 와 DB 의 안정적인 서비스를 위해서는 AZ_2 도 구성해야합니다.
하지만, 비용상의 문제로 실습만 해보고 운영하진 않을 예정입니다.

AZ_2 가용영역에 private subnet 이 있는 이유

그럼에도 private subnet - 2 를 만든 이유는 RDS 서브넷 그룹이 최소 2개 이상의 가용영역으로 구성된 서브넷들로 구성해야하기 때문입니다.
정석대로라면, NAT GatewayBastion 을 분리해야 하지만, 비용상의 문제로 2개를 함께 운용하기로 결정하였습니다.
(private subnet - 2 VPC 에서 서브넷만 생성해놓고, 인스턴스를 할당하진 않습니다)

2-1. VPC 생성

2-2. 서브넷 생성

private subnet x 2
public subnet x 1

2-3. IGW 생성

2-4. 라우팅 테이블 설정

airbnb-subnet-private, 0.0.0.0/0 -> EC2 NAT Instance id
(4-1) 에서 Nat Instance 생성 후, 해당 Instance 의 id 를 입력해준다.

airbnb-subnet-public, 0.0.0.0/0 -> airbnb-igw

3. RDS Instance 생성

3-1. RDS 서브넷 그룹

3-2. RDS Instance

4. EC2 Instance 생성

4-1. NAT Instance(and also Bastion)

4-2. WAS Instance

4-3. WAS Instance 세팅

4-3-1. ssh 연결 환경 구축

# 내 컴퓨터 -> NAT Instance 로 WAS 접속 key 전송
my_mac> scp -i ec2-nat.pem ./ec2-was.cer ec2-user@NAT-PUBLIC-IPv4-ADDRESS:~/keys/ec2-was.cer

# NAT Instance 접속
my_mac> ssh -i ec2-nat.cer ec2-user@NAT-PUBLIC-IPv4-ADDRESS
ec2-nat> ping 8.8.8.8 # 통신 되야함

# WAS 접속
ec2-nat> ssh -i ~/keys/ec2-was.cer ec2-user@WAS-PRIVATE-IPv4-ADDRESS
ec2-was> ping 8.8.8.8 # 통신 되야함

4-3-2. docker & docker-compose 설치

현재 OS 와 CPU 아키텍처에 맞는 docker-compose 설치
참고 : docker-compose release

# docker 설치
ec2-was> sudo yum install docker -y

# docker-compose 설치
ec2-was> sudo curl \
-L "https://github.com/docker/compose/releases/download/v2.5.1/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
ec2-was> sudo chmod +x /usr/local/bin/docker-compose
ec2-was> docker-compose -v
Docker Compose version v2.5.1
# 참고
ec2-was> echo $(uname -s)
Linux

ec2-was> echo $(uname -m)
x86_64

4-3-3. docker 서비스 실행

# 부팅시 시작되도록 설정
ec2-was> sudo systemctl enable docker.service
ec2-was> sudo systemctl enable containerd.service

# Docke 서비스 실행
ec2-was> sudo systemctl start docker.service
ec2-was> sudo systemctl start containerd.service

# Docke 서비스 실행 확인
ec2-was> sudo systemctl status docker.service
ec2-was> sudo systemctl status containerd.service

4-3-4. 필요한 Docker Image 다운로드

ec2-was> sudo docker image pull openjdk:11.0.11
ec2-was> sudo docker image pull nginx:1.22.0

4-3-5. RDS 접속 환경 설정

# MySQL Client 설치
ec2-was> sudo yum install -y mysql

# RDS MySQL 접속 명령어 실행파일 생성
ec2-was> echo "mysql -u airbnb -p -h RDS_엔드포인트 -P 3306" > mysql_connect
ec2-was> sudo chmod +x mysql_connect

# RDS MySQL 접속
ec2-was> ./mysql_connect
Enter password:

MySQL [(none)]> 

이렇게 하기 위해서 조건

  • ec2-wasrds같은 subnet 내에 있음
  • rds 보안그룹의 인바운드규칙 에서 같은 subnet 내에서 들어오는 3306 요청 허용

만약 subnet 의 CIDR 이 10.0.1.0/24 라고 가정하면

유형 프로토콜 포트 범위 소스
MYSQL/Aurora TCP 3306 [사용자 지정] 10.0.1.0/24

이렇게 규칙을 설정해야함

4.3.6 CodeDeploy Agent 설치

공식 문서가 정말 잘 되어있어서, Amazon Linux 또는 RHEL용 CodeDeploy 에이전트 설치를 보고 설치하면 된다.

4.3.7 Codedeploy 설정

5. ALB

https://www.youtube.com/watch?v=pfWd-XNRY7c

이 영상 하나면 끝