Monolithic vs MSA
Monolithic
- 프로젝트에 관한 모든 부분을 하나의 서버에 배치하는 방법
MSA(Micro Service Architecture)
- 단순하게는 프론트, 백엔드를 물리적으로 다른 서버에 배치하는 방법
ex) 프론트 - S3에 배치 / 백 - EC2에 배치
- 단일 프로그램을 각 컴포넌트 별로 나누어 작은 서비스의 조합으로 구축하는 방법
아마존닷컴은 웹서버와 데이터베이스 백엔드의 2tier기반에서
서로 다른 애플리케이션 기능을 제공하는 분산 서비스 플랫폼으로 변화함.
백엔드
네트워크 1 - VPC, 서브넷, 라우팅 테이블, 인터넷 게이트 웨이
VPC(Virtual Private Cloud : 격리형 클라우드 리소스)
- AWS 클라우드내의 네트워크로, 사용자가 논리적으로 네트워크를 만들어서
서비스에 적용할 수 있음.
- IPV4 CIDR : IP의 범위를 지정하는 방법
ex ) 예를 들어 172.32.0.0/16 이라고 하면 IP의 범위가
172.32.0.0 ~ 172.32.255.255 지정되게 됩
- Amazon VPC 설명서
서브넷
- 연결되는 서버 컴퓨팅 자원들에 내부 IP를 할당
라우팅 테이블
- 연결된 서브넷들을 라우팅
- Routing : 패킷의 전송 경로를 지정
Internet Gateway
- 인터넷과 VPC를 연결. 인터넷 게이트웨이가 연결된 VPC만이 외부와 통신이 가능
- gateway : 현재 사용자가 위치한 네트워크(정확히는 세그먼트-segment)에서 다른 네트워크(인터넷 등)로 이동하기 위해 반드시 거쳐야 하는 거점
네트워크 2 - 보안그룹, 탄력적 IP
보안그룹
- 방화벽과 비슷한 역할. 보안그룹과 연결된 인스턴스들의 접근을 제안
- 백엔드의 포트를 구성하면 보안그룹이 생성됨.(S3, cloudfront 포트x)
- 인바운드 규칙 : 어떤 리소스에 접근하려할 때
- 아웃바운드 규칙 : 밖으로 어떤 api를 호출할 때
- 예) 소스 ID가 같은, 연결되어있는 리소스들만 VPC에서 통신이 되도록 함.
-> 모두 통신가능하게 하려면 CIDR를 0.0.0.0/0 으로 바꿔줌.
탄력적 IP
- 인스턴스에 고정된 IP를 부여할 수 있게 해줌
- EC2 인스턴스 IP는 중지 후 다시 실행하면 IP가 바뀜
- 탄력적 IP 주소 할당 -> 탄력적 IP 주소 연결 -> 인스턴스에 연결(고정 IP 연결됨.)
----------- AWS -----------------
프론트 | 백엔드 | 데이터베이스 |
---|
S3 | EC2 | RDS |
IAM | ELB | ElastiCache |
Cloudfront | Elastic Beanstalk | ElasticSearch Service |
----------------------------------
EC2(Elastic Computer Cloud)
홈페이지를 사용할 때 쓰는 서버 (클라우드의 가상 서버)
AMI(Amazon Machine Image) : 인스턴스에 설치할 리눅스나 우분투같은 os 이미지
생성
1. AMI 선텍 : Ubuntu Server 18.04 이미지를 선택
2. 인스턴스 유형 선택 : t2.micro를 선택
3. 보안그룹 구성 : SSH 포트인 22 포트는 열려있음
4. 새 키 페어 생성
(인스턴스가 생성된 후 SSH 를 이용해서 인스턴스에 접속하려고)
EC2 파이썬 배포하기
AW와 서버 연결
ELB(Elastic Load Balancing)
EC2+ELB 문서
- 여러대의 EC2를 묶어서 사용하기 위한 서비스
- 서비스 중 EC2의 성능이 부족한 경우 인스턴스 추가 가능
- 이미지 : EC2의 파일 디스크에 있는 것을 그대로 이미지로 저장 해놓기 (다음 EC2에서 사용가능, 자동으로 로드밸랜서에 추가하기 쉽게)
- scale out : ec2가 늘어남
생성
1. application load balancer
2. ipv4, 리스너 - http, 80
3. 가용영역 : a,c or b,d
4. 보안그룹 - 새 보안 그룹 생성, 라우팅 - 5000
5. target 그룹 만들고 연결
6. DNS 이름 주소로 브라우저 접속 확인
EC2 수동 추가
EC2를 만들고 target group에서 직접 추가
EC2 자동 추가
- AMI 만들기 (이미지 생성)
- Auto Scaling 시작구성 만들기
이름, AMI, 인스턴스 유형, 보안그룹(기존 EC2), 키페어(기존)
- Auto Scaling 그룹 만들기
시작 구성으로 전환, 서버넷(2개), 고급옵션 - 기존 로드밸런서에 연결,
- 인스턴스 Health 체크
- target groups 리스트 확인 (추가된 인스턴스가 unhealthy 상태라면)
- 인스턴스로 접속해서 문제 원인 찾기
- 터미널에서 해당 인스턴스를 ssh -i 로 연결하고 app.py가 작동하는지 확인
(nohup python app.py & -> ps -ef | grep python)
- app.py가 돌아가면 healty로 변경됨.
Elastic Beanstalk
ELB + Auto Scaling + EC2를 한번에 관리할 수 있는 서비스
환경에는 신경쓸 필요없이 간단한 옵션만 조절, 어플리케이션만 배포하면 되는 형태
생성
이름, 플랫폼(python), 생성확인
구성 변경해보기
변경사항을 바로 보기 위해 용량 - 인스턴스 - 최소 개수를 2개로 만들어
인스턴스 수가 늘어나는지 확인하기
Github Action을 통한 자동배포
+ 간단정리
- EC2 : AWS의 기본적인 컴퓨팅 서비스
- ELB : EC2 리소스를 효율적으로 사용하게 해줌
- Auto Scaling : ELB와 EC2의 연결을 좀 더 효율적으로 관리할 수 있게 해줌
- Elastic Beanstalk : 인프라 관리의 어려움을 줄이고 개발에 집중할 수 있는 환경을 만듦