AWS Cloud Practitioner · Tiếng Việt
Chương 8 / 20

Các dịch vụ Compute khác: Docker, ECS, Fargate, Lambda...

Tìm hiểu về container hóa (Docker, ECS, Fargate, ECR, EKS) và các mô hình compute serverless (Lambda, API Gateway, AWS Batch, Lightsail) trên AWS.

Nội dung chương

  1. Docker là gì?
  2. Docker Repository: Docker Hub & Amazon ECR
  3. Docker so với Virtual Machine
  4. Amazon ECS – Elastic Container Service
  5. AWS Fargate
  6. Amazon EKS – Elastic Kubernetes Service
  7. So sánh ECS, Fargate và EKS
  8. Serverless là gì?
  9. AWS Lambda – Vì sao và như thế nào
  10. Lợi ích & ngôn ngữ hỗ trợ của AWS Lambda
  11. Ví dụ ứng dụng & giá của AWS Lambda
  12. Amazon API Gateway
  13. AWS Batch
  14. Amazon Lightsail

1. Docker là gì?

Docker là một nền tảng phát triển phần mềm (software development platform) dùng để triển khai ứng dụng. Ý tưởng cốt lõi: ứng dụng được đóng gói vào các container — một "hộp" chứa toàn bộ code, thư viện, cấu hình mà ứng dụng cần để chạy — và container này có thể chạy được trên bất kỳ hệ điều hành nào có Docker, mà không cần lo về việc máy đích có cài đúng phiên bản Python/Node/Java hay không.

Lợi ích lớn nhất của Docker: ứng dụng chạy giống nhau bất kể chạy ở đâu — trên máy laptop của bạn, trên server công ty, hay trên AWS — không có vấn đề tương thích (compatibility issues), hành vi có thể dự đoán được (predictable behavior), giảm công sức bảo trì/triển khai. Docker hoạt động với hầu như bất kỳ ngôn ngữ, hệ điều hành, hay công nghệ nào. Một điểm mạnh khác: bạn có thể scale số lượng container lên/xuống rất nhanh — chỉ trong vài giây — vì container nhẹ hơn nhiều so với máy ảo truyền thống.

Ví dụ thực tế: Một team phát triển viết ứng dụng bằng Node.js trên máy Mac, đóng gói thành Docker image. Image này chạy y hệt trên máy Windows của đồng nghiệp, trên server Linux ở công ty, và trên AWS — không còn câu chuyện "chạy được trên máy tôi nhưng không chạy được trên máy anh".

2. Docker Repository: Docker Hub & Amazon ECR

Docker image (bản đóng gói ứng dụng) được lưu trữ trong các "Docker Repository" (kho lưu image). Có hai loại kho chính:

Lưu ý khi thi: Đề thi có thể hỏi "AWS lưu trữ Docker image riêng tư ở đâu?" → câu trả lời là Amazon ECR, không phải Docker Hub (Docker Hub là bên thứ ba, không phải dịch vụ AWS).

3. Docker so với Virtual Machine

Docker là công nghệ có tính chất "ảo hóa" (virtualization) nhưng không hoàn toàn giống với máy ảo (Virtual Machine) truyền thống. Điểm khác biệt căn bản: các container Docker chia sẻ tài nguyên với hệ điều hành máy chủ (host), cho phép chạy nhiều container trên cùng một server mà không cần mỗi container có một hệ điều hành riêng.

So sánh hai mô hình:

Lưu ý khi thi: Docker container không phải là máy ảo — chúng chia sẻ kernel của hệ điều hành host, nhẹ hơn và khởi động nhanh hơn VM rất nhiều.

4. Amazon ECS – Elastic Container Service

ECS (Elastic Container Service) là dịch vụ giúp bạn khởi chạy các container Docker trên AWS. Với ECS, bạn phải tự cấp phát và duy trì hạ tầng — cụ thể là các EC2 instance sẽ đóng vai trò "máy chủ" chạy container. AWS sẽ lo việc khởi động/dừng container trên các instance đó theo cấu hình bạn khai báo, nhưng bạn vẫn chịu trách nhiệm quản lý các EC2 instance bên dưới (số lượng, loại instance, patch OS...). ECS có tích hợp tốt với Application Load Balancer để phân phối traffic tới các container.

5. AWS Fargate

