17. Các Cấu hình EC2 Hữu ích



Bài này giới thiệu một số cấu hình hữu ích cho EC2, giúp quản lý, tối ưu thời gian triển khai, hiệu năng, khả năng chịu lỗi, gồm Amazon Machine Image (AMI), Placement Group, EC2 Metadata, và EC2 User Data.

Trong bài này:

1. Amazon Machine Image (AMI)

Có thể hiểu AMI là một snapshot của một EC2 Instance, gồm hệ điều hành, cấu hình, các phần mềm, ứng dụng, và dữ liệu trên ổ EBS gắn kèm. AMI cho phép nhanh chóng khởi tạo các Instance mới với cấu hình giống hệt Instance gốc (thuật ngữ gọi là AMI baking).

Mỗi AMI được lưu trong một Region, và chỉ có thể sử dụng để khởi tạo Instance trong cùng Region. Nếu muốn tạo Instance ở Region khác, cần sao chép AMI sang Region đó.

Một khi AMI đã được tạo, không thể thay đổi nó. Để cập nhật AMI, cần khởi tạo một Instance từ AMI đó, thực hiện các thay đổi cần thiết trên Instance, rồi lại tạo AMI mới từ Instance đó.

Bản chất khi tạo AMI, AWS sẽ tạo EBS snapshot của tất cả các ổ EBS gắn kèm Instance gốc, rồi sử dụng các snapshot này để tạo các ổ EBS mới khi tạo Instance từ AMI. Do đó, dữ liệu trên các ổ EBS của Instance mới sẽ giống hệt dữ liệu trên ổ EBS của Instance gốc tại thời điểm tạo AMI. Tốt nhất nên stop (dừng) EC2 Instance trước khi tạo AMI từ Instance đó, để đảm bảo dữ liệu trên ổ EBS được đồng bộ hoàn toàn. Nếu tạo AMI khi Instance đang chạy (running), có khả năng dữ liệu không nhất quán khi khởi tạo Instance mới từ AMI này.

AWS cung cấp sẵn nhiều AMI phổ biến, như các AMI chạy Linux (Amazon Linux, Ubuntu, CentOS, v.v.), Windows Server, v.v. Ngoài ra, có thể tìm và sử dụng các AMI do bên thứ ba cung cấp trên AWS Marketplace.

2. Placement Group

Là cấu hình vị trí đặt EC2 Instance trên phần cứng vật lý, nhằm tối ưu độ trễ và băng thông mạng giữa các Instance. Có 3 loại Placement Group:

2.1. Cluster

Cluster Placement Group

Đây là cấu hình tối ưu hiệu năng, bằng cách đặt các Instance gần nhau, trên cùng một Host hoặc ít nhất cũng trên các Host nằm cùng một server rack. Các Instance trong Cluster được kết nối trực tiếp với nhau, tốc độ truyền tải dữ liệu rất cao, tới 10 Gbps, so với kết nối theo cách thông thường là cỡ 5 Gpbs.

Cluster Placement Group chỉ có thể được đặt trong một AZ, là AZ của Instance đầu tiên được khởi tạo trong nhóm. Do đó, hạn chế lớn là không có khả năng chịu lỗi khi AZ gặp sự cố.

Tốt nhất nên sử dụng cùng loại Instance, và khởi tạo các Instance trong Cluster Placement Group cùng lúc, để AWS quyết định phân bổ phần cứng hợp lý nhất. Khi thêm một Instance mới vào Cluster Placement Group đã có các instance đang chạy, có thể gặp lỗi thiếu tài nguyên (capacity error, tức Host đã cấp phát gần hết tài nguyên vCPU, RAM, v.v., không đủ cho Instance mới). Trong trường hợp này, hãy dừng (stop) và khởi động lại (start) tất cả các Instance, sau đó thử khởi tạo lại toàn bộ. Việc này sẽ di chuyển tất cả sang phần cứng khác mạnh hơn.

Cấu hình này phù hợp cho các ứng dụng cần truyền tải dữ liệu lớn tốc độ cao giữa các Instance, như High Performance Computing (HPC), Machine Learning, Big Data, v.v.

2.2. Spread

Spread Placement Group

Đây là cấu hình tối ưu khả năng chịu lỗi, bằng cách đặt các Instance trên các server rack khác nhau. Mỗi rack có nguồn điện và mạng riêng biệt, giúp giảm rủi ro cùng lúc bị lỗi.

Spread Placement Group có thể trải trên nhiều AZ cùng một Region. Mỗi AZ chỉ có thể chứa tối đa 7 Instance thuộc cùng Spread Placement Group, và không hỗ trợ Dedicated Instance. Số Instance tối đa trong một Spread Placement Group phụ thuộc số lượng AZ trong Region.

Nên dùng Spread Placement Group cho các ứng dụng có một vài Instance quan trọng, cần tách biệt với nhau để giảm rủi ro cùng lúc bị lỗi do dùng chung phần cứng.

2.3. Partition

Partition Placement Group

