🐳 Docker
도커는 앱을 배포하기 위한 소프트웨어 개발 플랫폼이다.
도커에서 앱들은 어떠한 운영체제에서도 작동이 가능한 컨테이너로 패키징되어있으며,
컨테이너에서 한 번 실행되면 어디서 실행되던 같은 방식으로 실행되므로 호환성 문제가 없고,
실행 결과가 예측 가능하며 작업량이 줄고 유지와 배포가 쉽다.
또한 도커를 이용해 컨테이너의 스케일을 매우 빠르게 변경할 수 있다.
도커 이미지는 도커 저장소라는 곳에 저장되며,
public 저장소인 도커 허브에서는 기본 도커 이미지를 찾아 사용할 수 있고,
private 저장소로는 Amazon ECR을 사용할 수 있다.
Docker 🆚 Virtual Machines
도커는 일종의 시각화 기술이지만, 정확히는 아니다.
리소스는 호스트와 공유되며, 이는 한 서버에 많은 컨테이너를 가질 수 있다는 것이다.
📦 ECS
ECS는 Elastic Container Service의 약어로, 도커 컨테이너를 AWS에서 실행하는 데 사용된다.
ECS를 사용하기 위해서는 사용자가 직접 인프라를 공급하고 유지해야 하며,
이는 곧 사전에 EC2 인스턴스를 만들어야 한다는 의미이다.
AWS는 컨테이너를 시작하거나 멈추는 것을 관리하며, 애플리케이션 부하 분산기와 통합이 가능하다.
📦 Fargate
Fargate 또한 도커 컨테이너를 AWS에서 실행하는 데 사용된다.
Fargate를 사용하기 위해서는 사용자가 직접 인프라를 공급하고 유지할 필요가 없으며,
이는 곧 EC2 인스턴스 관리가 필요 없다는 의미이다.
AWS는 사용자가 필요로 하는 CPU / RAM에 기반해 각 컨테이너를 실행시킨다.
Fargate는 서버리스 서비스이기도 하다.
💾 ECR
ECR은 Elastic Container Registry의 약어로, AWS의 private 도커 저장소이다.
도커 이미지를 저장함으로써 그들이 ECS나 Fargate에서 실행 가능하게끔 해준다.
🛜 Serverless
서버리스란 개발자들이 더는 서버를 관리하지 않는다는 새로운 패러다임이다.
개발자들은 서버리스를 통해 코드나 기능만 배포하게 된다.
초창기 서버리스는 FaaS로, AWS Lambda에 의해 개척된 영역이었으나
현재는 데이터베이스, 메시징, 저장 등 관리되는 모든 것들을 포함된다.
서버리스라고해서 서버가 없다는 것은 아니고, 서버를 관리하거나 공급할 필요가 없다는 것이다.
ƛ AWS Lambda
EC2 인스턴스를 사용하는 경우 클라우드에 가상 서버가 있지만,
제공되는 RAM이나 CPU에 제한이 있고 사용하지 않을 때도 작동하게 되며,
스케일링시 서버를 추가하거나 제거해야 하므로 복잡할 수 있다.
이런 문제들로 인해 Lambda가 등장하게 되었다.
Lambda는 서버가 없고 가상 함수만이 존재하므로, 서버를 관리할 필요가 없다.
또한 시간에 의해 제한되므로 짧은 실행에 쓰이며 수요에 따라 작동하게 되는데,
이 말은 가상 함수를 실행할 때마다 기능이 작동된다는 것이다.
스케일링 작업은 자동화 되어있다.
👍🏻 Lambda의 장점
- 요청이나 컴퓨팅 시간만큼만 지불하기 때문에 가격 측정이 쉽다.
- 무료 등급에서 제공되는 사용량이 굉장히 많다.
- 모든 AWS 서비스와 통합되어있다.
- 필요로 하는 경우에만 함수가 호출되는 이벤트 중심의 반응형 서비스이다.
- 많은 프로그래밍 언어와 통합되어있다.
- AWS CloudWatch를 통해 쉽게 모니터링이 가능하다.
- 함수별로 쉽게 더 많은 리소스를 사용할 수 있다.
- RAM을 증가시키면 CPU 성능과 네트워크 품질도 향상된다.
🧑🏻💻 Lambda가 지원하는 프로그래밍 언어
- Node.js (javascript)
- Python
- Java
- C# (.NET Core)
- Golang
- C# / Powershell
- Ruby
- Custom Runtime API
- Lambda Container Image (컨테이너 이미지들은 반드시 Lambda 런타임 API를 구현해야 한다)
💰 Lambda 가격 정책
- Pay per calls : 첫 백만개의 요청은 무료이며, 이후로는 백만개당 0.2달러를 지불하게 된다.
- Pay per duration : 매 월 1GB당 40만 초의 컴퓨팅 시간은 무료이며, 이후로 1GB당 60만 초마다 1달러를 지불하게 된다.
따라서 AWS Lambda를 사용하는 것은 대체로 저렴하며,
이는 Lambda가 매우 인기있는 서비스인 이유이기도 하다.
🚪 Amazon API Gateway
Amazon API Gateway는 개발자들의 쉬운 제작, 게시, 유지, 모니터링과
보안 API를 위한 완전관리형 서비스로, 확장 가능한 서버리스 서비스이다.
RESTful API와 WebSocket API를 지원하며,
보안, 사용자 인증, API 스로틀링, API 키, 모니터링 기능을 지원한다.
🧑🏻💻 AWS Batch
Batch는 어떤 규모에서든 일괄 처리가 가능하도록 해주는 완전관리형 서비스로,
이를 이용하면 AWS에서 수십만개의 일괄 처리 작업 컴퓨팅을 쉽게 실행할 수 있다.
일괄 처리 작업은 동적으로 EC2 인스턴스나 스팟 인스턴스를 실행하게 되며,
AWS Batch는 이 때 적당한 양의 연산과 메모리를 공급한다.
사용자가 일괄 처리 작업을 계획하거나 제출하면, AWS Batch가 나머지 작업을 처리해준다.
이 때, 일괄 처리 작업은 도커 이미지로 정의되며 ECS에서 실행된다.
AWS Batch는 비용 최적화와 사용자가 인프라에는 덜 집중하도록 하는 것에 유용하다.
Batch 🆚 Lambda
Lambda
- 시간 제한이 있음
- 런타임 제한이 있음
- 임시 디스크 공간이 제한됨
- 서버리스 서비스임
Batch
- 시간 제한이 없음
- 도커 이미지로 패키징되어 있다면, 어떤 런타임도 가능함
- 디스크 공간은 EBS나 인스턴스 스토어에 의존함
- EC2에 의존함
🕯️ Amazon Lightsail
Amazon Lightsail을 사용하면 서버, 저장소, DB, 네트워킹을 가상으로 사용할 수 있으며,
매우 저렴한 예측 가능한 비용을 지불하게 된다.
EC2, RDS, ELB, EBS, Route 53을 사용하는 것보다 훨씬 쉬운 대안이므로,
또한 클라우드 경험이 매우 적은 사람들에게 아주 좋은 서비스이다.
Lightsail 리소스를 모니터링 할 수 있으며, 알림 설정도 가능하다.
간단한 웹 애플리케이션 및 웹사이트 배포나, 개발/테스트 환경에 사용되며,
고가용성을 지니지만 자동 스케일링 기능이 없고, AWS와의 통합이 제한되어 있다.