Fargate cũng là dịch vụ để khởi chạy container Docker trên AWS, nhưng khác biệt cốt lõi so với ECS truyền thống: bạn không cần cấp phát hạ tầng — không có EC2 instance nào để bạn phải quản lý. Đây là một offering serverless hoàn toàn — bạn chỉ cần khai báo lượng CPU/RAM mà container cần, và AWS tự động chạy container đó cho bạn ở phía sau. Điều này giúp việc vận hành đơn giản hơn rất nhiều so với việc tự quản lý một fleet EC2 để chạy ECS.

Lưu ý khi thi: ECS chạy trên EC2 do bạn quản lý; Fargate chạy container mà không cần bạn quản lý EC2 nào (serverless). Đề thi hay hỏi: "muốn chạy container mà không muốn quản lý server" → Fargate.

6. Amazon EKS – Elastic Kubernetes Service

EKS (Elastic Kubernetes Service) cho phép bạn khởi chạy các cluster Kubernetes được quản lý trên AWS. Kubernetes là một hệ thống mã nguồn mở dùng để quản lý, triển khai, và scale các ứng dụng đóng gói dạng container (Docker) — về bản chất, Kubernetes giải quyết bài toán tương tự ECS (điều phối container), nhưng là một tiêu chuẩn mở, được dùng rộng rãi trên nhiều nền tảng cloud khác nhau.

Với EKS, các container có thể được host trên EC2 instance hoặc trên Fargate (chế độ serverless). Điểm đặc biệt của Kubernetes: nó là công nghệ cloud-agnostic — nghĩa là bạn có thể dùng Kubernetes trên bất kỳ nền tảng cloud nào (AWS, Azure, GCP) mà không bị "khóa" (lock-in) vào một nhà cung cấp cụ thể. Đây là điểm khác biệt so với ECS — ECS là công nghệ riêng của AWS, chỉ chạy trên AWS.

Ví dụ thực tế: Một công ty có chiến lược "multi-cloud" (đang chạy một phần hạ tầng trên Azure và muốn có khả năng chuyển đổi linh hoạt) sẽ ưu tiên dùng Kubernetes (qua EKS trên AWS) thay vì ECS, vì kỹ năng và cấu hình Kubernetes có thể tái sử dụng trên các cloud khác.

7. So sánh ECS, Fargate và EKS

Ba dịch vụ này thường gây nhầm lẫn cho người mới vì đều liên quan tới việc chạy container Docker. Bảng dưới đây tóm tắt sự khác biệt:

Dịch vụCông nghệ điều phốiCó phải quản lý EC2?Đặc điểm
ECSAWS tự phát triển (proprietary)Có (chạy trên EC2 do bạn quản lý)Chỉ chạy trên AWS, tích hợp chặt với ALB
FargateLà "launch type" của ECS (hoặc EKS)Không — serverless hoàn toànChỉ cần khai báo CPU/RAM, AWS tự vận hành hạ tầng
EKSKubernetes (mã nguồn mở, chuẩn công nghiệp)Có thể chạy trên EC2 hoặc trên FargateCloud-agnostic — dùng được trên AWS, Azure, GCP

Nói ngắn gọn: bạn chọn ECS khi muốn dùng công nghệ điều phối riêng của AWS và không phiền quản lý EC2; chọn Fargate (kết hợp với ECS hoặc EKS) khi muốn bỏ hẳn việc quản lý server; chọn EKS khi tổ chức đã đầu tư vào Kubernetes hoặc cần khả năng di chuyển linh hoạt giữa các cloud.

8. Serverless là gì?

Serverless là một mô hình mới, trong đó developer không còn phải quản lý server nữa — bạn chỉ cần triển khai code, triển khai các hàm (function)! Ban đầu, "Serverless" chủ yếu đồng nghĩa với FaaS (Function as a Service), được AWS Lambda mở đường (pioneer). Ngày nay, khái niệm "serverless" đã mở rộng ra để chỉ bất cứ dịch vụ nào được quản lý hoàn toàn (managed) — bao gồm cả database, messaging, storage.

Cần lưu ý: "serverless" không có nghĩa là không có server nào cả — nó có nghĩa là bạn không cần quản lý, cấp phát, hay nhìn thấy các server đó; AWS lo toàn bộ phần đó phía sau. Trong khóa học này, các dịch vụ bạn đã học như Amazon S3, DynamoDB, Fargate, Lambda đều là các ví dụ điển hình của mô hình serverless/managed.

