강의 '스스로 구축하는 AWS 클라우드 인프라 - 기본편' 내용을 정리한 게시물입니다.
해당 강의 목표
AWS 클라우드 인프라 구축 프로세스 및 관련 서비스 파악
- 네트워크 서비스 - vpc
- 컴퓨팅 서비스 - ec2
- 로드밸런서 구축 - 이중화
- 관계형 데이터베이스 서비스 - RDS

기초 개념
- AWS S3
- AWS CloudFront
- AWS EC2
- AWS VPC (VPC, Subnet, Internet Gateway, Route Table, Security Group, NAT Gateway)
- Elastic Load Balancer (Application Load Balancer)
- AWS RDS
- Auto Scaling
그 외 추가 개념
- AWS ARN
- CDN
- OAI
- LAMP
- Application Load Balancer
- Bastion Host
- AMI (Amazon Machine Image)
- CIDR (Classless Internet Domain Routing)
- AWS EBS
- AWS Security Group
- AWS IAM
- Tenancy
- AWS RDS Multi AZ
- Failover
- Launch configuration
- Launch templates
- Spot Fleet
dig, df -h, ping
구축 시작
1. EC2 생성
- 이름 태그 설정
- 키 페어 설정
- VPC 기본 값 사용
- (기타) Putty로 SSH 접속하기 위해서 키 페어 확장자 변경 (
.pem -> .ppk : puttygen 이용)
2. 서버리스 정적 웹사이트 호스팅
1번과 다르게 서버 구성 없이 웹사이트를 호스팅하고 CDN을 이용하여 성능을 향상시킴. AWS S3 와 AWS CloudFront 이용.
- S3 생성 및 파일 업로드
성능 비교를 위해 일부로 서울 리전이 아닌 버지니아 리전에 생성
- S3 설정 변경 (호스팅 설정, 외부 접속 권한 설정)
- CloudFront 생성 및 설정
성능 비교
- S3 버킷 호스팅 접속 지연 시간 -> 4.00s

- CloudFront 구성 호스팅 접속 지연 시간 -> 9ms

성능 차이가 나는 이유는 CloudFront가 CDN 서비스이기 때문.
3-1. LAMP 웹 서버 및 이중화 네트워크 구성
Linux, Apache 웹 서버, MySQL, PHP 구성하고 Application Load Balancer 를 이용하여 네트워크 이중화 구성. AWS VPC, AWS EC2, AWS EBS, AWS EFS, Elastic Load Balancer 를 이용

대부분 보안 강화를 위해 Public subnet과 Private subnet 둘 다 생성함. 하지만, 업데이트 및 유지보수 등과 같은 이유 때문에 private subnet에 있는 ec2에 접근해야할 경우가 있음. 주로, public subnet에 있는 ec2(Bastion host)을 이용하여 처리함. 따라서, Bastion host 설정 과정도 포함되어 있음.
또한, 지속적인 서비스 제공을 위해 웹 서버를 이중화함 (오류로 인해 서버가 다운되어 서비스가 중단되는 상황을 막기 위한 목적). 해당 설정도 포함되어 있음.
- 기본 네트워크 환경 구성
- VPC 생성
- Subnet 생성
- Internet Gateway 생성 -> 외부 인터넷과 통신이 가능하도록 함
- Route Table 생성 및 Route 설정 -> VPC, 인터넷 및 VPN 연결 내 서브넷 간에 패킷이 전달되는 방법 지정
- LAMP 웹 서버 구성
- EC2 생성 (Security group, Storage(EBS=Elastic Block Storage), keypair, Elastic IP) - 직접 생성, Custom AMI을 이용한 생성
- 작동 테스트
- 네트워크 파일 시스템 구성: EFS 이용
- Security group 생성
- EBS 가용성, 생명 주기, 성능, 네트워크 등 설정
- EC2에 EFS 마운트
- 작동 테스트
- 이중화 네트워크 구성: Application Load Balancer 이용
- Target group 생성 (Target type, Protocol/Port, Target registration 등 설정)
- Application Load Balancer 스키마, 네트워크, Security group, Listener/Rule 등 설정
- 작동 테스트
- Private EC2 외부 통신 구성: Bastion 서버와 NAT Gateway 이용
- NAT Gateway 생성
- Route table 설정
- 외부 통신 테스트
3-2. 관계형 데이터베이스 서비스 구성
MySQL 데이터베이스를 서로 다른 영역에 이중화로 구성하고, 인스턴스와 데이터베이스 연결. AWS RDS 이용.

- Security group 생성
- Subnet group 생성
- MySQL 데이터베이스 생성
- DB Engine
- DB Instance
- Storage
- Availability & Durability
- Connectivity
- Authentication
- Backup
- 웹 서버와 데이터베이스 연결 및 테스트 (웹 브라우저 이용)
- Endpoint
- Master user
- Master password
- 데이터베이스 Read replica 생성 및 연결, 테스트 (웹 브라우저 이용)
- Failover를 통한 데이터베이스 이중화 테스트 (Reboot with Failover, 웹 브라우저 이용)
dig
3-3. Auto Scaling 구성
Auto Scaling을 구성함으로써 확장성과 탄력성을 구현함.

정책에 따라, Scale-out 혹은 Scale-in 됨.
- Lanch Template 및 Application Load Balancer 구성
- private subnet의 ec2에 대한 Custom AMI 생성
- Launch Template 생성 (AMI, Key pair, Network, Storage 등)
- Application Load Balancer 생성 (Target group, security group)
- Auto Scaling Group 및 Scaling Policy 구성
- Auto Scaling Group 생성 (Launch options, Group size, Load balancer, Tag 등)
- Scaling Policy 구성
- 콘솔 및 웹 브라우저를 통해 확인
- Auto Scaling Scale-Out 테스트
- Apache Bench Test 목적 패키지 설치 (httpd-tools)
- Application Load Balancer에 부하 테스트
ab -n 200000 -c 1000 http://lab-vpc-alb-asg-450791075.ap-northeast-2.elb.amazonaws.com/
- CloudWatch를 통해 CPU Utilization rate 증가 확인
- Scale-out으로 EC2 증가 확인
- Auto Scaling Scale-In 테스트
- Scale-in으로 EC2 감소 확인
- Auto Scaling Group의 Termination policy 확인
참고 자료