출처: Architecting on AWS 7.7.4 (KO): Student Guide
안티패턴: 모놀리식 인프라
강력하게 통합된 서버 체인을 중심으로 움직이며 각 서버는 특정 목적을 지닌다.
구성 요소 또는 계층 중 하나에 중단이 발생하면 시스템
한 게층에 서버를 추가하거나 제거하는 경우, 연결된 모든 계층의 모든 서버도 연결해야 한다.
모범 사례: 느슨한 결합
관리형 솔루션을 시스템 계층 간의 중간자로 사용할 수 있다.
중계자가 구성 요소 또는 계층의 장애 및 크기 조정을 자동으로 처리한다.
구성 요소를 분리하는 주요 솔루션 중 2가지는 로드 밸런서와 메시지 대기열이다.
마이크로서비스의 장점
장애 발생 시 상호 영향이 적다.
기술 스택을 독립적으로 가져갈 수 있다.
마이크로서비스의 단점
특정 서비스에 장애가 발생 시 트러블 슈팅이 어려울 수 있다.
서비스별로 파이프라인을 독립적으로 구축해야하기 때문에 파이프라인 관리가 번거롭다.
컨테이너의 특성
반복 가능
독립적 환경
Vm보다 더 빠른 가동/중단 속도
뛰어난 이식성
확장 가능성
독립적인 마이크로서비스로 구성
EC2에서 컨테이너를 직접 실행할면 크기 조정, 연결 및 유지 관리 작업을 사용자가 직접 해야한다.
오케스트레이션 도구를 통해 관리할 수 있는 작업
일정 예약
배치
네트워킹
모니터링
컨테이너 이미지를 ECR로 푸시한 다음 해당 이미지를 끌어와서 컨테이너를 시작할 수 있다.
관리형 Docker 컨테이너 레지스트리이다.
이미지 관리 기능이 존재한다. -> Docker의 이미지 관리 기능을 이용한다.
컨테이너 이미지에 대한 압축, 암호화 및 제어가 가능하다.
레지스트리에 리포지토리를 하나 이상 생성 후 리포지토리에 이미지를 저장 가능하다.
Docker 컨테이너를 지원하는 확장성이 뛰어난 고성능 컨테이너 관리 서비스이다.
컨테이너화된 애플리케이션의 크기 조정, 유지 관리 및 연결을 관리한다.
리포지토리에서 이미지를 가져온다.
ECS 서비스는 컨테이너 수를 관리하여 서비스 용량 크기를 조정한다.
ECS 클러스터가 호스팅 용량 크기를 조정한다.
컨테이너의 집합 = 태스크
완전관리형
서비스 검색
AWS 서비스들과의 통합
ECR: 컨테이너화된 애플리케이션이 원할하게 컨테이너 이미지에 액세스하여 해당 이미지를 실행할 수 있다.
IAM: 각 컨테이너에 세분화된 권한을 배정할 수 있다.
CloudWatch Logs 및 Container Insights: 컨테이너화된 애플리케이션과 인스턴스의 로그를 한 곳에서 편리하게 확인할 수 있다.
유연한 호스팅 옵션
일반 개발 워크플로 사용
CI/CD를 지원한다. 다음 작업을 수행하는 CI/CD 파이프라인을 구축할 수 있다.
소스 코드 리포지토리의 변경 사항 모니터링
해당 소스에서 새 Docker 이미지 구축
Amazon ECR, Docker Hub 등의 이미지 리포지토리에 이미지 푸시
애플리케이션에서 새 이미지를 사용하도록 Amazon ECS 서비스 업데이트
Kubernetes는 컨테이너화된 애플리케이션을 대규모로 배포하고 관리하는 데 사용할 수 있는 오픈 소스 소프트웨어이다.
준수 인증을 받은 관리형 Kubernetes 서비스이다.
고가용성의 안전한 클러스터를 제공하는 데 도움이 되며 패치 적용, 노드 프로비저닝 및 업데이트와 같은 주요 태스크를 자동화한다.
Amazon EKS는 자체 Kubernetes 클러스터를 설치 및 운영할 필요 없이 AWS에서 Kubernetes를 쉽게 실행할 수 있도록 해주는 관리형 서비스이다.
EKS 사용 시 AWS에서 고가용성 서비스 및 업그레이드를 사용자 대신 관리한다.
최신 버전의 Kubernetes를 실행하므로 Kubernetes 커뮤니티의 기존 플러그인과 도구를모두 사용할 수 있다.
애플리케이션의 실행 위치에 관계없이 호환성이 보장된다.
서버 또는 클러스터를 관리할 필요 없이 컨테이너를 실행하는 데 사용할 수 있는 Amazon ECS와 Amazon EKS를 위한 기술이다.
서버 유형을 선택하거나, 클러스터 크기 조정 시점을 결정하거나, 클러스터 패킹을 최적화할 필요가 없다.
컨테이너화된 애플리케이션 관리
ECS
EKS
자체 Kubernetes 클러스터를 설치 및 운영할 필요가 없다.
AWS 클라우드 또는 온프레미스에서 Kubernetes 애플리케이션을 유동적으로 시작 및 실행하고 조정할 수있다.
- cf.
- ECS -> Docker Supported
- EKS -> Kubernetes Supported
Docker Vs Kubernetes
하나의 컨테이너만 사용·관리 -> Docker (하나의 컨테이너를 관리하는 데 최적)
다수의 컨테이너 사용·관리 -> Kubernetes (여러 개의 컨테이너를 관리하는 데 최적, 도커를 관리하는 툴)
인터넷 게이트웨이, NAT 게이트웨이 또는 퍼블릭 IP 주소를 사용하지 않고 AWS 서비스에 액세스할 수 있다.
VPC 엔드포인트의 특성
수평 크기 조정
중복성
고가용성
S3 및 DynamoDB로 향하는 트래픽의 라우팅 테이블의 대상으로 지정한다.
S3와 DynamoDB에만 지원된다.
엔드포인트 사용에 따른 추가 비용이 발생하지 않는다.
데이터 전송 및 리소스 사용량에 대한 표준 요금이 그대로 적용된다.
서비스가 VPC 내에 포함되어 있는 것처럼 VPC를 서비스에 프라이빗 방식으로 연결할 수 있다.
인터페이스 엔드포인트가 생성되면 VPC에서 라우팅 테이블 변경 없이 트래픽이 새 엔드포인트로 전달된다.
리전 내 및 리전 간 지원
교차 계정을 지원한다.
두 VPC의 CIDR 블록이 겹치면 안된다.
VPC 피어링 연결은 두 VPC 간에 일대일 관계이다.
VPN 터널 2개가 제공된다.
인터넷 기반 연결이기 떄문에 보안성이 문제 될 수 있다.
표준 이더넷 광 케이블을 통해 내부 네트워크를 Direct Connect 로케이션에 연결한다.
Dedicating 연결, Hosting 연결 두가지가 존재한다.
서버를 안쓴다는 의미 x
프로비저닝하거나 관리할 인프라가 없음
소비 단위에 따라 자동으로 크기 조정
종량제 요금
내장된 보안, 고가용성 컴퓨팅
Amazon API Gateway를 사용하여 API 생성, 게시, 유지 관리, 모니터링 및 보호할 수 있다.
API Gateway를 사용하여 애플리케이션을 AWS 서비스와 기타 퍼블릭 또는 프라이빗 웹 사이트에 연결할 수 있다.
AWS 관리형 서비스이다.
여러 마이크로서비스를 위한 통합 API 프런트 엔드를 생성. (벡엔드 단 제일 앞쪽에 위치)
백엔드에 분산 서비스 거부(DDOS) 보호 및 제한 기능을 제공
벡엔드에 대한 요청을 인증 및 권한 부여
서드 파티 개발자에 의해 API 사용을 조절, 측정 및 수익화
완전 관리형 메시지 대기열 서비스
처리 및 삭제될 떄까지 메시지를 저장
발신자와 수신자 간 버퍼 역할을 담당
애플리케이션 구성 요소를 느슨하게 결합
비동기식 처리 사용
실패한 단계에 대한 내결합성 제공
급증하는 수요 처리 가능
작업 대기열
버퍼링 및 배치 작업
요청 오프로딩
인스턴스 자동 크기 조정
Standard
FIFO
서비스 간 통신
상태 변경 알림
비동기 작업 항목
Amazon CloudWatch 경보 알림
메일 발송 목록 이메일 및 SMS 메시지
앱 업데이트 푸시 알림
게시된 단일 메시지
회수 옵션이 없음
HTTP 또는 HTTPS 요청
표준 또는 FIFO 주제
Amazon Kinesis Data Streams
Amazon Kinesis Data Firehose
Amazon Managed Service for Apache Flink
Amazon kinesis Video Streams
시나리오 워크 플로우
이미지 파일을 Amazon S3 버킷에 업로드한다.
버킷의 ingest 폴더에 파일을 업로드하면 SNS 주제에 대한 이벤트 알림이 호출된다.
그러면 SNS가 별도의 SQS 대기열에 알림을 배포한다.
Lambda 함수는 이미지를 형식으로 처리하고 출력을 S3 버킷 폴더에 저장한다.
S3 버킷 폴더의 처리된 이미지를 검증하고 Amazon CloudWatch에서 로그한다.
실습 목표
리소스 분리의 가치 이해
Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 Lambda 함수로 교체하면 제공될 수 있는 이점 파악
Amazon SNS 주제 생성
Amazon SQS 대기열 생성
Amazon S3에서 이벤트 알림 생성
기존 코드를 사용하여 AWS Lambda 함수 생성
고객이 필요로 하는 모든 위치에서 클라우드를 제공한다.
리전뿐만 아니라 다양한 위치에서 AWS 서비스들을 제공한다.
AWS 엣지 로케이션
AWS 로컬 영역
AWS Outposts
AWS Snow 패밀리
도메인 이름을 IP 주소로 확인
도메인 이름을 등록 또는 이전
지연 시간, 상태 확인 및 기타 기준에 따라 요청을 라우팅한다.
라우팅 정책의 특성
단순성
장애 조치
지리적 근접성
지리적 위치 라우팅 (클라이언트의 위치에 따라 라우팅 변경)
지연 시간 기반
다중값 응답
가중치
글로벌 콘텐츠 전송 네트워크 서비스이다.
AWS WAF 및 AWS Shield와 통합할 수 있다.
정적 또는 동적 콘텐츠를 제공한다.
보안 기능이 내장되어 있다.
엣지 로케이션을 활용하여 서비스 한다.
오리진 선택
S3 버킷
ELB 로드 밸런서
사용자 지정 오리진
EC2 인스턴스
온프레미스 서버
배포 생성
캐시 동작 정의
경로 패턴
프로토콜 정책
HTTP 메서드
서명된 URL
캐시 정책
유지 시간(TTL)
캐시 키 설정
선택 사항
함수 연결
AWS WAF 웹 액세스 제어 목록(웹 ACL) 연결
사요자 지정 도메인 이름 추가
AWS에서 애플리케이션을 보호하는 관리형 DDos 보호 서비스이다.
유료 구독 서비스로 제공한다.
AWS Sheild Standard
AWS Sheld Advanced
테스트
계획
오래된 계획
변경사항이 반영되지 않음
고가용성
내결함성
백업
재하 복구
인스턴스 장애 조치를 계획한다.
가용 영역 장애 조치를 계획한다.
리전 장애 조치를 계획한다.
Amazon RDS
Amazon DynamoDB
AWS CloudFormation
스크립트
간편성
규정 준수
비용 제어
AWS Backup 계획 생성
리소스 할당
백업 관리 및 모니터링
실습 목표
기본 보안 설정으로 S3 버킷 생성
퍼블릭 액세스가 가능하도록 S3 버킷 구성
기존 CloudFront 배포에 S3 버킷을 새 오리진으로 추가
CloudFront 배포를 통한 액세스만 허용하도록 S3 버킷 보호
S3 버킷의 보안을 제어하도록 OAC 구성
퍼블릭 또는 OAC 액세스가 가능하도록 Amazon S3 리소스 구성