9. AWS Lambda – Vì sao và như thế nào

Để hiểu vì sao Lambda ra đời, hãy so sánh với EC2: EC2 là các server ảo trên cloud, bị giới hạn bởi RAM/CPU đã chọn, chạy liên tục (continuously running) dù có request hay không, và muốn scale thì cần có sự can thiệp để thêm/xóa server (dù Auto Scaling Group có tự động hóa phần này, vẫn cần cấu hình trước).

AWS Lambda hoạt động theo cách hoàn toàn khác: nó là các "hàm ảo" (virtual functions) — không có server nào để bạn quản lý. Lambda bị giới hạn bởi thời gian (dành cho các tác vụ thực thi ngắn), chỉ chạy khi có nhu cầu (on-demand — không tốn tiền khi không ai gọi tới), và khả năng scale được tự động hoàn toàn — Lambda tự nhân bản để xử lý hàng nghìn request đồng thời mà bạn không cần làm gì.

Lưu ý khi thi: Sự khác biệt cốt lõi: EC2 = trả tiền theo thời gian server chạy (dù có xử lý request hay không); Lambda = chỉ trả tiền khi hàm thực sự được gọi và chạy.

10. Lợi ích & ngôn ngữ hỗ trợ của AWS Lambda

Các lợi ích chính của AWS Lambda:

Về ngôn ngữ hỗ trợ, Lambda có hỗ trợ chính thức (native) cho: Node.js, Python, Java, C# (.NET Core)/PowerShell, Ruby. Ngoài ra còn có Custom Runtime API để cộng đồng hỗ trợ thêm các ngôn ngữ khác (ví dụ Rust, Golang). Lambda cũng hỗ trợ triển khai dưới dạng Lambda Container Image (đóng gói hàm bằng Docker image) — nhưng image đó phải cài đặt đúng Lambda Runtime API; nếu bạn muốn chạy một Docker image tùy ý (arbitrary) không theo chuẩn Lambda, thì ECS/Fargate sẽ là lựa chọn phù hợp hơn.

11. Ví dụ ứng dụng & giá của AWS Lambda

Ví dụ: Tạo Thumbnail không cần server (Serverless Thumbnail creation)

Một ảnh mới được tải lên (push) vào S3 → sự kiện này kích hoạt (trigger) một hàm AWS Lambda → hàm tạo ra một Thumbnail (ảnh thu nhỏ) → hàm đẩy thumbnail mới này lên lại S3, kèm theo các metadata (tên ảnh, kích thước, thời gian tạo...) được lưu vào DynamoDB.

Ví dụ: CRON Job không cần server (Serverless CRON Job)

CloudWatch Events / Amazon EventBridge kích hoạt một hàm AWS Lambda mỗi 1 giờ để thực hiện một tác vụ định kỳ nào đó — ví dụ dọn dẹp dữ liệu tạm, gửi báo cáo tổng hợp, đồng bộ dữ liệu.

Giá của AWS Lambda

Lambda tính phí theo hai thành phần:

Vì cách tính phí này, chi phí chạy Lambda thường rất rẻ đối với các workload không liên tục — đây là lý do Lambda trở nên rất phổ biến cho các tác vụ xử lý theo sự kiện, xử lý ngắn hạn.

Ví dụ thực tế: Một startup dùng Lambda để xử lý webhook thanh toán — mỗi giao dịch chỉ mất khoảng 200ms để xử lý, với vài nghìn giao dịch mỗi ngày, chi phí Lambda hàng tháng gần như bằng 0 vì vẫn nằm trong free tier.

12. Amazon API Gateway

Amazon API Gateway là dịch vụ được quản lý hoàn toàn, giúp developer dễ dàng tạo, công bố (publish), duy trì, giám sát và bảo mật các API. API Gateway là dịch vụ serverless và có khả năng scale tự động, hỗ trợ cả RESTful API và WebSocket API. Dịch vụ này có sẵn các tính năng bảo mật, xác thực người dùng (user authentication), giới hạn tốc độ gọi API (API throttling), quản lý API key, và giám sát.

