출처: 아이자와 고지 외 1명, ⌜클라우드 네이티브를 위한 쿠버네티스 실전 프로젝트⌟, 동양북스, 2021, p.39.
마음에 드는 장소를 등록하는 서비스. ex. 인천, 서울, 강릉, ...
장소를 표시, 등록하는 웹 애플리케이션과 장소 정보를 일괄 등록하는 배치 애플리케이션으로 구성된다.
출처: 아이자와 고지 외 1명, ⌜클라우드 네이티브를 위한 쿠버네티스 실전 프로젝트⌟, 동양북스, 2021, p.39.
싱글 페이지 애플리케이션(Single Page Application)의 프론트엔드, REST API를 제공하는 벡엔드로 구성된 웹 애플리케이션과 스케줄된 배치 애플리케이션 으로 구성된다.
웹 애플리케이션의 프론트엔드 파일은 S3에 저장하고 CloudFront를 통해 정적 웹 콘텐츠로 배포한다.
백엔드는 EKS 클러스토 워커 노드에 컨테이너로 배포하고 RDS 데이터베이스와 접속한다.
가용성을 위해 백엔드로의 접속은 ELB를 통해 분산 시킨다.
ECR을 통해 백엔드 애플리케이션의 컨테이너 이미지와 배치 애플리케이션의 이미지를 관리한다.
배치 애플리케이션도 EKS에 배포되며 S3에 저장된 파일을 처리하고 RDS에 접속하여 쓰기를 실행한다.
RDS의 데이터베이스 조작을 위해 EC2 인스턴스로 배스천 호스트(Bastion Host)를 구성한다.
- 배스천 호스트
네트워크 보안을 강화하기 위해 설계된 특별한 목적의 서버이다. 해당 서버는 일반적으로 내부 네트워크와 외부 네트워크(인터넷) 사이에 위치하며, 외부에서 내부 네트워크의 자원(ex. 데이터베이스, 파일 서버, 애플리케이션 서버 등)에 접근할 수 있는 유일한 접속 지점 역할을 한다.
S3(Simple Storage Service)
기본 스토리지 단위는 버킷이다.
AWS가 제공하는 클라우드 스토리지 서비스
미리 스토리지 용량을 정의하지 않고 사용 가능하다.
프론트엔드 콘텐츠 배포 장소로 사용하며, 배치 애플리케이션에서 파일을 읽어오는 장소로도 사용한다.
위 애플리케이션에서는 프론트엔드용 버킷과 배치 입력 파일용 버킷 2개를 생성한다.
CloudFront
AWS가 제공하는 CDN(Content Delivery Network) 서비스이다.
웹 콘텐츠, 이미지, 동영상 애플리케이션 등을 빠르게 전송하기 위한 구조로 되어있다.
전 세계에 많은 에지 로케이션(데이터를 전송하기 위한 지점)을 갖고 있어 사용자가 접속한 가장 가까운 장소에서 콘텐츠를 제공한다.
위 애플리케이션에서는 프론트엔드 콘텐츠는 S3에 저장하고 CloudFront를 통해 접속한다.
RDS(Relational DataBase)
AWS가 제공하는 관계형 데이터베이스이다.
Amazon Aurora, PostgreSQL, MySQL, MariaDB 등이 존재한다.
RDS에서는 멀티 AZ 구성(여러 개 가용 영역에 인스턴스를 배치하여 다중화하는 구조)을 지원하여 가용성을 높일 수 있다.
ECR(Elastic Container Registry)
AWS가 제공하는 컨테이너 레즈스트리 관리형 서비스이다.
컨테이너 이미지를 저장하고 다운로드할 수 있는 구조로 컨테이너 레지스트리를 사용한다.
- 컨테이너 레지스트리
컨테이너 이미지를 보관하는 리포지토리이며, 도커 명령어 등을 사용하여 컨테이너 이미지를 등록 및 다운로드한다.
컨테이너 이미지를 ECR에 등록해두고 EKS 클러스터로 배포한다.
EC2(Elastic Computing Cloud)
AWS에서 가상 머신을 사용할 수 있는 서비스로 다양한 형태의 가상 머신을 쉽게 구축할 수 있다.
배스천 호스트와 EKS 클러스터의 워커 노드에 사용된다.
ELB(Elastic Load Balancing)
AWS가 제공하는 로드밸런서 서비스이다.
ALB(Application Load Balancer)
HTTP/HTTPS에 특화된 L7(응용계층) 로드밸런서이다.
경로 기반 라우팅, 호스트 기반 라우팅(HTTPS 헤더에 설정된 Host에 따라 경로 변경) 등 HTTP 특화 처리가 가능하다.
NLB(Network Load Balancer)
TCP/UDP에 특화된 L4(전송계층) 로드밸런서이다.
HTTP 트래픽에도 동작하지만, HTTP 레이어에서의 고급 기능이 필요하다면 ALB를 선택하는 것이 더 적합하다.
CLB(Classic Load Balancer)
HTTP/HTTPS와 TCP로 분산 설정이 가능하고 기본적인 로드 밸런서 기능을 제공한다.
하지만, 기능상 제약사항이 많아 AWS 측에서도 ALB와 NLB를 사용할 것을 권장하고 있다.
GLB(Gateway Load Balancer)
다른 회사의 가상 네트워킹 어플라이언스의 배포, 확장, 실행을 돕는다.
여러 회사의 어플라이언스에 대한 로드 밸런싱 및 자동 조정 기능을 제공한다.
전 세계적으로 분산된 리소스에 대해 지리적 기반 트래픽 라우팅이 필요한 경우 주로 사용된다.
IAM(Identity and Access Management)
AWS 리소스에 접속하는 사용자나 권한을 관리하는 서비스이다.
AWS 관리 콘솔이나 AWS CLI 작업, 혹은 애플리케이션이나 도구를 이용하는 사용자는 사용 형태에 맞는 권한을 가진 IAM 사용자를 생성하여 이용하는 것이 권장된다.
IAM 역할을 생성하여 리소스에 설정함으로써 해당 리소스에 다른 리소스에 대한 접근 권한을 부여할 수 있다.
예를 들어 워커 노드에는 IAM 역할을 통해 ECR에 접속할 수 있는 권한을 부여한다.
EKS 클러스터 구축에는 eksctl을 사용하는 방법과 AWS 관리 콘솔(AWS CLI)을 이용하는 방법이 존재한다.
보통은 eksctl을 사용하여 EKS 환경 구축을 한다.
EKS 클러스터 구축 및 관리를 하기 위한 오픈소스 명령줄 도구이다.
eksctl create cluster
란 명령만으로 EKS 클러스터를 구축할 수 있다.
VPC, 서브넷, 보안 그룹 등 EKS 클러스터를 구축하는 데 필요한 리소스를 한번에 구성할 수 있다.
VPC 등의 기본 리소스를 먼저 생성해두고 EKS 클러스터 구축 시 리소스 ID 설정을 통해 구성할 수도 있다.
EKS 클러스터와 VPC 등의 리소스를 별도로 구축하면 EKS 클러스터를 삭제해도 다른 리소스가 삭제되지 않기 때문에 EKS 클러스터만 재생성하면 다시 작업을 시작할 수 있다.
VPC 등의 기본 리소스는 EKS 클러스터와 별도로 구축하는 것이 구성을 유연하게 할 수 있어 보편적인 방법이다.
AWS 계정에서 여러 VPC를 생성할 수 있지만, 기본적으로 VPC는 독립적인 환경이므로 VPC를 명시적으로 연결하지 않는 한 VPC 간 통신은 할 수 없다.
VPC는 기본적으로 1개의 리전을 선택하여 그 안에 서비스를 구축한다.
가용 영역 여러 개에 리소스를 배포하여 다중화할 시 데이터센터 수준의 장애가 발생해도 정상적인 서비스가 가능하다.
VPC는 서브넷을 사용해 네트워크를 분할하여 관리한다.
서브넷은 가용 영역 여러 개를 동시 사용할 수 없고, 여러 가용 영역을 사용할 경우 서브넷도 그만큼 나눠야 한다.
라우팅 설정은 서브넷 단위로 이루어지며, 퍼블릭 서브넷과 프라이빗 서브넷을 구분하여 운영하는 경우가 많다.
CloudFormation은 AWS에서 인프라를 코드로 관리(Infrastructure as Code, IaC)할 수 있도록 해주는 서비스이다.
CloudFormation을 사용하면 AWS 리소스를 텍스트 형식의 템플릿으로 정의하고, 이 템플릿을 기반으로 AWS 인프라를 자동으로 생성, 업데이트, 삭제할 수 있다.
AWS 리소스는 AWS 관리 콘솔, AWS CLI 등 여러 방법으로 구축이 가능하지만, 여러 리소스를 한번에 구축하고 변경 및 삭제할 때는 CloudFormation이 적합하다.
JSON 또는 YAML 형식으로 리소스 구성을 정의한다.
MyEC2Instance:
Type: "AWS::EC2::Instance"
Properties:
InstanceType: t2.micro
ImageId: ami-0abcdef1234567890
MyS3Bucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: my-bucket
AWS 서비스를 관리하기 위한 웹 사용자 인터페이스이다.
CloudFormation으로 구축한 환경 확인은 AWS 관리 콘솔에서 한다.
AWS가 제공하는 명령줄 도구이다.
파이썬으로 만들어진 도구로 인스톨러가 제공되며 파이썬 패키지 관리 도구인 pip를 이용해 설치할 수 있다.