Là cấu hình kết hợp giữa Cluster và Spread Placement Group. Các Instance được chia thành các phân vùng (partition), mỗi phân vùng được đặt trên các server rack khác nhau, các Instance trong cùng phân vùng được đặt trên cùng rack.

Partition Placement Group cũng có thể trải trên nhiều AZ cùng một Region. Mỗi AZ có thể chứa tối đa 7 phân vùng, mỗi phân vùng có thể chứa số Instance tuỳ ý (miễn nằm trong giới hạn của tài khoản AWS). Khi khởi tạo Instance trong Partition Placement Group, AWS sẽ cố phân bổ đều Instance vào các phân vùng (nhưng không đảm bảo). Ngoài ra, hỗ trợ Dedicated Instance, nhưng chỉ cho phép tối đa 2 phân vùng trong một Partition Placement Group có chứa Dedicated Instance.

Partition Placement Group thường được dùng cho các hệ thống phân tán lớn, như Apache HDFS, Cassandra, v.v., có khả năng chịu lỗi cao hơn so với Cluster Placement Group, đồng thời vẫn giữ được hiệu năng tốt cho các Instance trong cùng phân vùng.

3. EC2 Metadata

Là một dịch vụ nội bộ của EC2, cung cấp thông tin về Instance cho các ứng dụng chạy bên trong Instance đó.

Metadata có thể truy xuất qua địa chỉ http://169.254.169.254/latest/meta-data/<trường-cần-truy-vấn>, trong đó <trường-cần-truy-vấn> là tên trường muốn lấy thông tin, được liệt kê dưới đây (không đầy đủ):

ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
managed-ssh-keys/
metrics/
network/
placement/
profile
public-hostname
public-ipv4
reservation-id
security-groups
services/
user-data

Ví dụ, có thể truy xuất ID của Instance bằng lệnh sau, chạy command line bên trong Instance:

curl http://169.254.169.254/latest/meta-data/instance-id

Ví dụ kết quả trả về:

i-0335b131e99940d46

Việc có thể truy vấn Metadata từ bên trong Instance rất hữu ích, giúp các ứng dụng bên trong tự động cấu hình dựa trên thông tin môi trường mà không cần cung cấp thủ công.

4. EC2 User Data

Dùng để tự động hoá việc cấu hình và cài đặt phần mềm khi khởi tạo EC2 Instance. User Data chỉ là một đoạn mã lệnh (shell script với Linux, PowerShell cho Windows) được cung cấp khi tạo Instance, sẽ được thực thi trong lần khởi động đầu tiên của Instance. Quá trình này gọi là bootstrapping.

Các lệnh phổ biến thường là cài đặt phần mềm, cập nhật hệ điều hành, thiết lập cấu hình mạng, v.v. Ví dụ, đoạn User Data dưới đây cài đặt Ngnix server trên một Instance chạy Linux khi khởi tạo:

#!/bin/bash
apt-get update
apt-get install -y nginx
systemctl start nginx
systemctl enable nginx
echo "<h1>Hello from AWS Co Ban</h1>" > /var/www/html/index.html

Người dùng cung cấp User Data khi tạo Instance, qua giao diện, CLI, hay SDK, hay thậm chí CloudFormation init.

Một vài lưu ý:

  • User Data phải được mã hoá base64. Nếu cung cấp User Data trên giao diện khi tạo Instance, AWS có thể tự động mã hoá base64 nếu dữ liệu chưa được mã hoá. Khi truy xuất qua Metadata, AWS sẽ tự động giải mã base64 cho User Data.
  • User Data có thể dài tối đa 16 KB. Nếu cần thực thi nhiều lệnh hơn, có thể lưu mã lệnh trên S3 hoặc GitHub, rồi trong User Data chỉ cần tải và chạy mã lệnh đó.
  • Truy xuất User Data bằng cách curl từ http://169.254.169.254/latest/user-data. IP này là IP của Metadata đã đề cập ở trên.
  • User Data là thuộc tính của Instance, không được lưu trên ổ EBS. Do đó, nếu tạo AMI từ Instance, User Data sẽ không được đưa vào AMI đó (nhưng cấu hình và phần mềm được thiết lập bằng User Data vẫn được giữ lại).
  • User Data có thể thay đổi sau khi dừng Instance, tuy nhiên, mặc định chỉ được thực thi một lần duy nhất, trong lần khởi động đầu tiên của Instance. Nếu muốn thực thi lại mỗi lần khởi động, cần cấu hình phức tạp hơn, tham khảo bài viết này.

Tài liệu tham khảo

  1. Amazon Machine Image (AMI)
  2. Các chiến lược Placement Group trong EC2
  3. Truy cập Metadata
  4. Sử dụng User Data để khởi tạo Instance

Tiếp theo, hãy tìm hiểu cách giám sát các tài nguyên và dịch vụ AWS, bao gồm EC2, với CloudWatch.

Nếu có câu hỏi, bạn có thể nhắn mình trên fanpage hoặc group. Cảm ơn bạn.