Một use-case rất phổ biến là xây dựng một serverless API hoàn chỉnh: Client (ví dụ ứng dụng mobile hoặc web) gửi request tới API Gateway (đóng vai trò như một "cổng proxy" nhận và định tuyến request REST) → API Gateway chuyển tiếp request tới Lambda để xử lý logic nghiệp vụ → Lambda đọc/viết dữ liệu vào DynamoDB (thực hiện các thao tác CRUD: Create, Read, Update, Delete).

Lưu ý khi thi: Bộ ba API Gateway + Lambda + DynamoDB là kiến trúc "serverless API" kinh điển hay xuất hiện trong đề thi và trong thực tế — hoàn toàn không cần quản lý một server vật lý/ảo nào.

13. AWS Batch

AWS Batch là dịch vụ xử lý theo lô (batch processing) được quản lý hoàn toàn, có thể chạy ở bất kỳ quy mô nào — từ vài job tới hàng trăm nghìn job tính toán theo lô một cách hiệu quả. Một "batch job" là một tác vụ có điểm bắt đầu và điểm kết thúc rõ ràng (khác với các dịch vụ chạy liên tục không ngừng).

AWS Batch tự động khởi chạy (dynamically) các EC2 instance hoặc Spot Instance để xử lý job, tự tính toán và cấp đúng lượng compute/memory cần thiết. Bạn chỉ cần submit/lên lịch (schedule) các batch job, còn AWS Batch lo toàn bộ phần còn lại. Về bản chất kỹ thuật, các batch job được định nghĩa dưới dạng Docker image và được chạy trên nền ECS phía dưới. AWS Batch giúp tối ưu chi phí và giảm bớt việc phải quan tâm tới hạ tầng.

Luồng xử lý điển hình: một sự kiện Trigger khởi động → AWS Batch tự động cấp phát EC2/Spot Instance (qua ECS) → job xử lý dữ liệu đọc từ S3 → kết quả sau xử lý được ghi (insert) trở lại S3.

So sánh AWS Batch với AWS Lambda

Tiêu chíAWS LambdaAWS Batch
Giới hạn thời gian chạyCó (tối đa 15 phút mỗi lần chạy)Không giới hạn thời gian chạy
RuntimeGiới hạn theo các runtime AWS hỗ trợBất kỳ runtime nào, chỉ cần đóng gói thành Docker image
Dung lượng đĩa tạmGiới hạn (temporary disk space nhỏ)Dựa vào EBS/Instance Store, có thể lớn tùy ý
Hạ tầng phía dướiServerless hoàn toànDựa trên EC2 (có thể được AWS quản lý tự động)
Lưu ý khi thi: Nếu đề bài mô tả một tác vụ xử lý chạy lâu (hàng giờ), cần runtime tùy ý, hoặc cần nhiều dung lượng đĩa → chọn AWS Batch. Nếu tác vụ ngắn, theo sự kiện, không cần quản lý server → chọn Lambda.

14. Amazon Lightsail

Amazon Lightsail cung cấp máy chủ ảo (virtual servers), lưu trữ (storage), database, và networking với mức giá thấp và dễ dự đoán (low & predictable pricing) — tức là bạn trả một mức phí cố định hàng tháng, không cần lo về việc bị "hoá đơn bất ngờ tăng vọt" như khi dùng các dịch vụ tính phí theo mức sử dụng chi tiết.

Lightsail được xem như một phiên bản đơn giản hóa để thay thế cho việc phải kết hợp riêng lẻ EC2, RDS, ELB, EBS, Route 53 — rất phù hợp cho những người ít có kinh nghiệm với cloud nhưng vẫn muốn triển khai nhanh một ứng dụng. Lightsail hỗ trợ thiết lập thông báo (notifications) và giám sát (monitoring) cho các resource của bạn.

Các use-case điển hình:

Lightsail có tính sẵn sàng cao (high availability) nhưng không có auto-scaling, và mức độ tích hợp với các dịch vụ AWS khác cũng hạn chế hơn so với việc dùng EC2/RDS/ELB trực tiếp.

Ví dụ thực tế: Một cá nhân muốn dựng nhanh một website WordPress cho blog cá nhân, không am hiểu sâu về cấu hình EC2/Security Group/RDS — Lightsail cho phép họ khởi tạo một "instance" WordPress chỉ trong vài cú click, với giá cố định hàng tháng dễ dự đoán.

Tổng kết chương

← Chương trước Chương sau →