【한글자막】 AWS Certified Solutions Architect Professional | Udemy
2023.01.06 - [DevOps/aws] - Udemy | AWS Certified Solutions Architect Associate 강의 | Section1~2
2023.01.09 - [DevOps/aws] - AWS Certified Solutions Architect Associate 강의 Udemy | Section 5: EC2 기초
117. 솔루션 아키텍처 토론 개요
이 파트에서 여러 예시를 배우고 솔루션 아키텍처로서 배워야하는 자질을 알아볼 것이다.
WhatIsTheTime.com
MyClothes.com
MyWordPress.com
Instatiating applications quickly
Beanstalk
118. WhatIsTheTime.com
사람들에게 시간 알려주는 사이트
db 필요 없음.
다운타임을 축소하고 싶음.
다운타임 축소를 위해 수평, 수직 확장할 필요 있음.
1. 사용자가 늘어나서 인스턴스를 t2.micro에서 m5.large 로 교체한다.
교체하는 기간에 다운 타임 발생
EIP 존재
2. 수평 확장으로 인스턴스를 늘림.
하지만 EIP 갯수도 늘어난다. 관리 어려움.
다른 방식으로 해보자!
eip를 제거하고 route 53을 활용한다.
a record, ttl 1 hour 로 고정
인스턴스 제거하는 과정에서 ttl 1시간 캐시되므로
특정 유저는 접속 안됨
로드 밸런서를 이용하자 !
ELB 는 상태 체크 가능하다. (보안 그룹 이용)
ELB의 ip 주소가 지속적으로 바뀌기 때문에 별칭 레코드를 사용한다.
수동으로 인스턴스 관리 하는 것보다
ASG를 이용하자
리전에 지진이 발생한다면 ?
다중 AZ 를 사용
비용 절감을 위해 예약 인스턴스를 사용한다
ASG 의 최소 용량은 항상 돌아가야하니까 ( 최소한의 예약인스턴스 사용)
Route 53의 ttl 정책 때문에 항상 a레코드 타입을 쓸 수는 없다. alias 존재 이유
119. MyClothes.com
Stateful Web App: MyClothes.com
이번엔 Stateful 웹 앱인 myClothes.com 을 예로 들어보자.
옷을 살 수 있고, 장바구니가 있고
동시에 수백 명의 사용자가 있다.
수평 확장을 하고 싶으며 앱을 stateless로 유지하게 해야한다.
사용자는 장바구니를 잃어버리면 안된다.
또한 주소 등의 사용자 정보를 효과적으로 보관하고 어디에서나 접근할 수 있는 데이터베이스에 저장할 거다.
ASG 사용
ELB로 트래픽을 각 ASG 로 보낸다고 가정하자
A 인스턴스에서 장바구니를 만들고
다음 연결에서 B인스턴스에 연결되면 장바구니가 사라진다.
사용자가 같은 ASG 의 인스턴스에 연결되게 할려면 세션을 켜야한다.
ELB session 사용
고착도 , 세션 밀접성을 도입해야한다.
Stickiness 을 설정하면 ELB에서 특정한 인스턴스로만 접근한다.
세션을 사용해도 인스턴스가 종료되면 장바구니를 잃어버리게 된다. ㄴ
Introduce User Cookie
사용자 쿠키를 사용해보자
만약 장바구니에 대한 정보를 사용자가 지니고 있다면?
인스턴스들은 장바구니에 대한 정보를 알 필요가 없다. -> stateless 하게 된다.
사용자 , 클라이언트에서 계속 인증하니까
하지만 데이터를 전송할 때마다 사용자에 대한 정보를 보내므로 HTTP 요청이 무거워진다.
또한 전송과정에서 사용자의 쿠키가 변경되면 보안 위험도 존재한다 .
따라서 EC2 인스턴스가 사용자 쿠키 내용을 점검해야한다.
Cookie must be validated
전체 쿠키의 크기는 4kb 이하까지만 가능해 쿠키 내에는 매우 작은 정보만 저장 가능
대량의 셋은 불가하다.
Introduce Server Session
전체 장바구를 웹 쿠키로 보내는 대신에 단순 세션 ID 만 보내는 것이다.
백그라운드에는 ElastiCache 클러스터가 존재한다.
세션 ID를 보낼 때 EC2 인스턴스에게 '이 물건을 장바구니에 추가할 거야'라고 말한다.
EC2 인스턴스는 장바구니 내용을 ElastiCache 에 추가하고 이 장바구니 내용을 불러올 수 있는 ID가 바로 세션 ID 가 된다. ( 사용자 세션 ID를 EC2 를 걸쳐 ElastiCache 에 저장하고, EC2 에 작업이 생길 때마다 ElastiCache 에서 세션 ID를 찾는다.)
ElastiCache 는 1천분의 1초 이하의 성능을 가졌다. 따라서 이 모든 것이 매우 빠르게 진해오딤 .
세션 데이터는 DynamoDB에 저장한다.
ElastiCache 내부를 수정할 수 없기 때문에 훨씬 안전하다.
Storing User Data in a database
사용자 데이터를 RDS에 저장한다.
RDS 는 인스턴스와 통신할 수 있으며 일종의 다중 AZ stateless 솔루션을 효과적으로 얻을 수 있다.
Scaling Reads
사용자가 매우 많아졌다고 가정하자.
RDS 읽기 전용 복제본을 사용한다. (최대 5개의 replicas 가능)
Scaling Reads (Alternative) - Write Through
EC2 인스턴스에서 데이터를 찾을때 먼저 elastiCache 를 확인한다. cache miss
데이터가 없으면 RDS 에 찾아보고 해당 데이터를 elastiCache에 캐싱한다 . cache hit 를 위해
캐싱 했기 때문에 rds 상의 트래픽을 줄이고 동시에 성능을 높일 수 있다.
Multi AZ - Survive disasters
다중 AZ ELB가 있다.
route 53 도 가용성이 높다.
로드밸런서를 다중 AZ로 만든다 .
오토 스케일링 그룹도 다중 AZ
RDS 역시 다중 AZ
대기 복제본을 만드는 것도 방법이다.
레디스를 사용한다며 ElastiCache도 다중 AZ 기능을 가짐.
철저한 보안그룹
3 tier 아키텍처를 위한 팁
클라이언트, 웹, 데이터베이스
ELB 고정 세션
웹 쿠키를 이용한 stateless 애플리케이션
ElastiCache
- 세션 저장 ( 또는 dynamodb 사용)
- RDS 캐싱
- 다중 AZ
RDS
- 사용자 데이터 저장
- 읽기 복제본 생성
- 다중 az for DR
철저한 보안그룹 설정
120. MyWordPress.com
완전히 확장 가능한 WordPress 웹 사이트 만들기
사진을 업로드하고 보여주는 기능
사용자 데이터, 콘텐츠는 mySql 에 저장된다.
확장하고 싶다면 ?
RDS를 Aurora 로 교체
다중 az, read replicas, 글로벌 데이터베이스 사용 가능
Storing images with EBS
EBS에 사진을 저장하는 경우
ELB에서 다른 두개의 인스턴스와 각각 EBS가 연결되어있다면
한쪽 EBS 만 사진을 갖는다 .
EBS 볼륨의 단점은 하나의 인스턴스만 있을 때는 잘 작동하지만 다중 AZ 또는 다중 인스턴스로 확장을 시작하면 문제가 생기기 시작한다 .
Storing images with EFS
EFS 는 네트워크 파일시스템 nfs 이다.
EFS 드라이브에 접근하기 위해 각 AZ 에 ENI 를 생성한다.
정리
Aurora Db를 이용하여 쉽게 다중 az 와 읽기 복제본을 생성한다.
EBS 에 데이터를 저장 ( 단일 애플리케이션에 유리)
Vs Storing data in EFS ( 분산 애플리케이션에 유리
EFS가 EBS 보다 비싸다.
121. 애플리케이션을 빠르게 인스턴스화 하기
Instantiating Application quickly
풀 스택을 실행하면 애플리케이션을 설치하고 데이터 삽입 및 복구하고 모든 내용을 구성한 다음
애플리케이션을 실행하는데 매우 긴 시간이 걸린다. 어떻게 하면 더 빨리 할 수 있을까?
full stack ( EC2, EBS, RDS)
클라우드의 이점을 활용하면 된다 .
EC2 Instances:
1. Golden AMI 사용
애플리케이션과 OS 종속성(dependencies) 등 모든 것을 사전에 설치하고 그것으로부터 AMI를 생성한다.
애플리케이션 ,OS 종속성 등을 재설치할 필요가 없다. 모든 것이 이미 설치된 상태에서 바로 실행된다.
2. 사용자 데이터 부트스트래핑
인스턴스가 처음 시작될 때 구성하는 것
애플리케이션, OS 종속성 등을 설치하기 위해 부트스트래핑을 할 수 있다.
매우 느리다.
3. 하이브리드
Elastic BeanStalk 은 ami를 구성하고 사용자 데이터를 추가하는 방식
RDS Databases:
스냅샷으로부터 복구
EBS Volumes:
스냅샷으로부터 복구
122. Beanstalk 개요
Developer problems on AWS
인프라 관리, 코드 배포, db lb 에 대한 환경 구성, 스케일링 문제등
고려해야할 문제가 많다.
개발자는 코드만 신경 쓰게 하자.
Elastic Beanstalk - Overview
여러 aws 서비스로 구성된다.
관리형 서비스
- 자동으로 용량 프로비저닝, 로드 밸런싱, 스케일링, 애플리케이션 상태 체크, 인스턴스 구성
- 코드만 신경 쓰면된다.
여전히 각각의 구성 요소를 완전히 제어할 수 있다.
beanstalk은 하나의 인터페이스에 통합되어 있음.
beanstalk 은 무료이지만 구성요소인 aws 서비스는 지불해야함.
Elastic Beanstalk - Components
Beanstalk의 구성요소는 애플리케이션으로 이루어져 있다.
(환경, 버전, 구성 등)
애플리케이션 버전
애플리케이션 코드의 반복이다. 버전1, 버전2,.... 등이 있을 수 있다
애플리케이션 환경
특정 애플리케이션 버전을 실행하는 리소스의 모음이다.
환경 내에서는 한 번에 하나의 애플리케이션 버전만 존재할 수 있다.(onlt on application version at a time)
환경 내에서 애플리케이션 버전을 버전 1에서 버전 2로 업데이트 할 수 있다.
Beanstalk에서는 서로 다른 두개의 티어를 가질 수 있다.
웹 서버 환경 티어와 작업자 환경 티어
다양한 환경을 만들 수 있다. ( dev, test, prod 등)
애플리케이션을 생성하고 버전을 업로드하고 환경을 실행하고 그 후에는 환경 수명 주기를 관리한다.
이를 반복한다.
Beanstalk이 지원하는 언어
Go, Java SE, Java with Tomcat .NET Core on Linux
.NET Core on Windows Server Node.js, PHP
Python, Ruby, Packer Builder Single Container Docker
Multi-container Docker Preconfigured Docker 등입니다
지원하는 언어가 없다면 사용자 지정 플랫폼을 만들 수 있는 고급 기능이 있다.
beanstalk 에서는 거의 모든 것을 배포할 수 있다.
Webserver Tier vs Worker Tier
웹서버 티어와 작업wk티어는 무슨 뜻일까?
웹티어는 1번 , 전통적인 방식의 아키텍처로 로드 밸런서가 있고 웹서버가 될 다수의 EC2 인스턴스가 있는 오토 스케일링 그룹으로 트래픽을 보낸다 .
작업자 티어는 2번
여기서 클라이언트가 ec2 인스턴스에 직접 접근하지 않는다.
메시지 대기열인 sqs 대기열을 사용한다.
메시지가 sqs 대기열로 전송된다.
ec2 인스턴스들이 작업자가 된다. sqs 대기열로부터 메시지를 가져와서 처리한다.
sqs 메시지 숫자에 따라 ec2 인스턴스가 확장된다.
웹 환경이 작업자 환경의 sqs 대기열로 메시지를 푸시함으로써 웹 환경과 작업자 환경이 함께 할 수 있다. ?
123. Beanstalk 실습
PaaS | 응용 프로그램 관리 | Amazon Web Services
클라우드 포메이션에서 stack 을 가져와서 실행했다.
Quiz 8: 클래식 솔루션 아키텍처 퀴즈
1. 웹사이트 TriangleSunglasses.com는 Application Load Balancer가 관리하는 오토 스케일링 그룹에서 관리 중인 EC2 인스턴스 플릿에 호스팅되어 있습니다. ASG는 웹사이트로 들어가는 트래픽을 온디맨드 기반으로 스케일링하도록 구성되었습니다. 비용 절감을 위해, ASG가 ALB로 통하는 트래픽을 기반으로 스케일링을 하도록 구성해 둔 상태입니다. 솔루션의 고가용성을 보장하기 위해, ASG를 업데이트하고 최소 용량을 2로 설정했습니다. 요구 사항을 충족시키되, 비용을 더욱 절감하려면 어떤 작업을 해야 할까요?
어떤 상황이건 2개의 EC2 인스턴스를 실행하면 추가적인 비용을 절감할 수 있습니다.
2. 다음 중 "무상태" 애플리케이션 티어를 설계하는 데에 도움이 되지 않는 것을 고르세요.
EBS 볼륨은 특정 AZ에 저장되며, 한 번에 하나의 EC2 인스턴스에만 연결될 수 있습니다.
EBS 볼륨은 az에 생성! | 하나의 EC2 인스턴스에만 연결된다.
3. 관리 중인 Linux EC2 인스턴스 100s에 소프트웨어 업데이트를 설치하려 합니다. 이 업데이트를 EC2 인스턴스로 동적으로 로딩되어야 하며, 많은 양의 연산을 요구해서는 안 되는 공유 스토리지에 저장하고자 합니다. 어떤 방법을 사용해야 할까요?
EFS는 EC2 인스턴스의 100s에 동일한 파일 시스템을 마운트할 수 있게 해주는 네트워크 파일 시스템(NFS)입니다. EFS에 소프트웨어 업데이트를 저장하면 각 EC2 인스턴스가 이들을 평가할 수 있게 됩니다.
4. 솔루션 아키텍트로서, 여러분은 복잡한 ERP 소프트웨어 스위트를 AWS Cloud로 이전하려 합니다. 오토 스케일링 그룹이 관리하는 한 세트의 Linux EC2 인스턴스에 소프트웨어를 호스팅할 계획입니다. 소프트웨어가 Linux 기기를 준비하는 데에는 보통 한 시간 이상이 걸립니다. 스케일 아웃이 발생할 경우, 설치 과정을 빠르게 만들기 위해서는 어떤 방법을 추천할 수 있을까요?
Golden AMI는 설치되고 구성된 전체 소프트웨어를 포함한 이미지이기 때문에, 향후 이 AMI로부터 EC2 인스턴스를 빠르게 부팅할 수 있습니다.
5. 애플리케이션을 개발 중에 있으며, 최소 비용을 사용해 이 애플리케이션을 Elastic Beanstalk으로 배포하려 합니다. 이를 위해서는, 애플리케이션을 .................. 에서 실행해야 합니다.
문제에서 애플리케이션이 아직 개발 단계에 있으며 비용을 절감하고자 한다고 언급하고 있습니다. 단일 인스턴스 모드는 하나의 EC2 인스턴스와 하나의 탄력적 IP를 생성합니다.
6.애플리케이션을 Elastic Beanstalk으로 배포하던 도중, 배포 프로세스가 극도로 느리다는 것을 알게 되었습니다. 로그를 검토한 결과, 종속성이 매 배포 당 각 EC2 인스턴스로 리졸브된다는 사실을 발견했습니다. 영향을 최소화하면서 배포 프로세스를 빠르게 하려면 어떻게 해야 할까요?
Golden AMI는 전체 소프트웨어, 종속성 및 구성을 포함하는 이미지이기 때문에, 향후 이 AMI로부터 EC2 인스턴스를 빠르게 부팅할 수 있습니다.