[DEV] AWS 클라우드
기술을 왜 써야하는지 논리를 갖고 사용해야 함!
1. Container
- container
- code
- dependencies
- runtime
-
그냥 EC2에 올려서 써도 되는데, 왜 컨테이너를 써야하는가
- 여러 모듈, 환경들을 내 로컬에 설치해서 개발을 하게 될 것
- 내가 개발한 결과 파일을 배포할 것
- 서버 개수가 적다면 서버 환경을 내 로컬과 똑같이 맞춰줄 수 있음
- 그렇지만 서버마다 환경을 모두 맞출 수 없음, 다 맞춰줘도 안되는 서버들이 있을 수 있음
- 다른 개발자, 어플리케이션 등의 영향을 받을 수 있기 때문
- 실패 요인
- 리눅스 버전
- 라이브러리 버전
- 빌드 환경
- JVM 환경 등등
- 내 환경 그대로 배포하면 좋겠다! -> 컨테이너
- 현재 추세는 MSA화
AWS Container services
- ECS에 docker 파일만 업로드하면 쉽게 배포할 수 있음
- docker -> 필요한 애플리케이션만
- 많아진 컨테이너 관리를 위해 필요한 기술이 K8s -> EKS로 관리 (serverless)
Docker
- Image
- 컨테이너를 생성할 때 필요한 요소
- 컨테이너의 목적에 맞는 binary와 dependencies가 설치되어 있음
- 여러 개의 계층으로 된 바이너리 파일 존재
- Container
- 호스트와 다른 컨테이너들로부터 격리된 시스템 자원과 네트워크를 사용하는 프로세스
- 이미지는 읽기 전용으로 사용하여 변경사항은 컨테이너 계층에 저장
- 컨테이너에서 무엇을 하든 이미지는 영향 받지 않음
- Docker File -[build]-> Docker Image -[run]-> Docker Container
DockerFile 예시
# base image로 python runtime 사용
FROM python:3.7-alpine
# working directory를 /app으로 설정
WORKDIR /app
# 현재 디렉토리의 컨텐츠들을 /app에 컨테이너로 복사
ADD . /app
# requirements.txt에 있는 필요한 패키지들 설치
# RUN: 이미지가 올라갔을 때 수행되는 명령어들
RUN pip install -r requirements.txt
# apache는 기본적으로 80포트 사용
# apache server로 접근 가능하게 함
EXPOSE 80
# 컨테이너가 론치될 때 gunicorn 실행
CMD gunicorn -w 4 app:app -b 0.0.0.0:80
Kubernetes
- 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장 가능한 오픈소스 프로그램
- 선언적 구성과 자동화를 모두 용이하게 해주는 컨테이너 오케스트레이션 툴
- 서비스 디스커버리와 로드밸런싱
- DNS를 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있음
- 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있음
- 자동화된 롤아웃과 롤백
- 배포된 컨테이너의 원하는 새로운 버전으로 배포하는 롤아웃과 이전 버전으로 되돌리는 롤백 기능 제공
- 자동화된 복구
- 실패한 컨테이너를 다시 시작하고 컨테이너를 교체함
- 서비스 준비가 끝날 때까지 이상이 있는 클라이언트에 서비스하지 않음
- 스토리지 오케스트레이션
- 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재
- Control-plane: 중앙 컨트롤
- API Server : 클러스터의 API를 사용할 수 있도록 하는 컨트롤 플레인 컴포넌트
Kubectl
명령어는 이 API Server를 호출- 관리해야 할 컨테이너, 이미지 등을 주기적으로 모니터링하면서 노드를 관리함!
- Scheduler : 클러스터의 자원 할당이 가능한 노드 중 알맞은 노드를 선택해서 새로운 파드를 실행해줌
- Controller Manager : 노드 유지, 파드 유지, 클라우드 서비스 생성 및 삭제 등
- API Server : 클러스터의 API를 사용할 수 있도록 하는 컨트롤 플레인 컴포넌트
- Data-plane: 컨테이너 이미지들이 들어있는 노드들
서비스 배포 -> 각 노드들로 들어가게 됨 (이미지)
pod 중심으로 돌아감
Amazon EKS
- 설치 방법
- AWS Console
- AWS CLI
- eksctl
- Terraform
- eksctl
eksctl create cluster \
--name eks-test \
--region ap-southeast-1 \
--version 1.14 \
--managed \
--asg-access
Node group에 대해 어떻게 관리할건지만 등록해주면 간단하게 사용 가능!
EKS가 control-plane이 되는 느낌
2. IAM
- 역할: 정책의 묶음
- 정책은 사용자나 그룹에 부여
-
역할은 서비스에 부여
- 서비스 사용을 위해 IAM 정책을 부여해야 함!!
- 많이 발생하는 에러 중 하나
- IAM 사용자
- 실 사용자 기준으로 통제할 때
- IAM 사용자 (상시 자격증명)으로 인증
- 주로 IAM Group으로 관리
- IAM 역할
- 자동화된 프로세스에서
- AWS 서비스들에서
- 인증 연계된 외부 사용자들이
- 임시 자격증명으로 인증
정책 구성 요소
3. Cloud 9
- 브라우저만으로 코드를 작성, 실행 및 디버깅할 수 있는 클라우드 기반 IDE
- 코드 편집기, 디버거, 터미널이 포함되어 있음
- 새로운 프로젝트를 시작하기 위해 파일을 설치하거나 개발 머신을 구성할 필요가 없음