Dưới đây là một bài blog chi tiết bằng tiếng Việt về các lỗi liên quan đến Amazon DynamoDB thường xuất hiện trong kỳ thi AWS Developer Associate (DVA-C02). Bài viết sẽ tập trung vào các lỗi phổ biến, nguyên nhân, cách khắc phục, và những điểm cần lưu ý khi ôn thi
1. ProvisionedThroughputExceededException
Lỗi Là Gì?
Đây là một trong những lỗi phổ biến nhất khi làm việc với DynamoDB. Lỗi này xảy ra khi số lượng yêu cầu đọc (Read Capacity Units – RCU) hoặc ghi (Write Capacity Units – WCU) vượt quá dung lượng đã cấp phát (provisioned throughput) cho bảng.
Nguyên Nhân
- Dung lượng cấp phát không đủ: Bạn đặt RCU/WCU quá thấp so với nhu cầu thực tế.
- Hot Partition: Một hoặc vài partition nhận quá nhiều yêu cầu do thiết kế khóa phân vùng (partition key) không tối ưu.
- Tăng đột biến: Lưu lượng truy cập tăng đột ngột vượt quá khả năng xử lý.
Cách Khắc Phục
- Tăng dung lượng: Điều chỉnh RCU/WCU thông qua AWS Management Console hoặc CLI.
- Sử dụng Auto Scaling: Bật tính năng Auto Scaling để tự động điều chỉnh dung lượng theo tải.
- Tối ưu hóa khóa phân vùng: Đảm bảo partition key phân phối dữ liệu đều để tránh hot partition.
Mẹo Ôn Thi
Câu hỏi liên quan đến lỗi này thường yêu cầu bạn chọn giải pháp tối ưu (Auto Scaling hay tăng thủ công) hoặc xác định nguyên nhân (hot partition). Hãy nhớ rằng Auto Scaling không phản hồi tức thời, nên trong trường hợp khẩn cấp, tăng thủ công là lựa chọn nhanh hơn.
2. ConditionalCheckFailedException
Lỗi Là Gì?
Lỗi này xảy ra khi một thao tác (thường là PutItem
hoặc UpdateItem
) sử dụng điều kiện (condition expression) nhưng điều kiện không được đáp ứng.
Nguyên Nhân
- Dữ liệu không khớp: Ví dụ, bạn yêu cầu chỉ ghi dữ liệu nếu một thuộc tính không tồn tại, nhưng nó đã tồn tại.
- Cạnh tranh đồng thời: Nhiều yêu cầu cùng cố gắng cập nhật một mục, dẫn đến xung đột.
Cách Khắc Phục
- Kiểm tra logic điều kiện: Đảm bảo condition expression phù hợp với trạng thái dữ liệu.
- Sử dụng khóa phiên bản (versioning): Thêm thuộc tính phiên bản (version attribute) để quản lý cập nhật đồng thời.
- Thử lại (Retry): Triển khai cơ chế thử lại với backoff trong ứng dụng.
Mẹo Ôn Thi
Hãy nắm rõ cách sử dụng condition expressions trong DynamoDB và cách chúng hỗ trợ tính nhất quán (consistency). Câu hỏi có thể yêu cầu bạn viết hoặc phân tích một biểu thức điều kiện.
3. ItemCollectionSizeLimitExceededException
Lỗi Là Gì?
Lỗi này xuất hiện khi kích thước của một tập hợp mục (item collection) trong bảng vượt quá giới hạn 10GB. Điều này thường xảy ra với bảng có Local Secondary Index (LSI).
Nguyên Nhân
- Thiết kế không tối ưu: Một partition key có quá nhiều mục liên quan đến cùng một giá trị trong LSI.
- Dữ liệu lớn: Thêm quá nhiều dữ liệu vào một tập hợp mục mà không tính toán giới hạn.
Cách Khắc Phục
- Sử dụng Global Secondary Index (GSI): GSI không có giới hạn 10GB như LSI, phù hợp với dữ liệu lớn hơn.
- Tái cấu trúc dữ liệu: Chia nhỏ dữ liệu thành nhiều partition key để tránh tập trung.
Mẹo Ôn Thi
Hãy phân biệt rõ ràng giữa LSI và GSI. Câu hỏi thường yêu cầu bạn chọn giải pháp thay thế khi gặp lỗi này, và GSI thường là đáp án đúng.
4. AccessDeniedException
Lỗi Là Gì?
Lỗi này xảy ra khi ứng dụng hoặc người dùng không có quyền truy cập vào bảng DynamoDB hoặc thực hiện thao tác cụ thể.
Nguyên Nhân
- IAM Policy không đúng: Quyền truy cập chưa được cấp trong chính sách IAM.
- Thiếu quyền Stream: Nếu bạn cố truy cập DynamoDB Streams mà không có quyền
dynamodb:DescribeStream
hoặcdynamodb:GetRecords
.
Cách Khắc Phục
- Kiểm tra IAM Policy: Đảm bảo chính sách IAM cấp quyền phù hợp (ví dụ:
dynamodb:PutItem
,dynamodb:GetItem
). - Sử dụng Least Privilege: Chỉ cấp quyền cần thiết để tránh rủi ro bảo mật.
Mẹo Ôn Thi
Câu hỏi về lỗi này thường liên quan đến IAM và yêu cầu bạn xác định quyền bị thiếu trong một kịch bản cụ thể. Hãy ôn kỹ các hành động DynamoDB trong IAM (PutItem, GetItem, Scan, Query, v.v.).
5. ValidationException
Lỗi Là Gì?
Lỗi này xảy ra khi yêu cầu gửi đến DynamoDB không hợp lệ, thường liên quan đến cú pháp hoặc định dạng dữ liệu.
Nguyên Nhân
- Thiếu thuộc tính bắt buộc: Ví dụ, không cung cấp partition key trong yêu cầu
GetItem
. - Dữ liệu không đúng kiểu: Gửi dữ liệu kiểu chuỗi (String) vào thuộc tính yêu cầu kiểu số (Number).
- Cú pháp sai: Sử dụng biểu thức điều kiện hoặc truy vấn không đúng cú pháp.
Cách Khắc Phục
- Kiểm tra tài liệu API: Xem kỹ yêu cầu của từng thao tác trong tài liệu DynamoDB.
- Validate dữ liệu: Đảm bảo dữ liệu đầu vào khớp với schema của bảng.
Mẹo Ôn Thi
Hãy làm quen với các tham số bắt buộc của các thao tác như Query
, Scan
, và PutItem
. Câu hỏi có thể yêu cầu bạn phát hiện lỗi trong một đoạn mã mẫu.
6. Throttling Với DynamoDB Streams
Lỗi Là Gì?
Khi tích hợp DynamoDB Streams với Lambda, bạn có thể gặp lỗi throttling nếu Lambda không xử lý kịp các bản ghi từ stream.
Nguyên Nhân
- Tải cao: Stream tạo ra quá nhiều bản ghi trong thời gian ngắn.
- Cấu hình Lambda yếu: Concurrent execution limit của Lambda bị vượt quá.
Cách Khắc Phục
- Tăng giới hạn Lambda: Điều chỉnh concurrency limit hoặc reserved concurrency cho hàm Lambda.
- Batch Size: Giảm số lượng bản ghi xử lý trong mỗi lần gọi Lambda (batch size).
Mẹo Ôn Thi
Ôn kỹ cách DynamoDB Streams tích hợp với Lambda và các tham số như batch size, batch window. Đây là điểm thường xuất hiện trong bài thi.
Lưu Ý Khi Ôn Thi DVA-C02
- Hiểu rõ thông điệp lỗi: Mỗi lỗi có một thông điệp cụ thể (như “ProvisionedThroughputExceededException”) – hãy làm quen với chúng.
- Kịch bản thực tế: Câu hỏi thường đưa ra tình huống (ví dụ: ứng dụng bị chậm, truy vấn thất bại) và yêu cầu bạn chọn giải pháp.
- Thực hành: Sử dụng AWS Free Tier để tạo bảng DynamoDB, bật Streams, và thử gây ra các lỗi trên để hiểu cách xử lý.
Kết Luận
Hiểu các lỗi liên quan đến DynamoDB là một phần quan trọng để vượt qua kỳ thi AWS DVA-C02. Từ ProvisionedThroughputExceededException đến ConditionalCheckFailedException, mỗi lỗi đều có nguyên nhân và cách khắc phục riêng. Khi ôn thi, hãy tập trung vào việc nhận diện lỗi, phân tích kịch bản, và chọn giải pháp tối ưu. Đừng quên thực hành thực tế để củng cố kiến thức!
Chúc bạn ôn thi hiệu quả và đạt kết quả cao trong kỳ thi AWS Developer Associate!