이번 섹션에서는 지금까지 나온 기술들이 어떻게 함께 이용되는지 살펴본다.
Stateless Web App: WhatIsTheTime.com
cf. downtime은 중단시간을 의미한다.
- EC2 instance와 elastic IP로 User와 바로 소통하는 구조
- scale up할 때 Downtime이 생기고, scale out시 많은 elastic IP를 관리해야 한다.
- Elastic IP를 안쓰고, Route 53의 DNS Query(A Record)를 통해 EC2의 IP를 알아내서 소통하도록 하기
- TTL이 1hour일 때, 특정 EC2 인스턴스가 죽거나 삭제되면 최대 1시간 동안 특정 고객이 이용 못 할 수 있다.
- Route 53의 DNS Query를 통해 모두 ELB로 가게 하고(Alias Record 사용), ELB에서 Health Check를 통해 정상적인 Private EC2 instance에 연결되도록 하기
(+ auto scaling group을 통해 수요에 맞게 scale in/out)
(+ 재난에 대응하기 위해 ELB, EC2 모두 multi AZ로)
(+ 최소 용량이 있다면 reserved instance 이용)
Stateful Web App: MyClothes.com
- ELB에서 Stickness를 통해 데이터 유지되도록 하기
- sticky하게 소통하던 EC2가 중단되거나 제거되면 데이터도 함께 사라진다
- User cookie에 담아서 소통
- stateless하지만 request가 무거워지고 보안이 매우 취약해진다(쉽게 쿠키 교체 가능, 따라서 Validation 필수)
- cookie 용량도 4KB가 최대이다
-
session_id를 웹 쿠키에 넣어서 소통하고, ElastiCache를 통해 ID에 해당하는 데이터 Store/retrieve하기(DynamoDB로 대체 가능)
-
RDS에서 데이터 Store/retrieve하고, Read Replicas를 통해 트래픽 분산
(+ ElastiCache를 캐싱용으로 사용, cache miss일때만 RDS 접근하도록)
(+ multiAZ ELB, multiAZ ASG, multiAZ RDS, multiAZ ElastiCache로 HA토록)
(+ 연결되는 파트만 보안그룹에서 설정)
cf. Route53은 multiAZ 따로 설정 안해도 이미 highly avaliable(HA)
Stateful Web App: MyWordPress.com
-
Aurora를 통해 MultiAZ, Read Replicas 간편하게 설정
-
이미지를 EBS에 저장
- 한 EC2 instance일 때는 잘 동작하나 scale out시 다른 EC2간 이미지 공유가 안된다.
- 이미지를 EFS에 저장
NFS(Network File System)인 EFS와 각 AZ안의 ENI(Elastic Network Interface)를 통해 EC2는 소통한다.
- AZ와 상관없이 인스턴스간의 이미지가 공유된다.
cf. EBS에서 특정 타입(io1, io2)은 같은 AZ에서 공유 가능
Instantiating Applications quickly
Cloud를 통해 여러 full stack 구성을 시작하는데 걸리는 시간을 줄일 수 있다.
EC2 Instance에서는 다음이 가능하다.
- Use a Golden AMI: OS 영역을 포함하여 필수 패키지가 설치된 표준 이미지 개념 - 공통 부분을 미리 패키징하여 인스턴스 프로비저닝 시간 최소화
- Bootstrap using User Data
- Hybrid(Golden AMI + User Data): Elastic Beanstalk
RDS, EBS Volume은 snapshot을 통해 쉽게 복구 가능
Elastic Beanstalk
Web App이 3-tier(PUBLIC SUBNET, PRIVATE SUBNET, DATA SUBNET)는 다음과 같다.
cf. web application (or web app) is application software that runs on a web browser
Elastic Beanstalk은 AWS application 배포의 개발자 중심 View다.
- 개발자는 오로지 코드만 책임이 있고, 나머지는 모두 알아서 해준다.
- Beanstalk 자체는 무료이고, 그 아래의 resource들에 대해 과금된다.
Web Server Environment Tier와 Worker Environment Tier가 있다.