AWS 프로젝트 환경 구성(VPC, EC2, RDS, CodeDeploy)
1. 프로젝트용 사용자 생성
필요한 권한(FullAccess)
- VPC
- RDS
- EC2
2. VPC 서브넷 구축
Multi AZ 로 구성하지 않은 이유
WAS 와 DB 의 안정적인 서비스를 위해서는 AZ_2
도 구성해야합니다.
하지만, 비용상의 문제로 실습만 해보고 운영하진 않을 예정입니다.
AZ_2 가용영역에 private subnet 이 있는 이유
그럼에도 private subnet - 2
를 만든 이유는 RDS 서브넷 그룹이 최소 2개 이상의 가용영역으로 구성된 서브넷들로 구성해야하기 때문입니다.
정석대로라면, NAT Gateway
와 Bastion
을 분리해야 하지만, 비용상의 문제로 2개를 함께 운용하기로 결정하였습니다.
(private subnet - 2
VPC 에서 서브넷만 생성해놓고, 인스턴스를 할당하진 않습니다)
2-1. VPC 생성
2-2. 서브넷 생성
private subnet
x 2public 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-was
와rds
가 같은 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 설정
- CodeDeploy 실패시, 조치방법
- [codedeploy-not-working-in-private-vpc]https://stackoverflow.com/questions/48023692/aws-codedeploy-not-working-in-private-vpc
5. ALB
https://www.youtube.com/watch?v=pfWd-XNRY7c
이 영상 하나면 끝