Ngân hàng đề — AWS Certified Developer Associate

Tìm thấy 1356 câu.

Câu 1081
A developer creates a static website for their department. The developer deploys the static assets for the website to an Amazon S3 bucket and serves the assets with Amazon CloudFront. The developer uses origin access control (OAC) on the CloudFront distribution to access the S3 bucket.

The developer notices users can access the root URL and specific pages but cannot access directories without specifying a file name. For example, /products/index.html works, but /products/ returns an error. The developer needs to enable accessing directories without specifying a file name without exposing the S3 bucket publicly.

Which solution will meet these requirements?
  1. A Update the CloudFront distribution's settings to index.html as the default root object is set.
  2. B Update the Amazon S3 bucket settings and enable static website hosting. Specify index.html as the Index document. Update the S3 bucket policy to enable access. Update the CloudFront distribution's origin to use the S3 website endpoint.
  3. C Create a CloudFront function that examines the request URL and appends index.html when directories are being accessed. Add the function as a viewer request CloudFront function to the CloudFront distribution's behavior.
  4. D Create a custom error response on the CloudFront distribution with the HTTP error code set to the HTTP 404 Not Found response code and the response page path to /index.html. Set the HTTP response code to the HTTP 200 OK response code.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi xoay quanh việc triển khai website tĩnh trên Amazon S3 kết hợp Amazon CloudFront sử dụng Origin Access Control (OAC) để bảo mật bucket S3 (không public).
✅ Vấn đề cụ thể: Người dùng có thể truy cập root URL (ví dụ: /) hoặc đường dẫn đầy đủ file (như /products/index.html), nhưng không truy cập được thư mục (như /products/ → trả về lỗi).
🛠️ Yêu cầu: Bật tính năng truy cập thư mục (tự động resolve index.html) mà không expose S3 bucket public (giữ nguyên OAC).
📘 Bối cảnh AWS (cập nhật 2026): Với OAC (ra mắt 2022, thay thế OAI), CloudFront dùng REST API endpoint của S3 (không phải website endpoint). S3 REST không tự hỗ trợ "directory indexing" như website hosting, nên cần xử lý ở CloudFront layer để rewrite URL.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Create a CloudFront function that examines the request URL and appends index.html when directories are being accessed. Add the function as a viewer request CloudFront function to the CloudFront distribution's behavior.

Lý do:

  • 🛠️ CloudFront Functions (lightweight JS, ra mắt 2020, cập nhật 2026 hỗ trợ viewer/origin request/response) chạy ở edge location, kiểm tra URL request (viewer request event). Nếu kết thúc bằng /, tự append index.html (ví dụ: /products/ → /products/index.html).
  • ✅ Giữ nguyên OAC: Không thay đổi S3 policy/bucket, không public, chỉ rewrite trước khi forward đến S3 REST endpoint.
  • 🚀 Hiệu suất cao, rẻ hơn Lambda@Edge (không cần runtime đầy đủ).
  • Dẫn nguồn: AWS CloudFront Functions Docs & OAC Guide.

❌ Phân tích tất cả các phương án (đúng/sai)

  • Phương án A (SAI): Update the CloudFront distribution's settings to index.html as the default root object is set.
    ❌ Lý do sai: "Default root object" chỉ áp dụng cho root path (/), không xử lý subdirectories như /products/. Người dùng vẫn lỗi khi truy cập thư mục con. Không giải quyết vấn đề gốc.

  • Phương án B (SAI): Update the Amazon S3 bucket settings and enable static website hosting. Specify index.html as the Index document. Update the S3 bucket policy to enable access. Update the CloudFront distribution's origin to use the S3 website endpoint.
    ❌ Lý do sai:

  • Phương án C (ĐÚNG): Create a CloudFront function that examines the request URL and appends index.html when directories are being accessed. Add the function as a viewer request CloudFront function to the CloudFront distribution's behavior.
    ✅ Lý do đúng: Như phần trên, rewrite URL động ở edge (viewer request), tự append index.html cho mọi thư mục kết thúc /. Hoàn hảo với OAC, zero-config S3, scale global.

  • Phương án D (SAI): Create a custom error response on the CloudFront distribution with the HTTP error code set to the HTTP 404 Not Found response code and the response page path to /index.html. Set the HTTP response code to the HTTP 200 OK response code.
    ❌ Lý do sai: Custom error chỉ catch 404 từ S3 và redirect đến root /index.html (không phải /products/index.html). Ví dụ: /products/ → 404 → serve /index.html (sai nội dung). Không rewrite đúng path, chỉ mask lỗi thô.

Câu 1082
A developer is testing a RESTful application that is deployed by using Amazon API Gateway and AWS Lambda. When the developer tests the user login by using credentials that are not valid, the developer receives an HTTP 405: METHOD_NOT_ALLOWED error. The developer has verified that the test is sending the correct request for the resource.

Which HTTP error should the application return in response to the request?
  1. A HTTP 401
  2. B HTTP 404
  3. C HTTP 503
  4. D HTTP 505
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi mô tả tình huống thực tế trong phát triển ứng dụng RESTful trên AWS:
Một lập trình viên đang kiểm tra ứng dụng RESTful được triển khai bằng Amazon API Gateway kết nối với AWS Lambda. Khi test chức năng đăng nhập người dùng (user login) bằng credentials không hợp lệ (tài khoản/mật khẩu sai), lập trình viên nhận được lỗi HTTP 405: METHOD_NOT_ALLOWED. Lập trình viên đã xác nhận rằng request gửi đi đúng cho resource (nghĩa là method HTTP, path, headers cơ bản đều chính xác).

Vấn đề cốt lõi: Lỗi 405 đang xảy ra không đúng ngữ cảnh (vì 405 chỉ dùng khi method HTTP không được hỗ trợ cho resource đó, nhưng dev đã verify request đúng). Câu hỏi yêu cầu xác định HTTP error code phù hợp nhất mà ứng dụng nên trả về cho trường hợp credentials invalid trong request login.

Đây là tình huống phổ biến khi xử lý authentication/authorization trong API Gateway (sử dụng Lambda Authorizer hoặc IAM/Cognito integration). Theo best practices AWS (cập nhật đến 2026), ứng dụng cần return status code chuẩn theo HTTP/1.1 semantics (RFC 7231) để client dễ xử lý lỗi.

✅ Đáp án đúng: HTTP 401

Lý do lựa chọn:
HTTP 401 Unauthorized là status code chuẩn cho trường hợp credentials không hợp lệ hoặc thiếu (invalid/missing authentication). Trong API Gateway + Lambda, khi login request dùng method POST (thường gặp), nếu auth thất bại (ví dụ: JWT token hết hạn, username/password sai), Lambda function nên return 401 kèm header WWW-Authenticate để yêu cầu client cung cấp credentials mới. Lỗi 405 hiện tại là sai vì request method đã đúng, vấn đề nằm ở xác thực (authentication) chứ không phải method không hỗ trợ. Sửa bằng cách implement proper error handling trong Lambda code hoặc API Gateway mapping.

🛠️ Giải thích tất cả các phương án (đúng/sai)

  • HTTP 401
    ✅ Đúng. Đây là code chuẩn cho authentication failure (credentials invalid). API Gateway/Lambda sẽ return 401 khi Lambda Authorizer reject request do token/user sai. Theo AWS docs, ưu tiên 401 trước 403 để phân biệt auth vs authorization. Không dùng 405 vì method đã đúng.

  • HTTP 404
    ❌ Sai. HTTP 404 Not Found dùng khi resource/path không tồn tại (ví dụ: endpoint /login không deploy). Ở đây dev verify request đúng resource, vấn đề là credentials → 404 không phù hợp, có thể confuse client nghĩ path sai.

  • HTTP 503
    ❌ Sai. HTTP 503 Service Unavailable dành cho server tạm thời overload/down (throttling, Lambda cold start quá lâu, hoặc backend DB unavailable). Không liên quan đến credentials invalid; dùng 503 sẽ làm client retry vô ích thay vì fix auth.

  • HTTP 505
    ❌ Sai. HTTP 505 HTTP Version Not Supported hiếm dùng, chỉ khi client gửi HTTP version server không hỗ trợ (ví dụ: HTTP/2 trên endpoint chỉ hỗ trợ 1.1). API Gateway hỗ trợ đầy đủ HTTP/1.1 và 2.0 (cập nhật 2024+), không phải lỗi auth hay method.

📘 Tài liệu tham khảo (AWS & chuẩn mới nhất 2026)

  • AWS API Gateway Developer Guide: Error mapping và HTTP status codes – Khuyến nghị 401 cho auth failures.
  • Lambda Error Handling: Best practices cho REST APIs.
  • RFC 7231 (HTTP/1.1 Semantics): Section 6.5.1 (401), 6.5.4 (404), 6.6.4 (503), 6.7.2 (505) – Chuẩn toàn cầu AWS tuân thủ.
  • AWS Well-Architected Framework (DevOps Pillar, 2024 update): Nhấn mạnh proper HTTP status cho observability.

💡 Lời khuyên thực hành: Trong code Lambda, dùng callback(null, {statusCode: 401, headers: {...}, body: 'Unauthorized'}) để fix. Test bằng Postman hoặc API Gateway console! 🚀

Câu 1083
A developer must use multi-factor authentication (MFA) to access data in an Amazon S3 bucket that is in another AWS account.

Which AWS Security Token Service (AWS STS) API operation should the developer use with the MFA information to meet this requirement?
  1. A AssumeRoleWithWebIdentity
  2. B GetFederationToken
  3. C AssumeRoleWithSAML
  4. D AssumeRole
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi tập trung vào tình huống một developer cần sử dụng MFA (Multi-Factor Authentication) để truy cập dữ liệu trong Amazon S3 bucket thuộc một AWS account khác (cross-account access). Để làm điều này, developer phải sử dụng AWS Security Token Service (STS) API operation kết hợp với thông tin MFA nhằm tạo temporary security credentials (như Access Key, Secret Key, Session Token) để assume role ở account kia.

🔍 Chi tiết kỹ thuật:

  • Đây là kịch bản cross-account role assumption với yêu cầu bảo mật cao bằng MFA.
  • Developer thường là IAM user từ account nguồn, cần cung cấp role ARN của account đích và MFA serial number + token code.
  • AWS STS là dịch vụ cung cấp temporary credentials an toàn, tránh sử dụng long-term credentials.

✅ Đáp án đúng: AssumeRole

Lý do chọn AssumeRole 🛠️:
API AssumeRole là lựa chọn chính xác vì nó cho phép IAM user từ account nguồn assume IAM role ở account đích (cross-account), đồng thời hỗ trợ MFA trực tiếp qua tham số SerialNumber (MFA device ARN) và TokenCode (MFA code tạm thời). Kết quả trả về temporary credentials để truy cập S3 bucket. Đây là phương pháp chuẩn cho cross-account access với MFA, đảm bảo tuân thủ nguyên tắc least privilege và bảo mật cao.
📘 Tài liệu tham khảo: AWS STS AssumeRole API Reference (cập nhật mới nhất 2024, vẫn áp dụng đến 2026).

📋 Giải thích tất cả các phương án

Dưới đây là phân tích chi tiết từng lựa chọn, với lý do đúng/sai dựa trên tính năng STS API (phiên bản mới nhất AWS 2024-2026):

  • ❌ AssumeRoleWithWebIdentity
    Phương án này sai vì AssumeRoleWithWebIdentity dành cho web identity federation (như Cognito, Google, Facebook OIDC providers), không hỗ trợ MFA trực tiếp từ IAM user. Nó yêu cầu JWT token từ identity provider thay vì credentials IAM + MFA, nên không phù hợp cho cross-account access với MFA từ developer IAM user. 🛑 Không dùng được ở đây!

  • ❌ GetFederationToken
    Phương án này sai vì GetFederationToken chỉ tạo temporary credentials trong cùng một AWS account, không hỗ trợ cross-account role assumption. Mặc dù hỗ trợ MFA (qua TokenCode), nhưng nó giới hạn scope policy và không assume role ở account khác, dẫn đến không truy cập được S3 bucket cross-account. 🛑 Không đáp ứng yêu cầu cross-account!

  • ❌ AssumeRoleWithSAML
    Phương án này sai vì AssumeRoleWithSAML dành riêng cho SAML 2.0 federation (từ IdP như Active Directory, Okta), yêu cầu SAML assertion thay vì IAM user credentials + MFA. Nó không hỗ trợ MFA trực tiếp từ IAM device, và chủ yếu dùng cho SSO cross-account, không phải developer cá nhân với MFA token. 🛑 Không khớp kịch bản!

  • ✅ AssumeRole (Đã giải thích ở trên)
    Hoàn hảo cho IAM user cross-account với MFA! 🚀

🛡️ Lời khuyên thực hành (AWS Best Practices)

  • Luôn enable MFA cho IAM users/roles nhạy cảm (Security Hub khuyến nghị).
  • Sử dụng S3 Bucket Policy + IAM Role Trust Policy để cho phép cross-account access.
  • Test qua AWS CLI: aws sts assume-role --role-arn <ARN> --role-session-name <name> --serial-number <MFA-ARN> --token-code <code>.
    📘 Nguồn bổ sung: AWS STS Best Practices & S3 Cross-Account Access.
Câu 1084 Chọn nhiều đáp án
A developer designed an application on an Amazon EC2 instance. The application makes API requests to objects in an Amazon S3 bucket.

Which combination of steps will ensure that the application makes the API requests in the MOST secure manner? (Choose two.)
  1. A Create an IAM user that has permissions to the S3 bucket. Add the user to an IAM group.
  2. B Create an IAM role that has permissions to the S3 bucket.
  3. C Add the IAM role to an instance profile. Attach the instance profile to the EC2 instance.
  4. D Create an IAM role that has permissions to the S3 bucket. Assign the role to an IAM group.
  5. E Store the credentials of the IAM user in the environment variables on the EC2 instance.
Xem giải thích

🔍 Giải thích nội dung câu hỏi
🧩 Câu hỏi tập trung vào việc thiết kế ứng dụng chạy trên Amazon EC2 instance thực hiện các API requests đến các objects trong Amazon S3 bucket. Mục tiêu là chọn TWO steps (hai bước) kết hợp để đảm bảo các yêu cầu API này được thực hiện theo cách AN TOÀN NHẤT (MOST secure manner).
🛡️ Vấn đề cốt lõi: Tránh sử dụng access keys cứng nhắc (hardcoded credentials) vì chúng dễ bị lộ, hack hoặc quản lý kém. Thay vào đó, AWS khuyến nghị sử dụng IAM Roles gắn với EC2 qua Instance Profile để cấp quyền tạm thời, tự động xoay vòng credentials mà không cần lưu trữ keys trên instance. Điều này tuân thủ nguyên tắc least privilege và temporary credentials theo best practices AWS (cập nhật đến 2026, IAM Roles vẫn là chuẩn mực cho workloads trên EC2).

✅ Đáp án đúng (Chọn TWO)
Hai bước đúng là:

  1. Create an IAM role that has permissions to the S3 bucket.
    🛠️ Lý do: Tạo IAM Role với policy cho phép truy cập S3 bucket là nền tảng, vì role cung cấp credentials tạm thời an toàn cho ứng dụng trên EC2 mà không cần IAM user hay keys lâu dài.
  2. Add the IAM role to an instance profile. Attach the instance profile to the EC2 instance.
    🛠️ Lý do: Instance Profile là "container" để gắn IAM Role vào EC2 instance. Khi attach, SDK/AWS CLI trên instance tự động sử dụng metadata service (IMDSv2 khuyến nghị từ 2023-2026) để lấy temporary credentials từ role, đảm bảo zero-trust và không lưu trữ bí mật trên disk/environment.

📝 Phân tích tất cả các phương án
Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh. Tôi đánh dấu ✅ (đúng) hoặc ❌ (sai) kèm giải thích đầy đủ:

  • Create an IAM user that has permissions to the S3 bucket. Add the user to an IAM group.
    ❌ Sai: Tạo IAM user và thêm vào group không an toàn cho EC2 vì yêu cầu lưu trữ access keys (AWS Access Key ID/Secret) trên instance (ví dụ: env vars hoặc config files), dễ bị lộ qua logs, AMI chia sẻ hoặc tấn công. Không phải best practice; AWS khuyên tránh IAM users cho workloads.

  • Create an IAM role that has permissions to the S3 bucket.
    ✅ Đúng: Đây là bước đầu tiên cần thiết. IAM Role cho phép định nghĩa policy chính xác cho S3 (như s3:GetObject), và EC2 có thể assume role để lấy temporary credentials (kéo dài 1 giờ, tự renew). An toàn hơn user vì không có permanent keys.

  • Add the IAM role to an instance profile. Attach the instance profile to the EC2 instance.
    ✅ Đúng: Instance Profile là required để EC2 "nhìn thấy" IAM Role. Khi attach, instance sử dụng endpoint http://169.254.169.254 (IMDSv2) để fetch credentials động. Đây là cách MOST secure theo AWS, hỗ trợ Nitro Enclaves và EC2 Instance Connect (cập nhật 2026).

  • Create an IAM role that has permissions to the S3 bucket. Assign the role to an IAM group.
    ❌ Sai: IAM Roles KHÔNG THỂ assign trực tiếp vào IAM group (groups chỉ dành cho users). Roles được assume bởi entities như EC2, Lambda qua trust policy. Lỗi này vi phạm IAM model cơ bản.

  • Store the credentials of the IAM user in the environment variables on the EC2 instance.
    ❌ Sai: Lưu credentials IAM user vào env vars cực kỳ rủi ro – dễ dump qua ps command, logs, hoặc AMI export. Vi phạm AWS Well-Architected Framework (Security Pillar), khuyến nghị loại bỏ access keys từ EC2 từ năm 2021 và nghiêm ngặt hơn đến 2026.

🛡️ Kết luận: Kết hợp hai bước ✅ tạo IAM Role + Instance Profile là cách an toàn nhất, hỗ trợ ứng dụng sử dụng AWS SDK (như boto3) tự động detect credentials mà không cần code thủ công.

📘 Tài liệu tham khảo (Cập nhật AWS Docs 2026):

Câu 1085
An AWS Lambda function requires read access to an Amazon S3 bucket and requires read/write access to an Amazon DynamoDB table. The correct IAM policy already exists.

What is the MOST secure way to grant the Lambda function access to the S3 bucket and the DynamoDB table?
  1. A Attach the existing IAM policy to the Lambda function.
  2. B Create an IAM role for the Lambda function. Attach the existing IAM policy to the role. Attach the role to the Lambda function.
  3. C Create an IAM user with programmatic access. Attach the existing IAM policy to the user. Add the user access key ID and secret access key as environment variables in the Lambda function.
  4. D Add the AWS account root user access key ID and secret access key as encrypted environment variables in the Lambda function.
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi tập trung vào best practice bảo mật IAM (Identity and Access Management) cho AWS Lambda function. Cụ thể:

  • Lambda function cần quyền đọc (read access) đối với một Amazon S3 bucket.
  • Lambda cần quyền đọc/ghi (read/write access) đối với một Amazon DynamoDB table.
  • Một IAM policy đúng đã tồn tại sẵn (chứa các quyền cần thiết).

Mục tiêu: Tìm cách an toàn NHẤT để cấp quyền cho Lambda truy cập S3 và DynamoDB.
🛠️ Lý do quan trọng: AWS khuyến nghị least privilege principle và tránh hardcode credentials (như access keys). Lambda chạy trong môi trường serverless, nên sử dụng execution role để tạm thời assume quyền mà không cần lưu trữ bí mật lâu dài. Điều này tuân thủ AWS Well-Architected Framework (Security Pillar) phiên bản mới nhất 2023-2026.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Create an IAM role for the Lambda function. Attach the existing IAM policy to the role. Attach the role to the Lambda function.

Lý do chi tiết:

  • Đây là phương pháp an toàn nhất theo AWS best practices. Lambda sử dụng IAM role (execution role) để tạm thời assume quyền qua STS (Security Token Service), không cần lưu trữ access keys.
  • Policy đã tồn tại được attach vào role → Role attach vào Lambda → Lambda tự động sử dụng role khi invoke.
  • ✅ Ưu điểm: Tự động rotate credentials (mỗi giờ), hỗ trợ audit qua CloudTrail, tuân thủ zero-trust model. Không rủi ro lộ credentials như các cách khác.
  • Áp dụng phiên bản AWS 2026: Lambda hỗ trợ fine-grained roles với tags và conditions cho S3/DynamoDB.

🔍 Phân tích tất cả các phương án

Dưới đây là phân tích từng lựa chọn một cách chi tiết, giữ nguyên nội dung gốc bằng tiếng Anh. Mỗi phương án được đánh giá đúng/sai dựa trên bảo mật, best practices và rủi ro thực tế.

  • Phương án A: Attach the existing IAM policy to the Lambda function.
    ❌ Sai vì: Lambda function không thể attach policy trực tiếp như EC2 instance. Policy chỉ attach vào IAM entities (user/role/group). Nếu thử attach, AWS sẽ báo lỗi. Cách này không an toàn vì bỏ qua execution role, vi phạm nguyên tắc separation of duties. Rủi ro: Không audit được rõ ràng.

  • Phương án B (Đúng): Create an IAM role for the Lambda function. Attach the existing IAM policy to the role. Attach the role to the Lambda function.
    ✅ Đúng vì: Như giải thích trên, đây là standard way cho Lambda (AWS Lambda Execution Role). Role cung cấp temporary credentials, hỗ trợ VPC/S3/DynamoDB access. An toàn cao nhất, dễ manage với IAM Access Analyzer.

  • Phương án C: Create an IAM user with programmatic access. Attach the existing IAM policy to the user. Add the user access key ID and secret access key as environment variables in the Lambda function.
    ❌ Sai vì: Tạo IAM user và hardcode access key/secret key vào env vars là anti-pattern bảo mật. Keys có thể bị lộ qua logs, code deploy hoặc breach. Lambda không cần programmatic access vì có execution role. Rủi ro: Không auto-rotate, dễ bị tấn công credential stuffing.

  • Phương án D: Add the AWS account root user access key ID and secret access key as encrypted environment variables in the Lambda function.
    ❌ Sai nặng nhất: Sử dụng root user credentials là vi phạm nghiêm trọng AWS best practices (root chỉ dùng cho admin tasks). Dù encrypt env vars (qua KMS), vẫn rủi ro cao vì root có quyền unlimited. AWS cấm khuyến khích root keys từ 2013, và Lambda env vars không thay thế execution role.

📘 Tài liệu tham khảo (Cập nhật mới nhất đến 2026)

🛠️ Lời khuyên: Luôn dùng AWS IAM Roles cho Lambda để đạt DOP-C02 passing score cao! Nếu cần lab, thử trên AWS Console.

Câu 1086
A developer is using AWS Step Functions to automate a workflow. The workflow defines each step as an AWS Lambda function task. The developer notices that runs of the Step Functions state machine fail in the GetResource task with either an IllegalArgumentException error or a TooManyRequestsException error.

The developer wants the state machine to stop running when the state machine encounters an IllegalArgumentException error. The state machine needs to retry the GetResource task one additional time after 10 seconds if the state machine encounters a TooManyRequestsException error. If the second attempt fails, the developer wants the state machine to stop running.

How can the developer implement the Lambda retry functionality without adding unnecessary complexity to the state machine?
  1. A Add a Delay task after the GetResource task. Add a catcher to the GetResource task. Configure the catcher with an error type of TooManyRequestsException. Configure the next step to be the Delay task. Configure the Delay task to wait for an interval of 10 seconds. Configure the next step to be the GetResource task.
  2. B Add a catcher to the GetResource task. Configure the catcher with an error type of TooManyRequestsException, an interval of 10 seconds, and a maximum attempts value of 1. Configure the next step to be the GetResource task.
  3. C Add a retrier to the GetResource task. Configure the retrier with an error type of TooManyRequestsException, an interval of 10 seconds, and a maximum attempts value of 1.
  4. D Duplicate the GetResource task. Rename the new GetResource task to TryAgain. Add a catcher to the original GetResource task. Configure the catcher with an error type of TooManyRequestsException. Configure the next step to be TryAgain.
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi xoay quanh việc tối ưu hóa xử lý lỗi trong AWS Step Functions khi một workflow sử dụng các task Lambda, cụ thể là task GetResource. Nhà phát triển gặp hai loại lỗi:

  • IllegalArgumentException: State machine phải dừng ngay lập tức (không retry).
  • TooManyRequestsException: State machine phải retry đúng 1 lần thêm (tổng cộng 2 lần chạy task), với khoảng cách 10 giây, và nếu lần thứ hai fail thì dừng.

Yêu cầu chính là implement chức năng retry cho Lambda một cách đơn giản nhất, tránh thêm complexity không cần thiết vào state machine definition (Amazon States Language - ASL).
📘 Bối cảnh AWS mới nhất (2026): Step Functions hỗ trợ Retry và Catcher trong ASL để xử lý lỗi granular (theo error type), giúp workflow robust mà không cần thêm task thừa. Retry được ưu tiên cho trường hợp lặp lại task, trong khi Catcher dùng cho routing lỗi đến branch khác.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng:
Add a retrier to the GetResource task. Configure the retrier with an error type of TooManyRequestsException, an interval of 10 seconds, and a maximum attempts value of 1.

🛠️ Lý do chi tiết:

  • Retrier là cơ chế built-in của Step Functions (trong Retry field của task), cho phép retry chính task đó dựa trên error type cụ thể (matcher như TooManyRequestsException).
  • MaxAttempts: 1 nghĩa là retry 1 lần thêm (tổng 2 executions: lần đầu + 1 retry), khớp yêu cầu.
  • Interval: 10s (backoff cơ bản, không exponential mặc định).
  • IllegalArgumentException không match retrier → fail ngay, state machine dừng (mặc định).
  • Ưu điểm: Không thêm task/state mới, giữ state machine đơn giản, clean. Đây là best practice theo AWS Well-Architected Framework (Reliability pillar).

📋 Giải thích tất cả các phương án

Dưới đây là phân tích từng lựa chọn một cách chi tiết. Tôi giữ nguyên văn bản gốc bằng tiếng Anh cho phương án, và giải thích hoàn toàn bằng tiếng Việt với lý do đúng/sai:

  • ❌ Phương án SAI:
    Add a Delay task after the GetResource task. Add a catcher to the GetResource task. Configure the catcher with an error type of TooManyRequestsException. Configure the next step to be the Delay task. Configure the Delay task to wait for an interval of 10 seconds. Configure the next step to be the GetResource task.
    Giải thích sai: Phương án này thêm Delay task và Catcher phức tạp hóa workflow (thêm 2 states mới: Delay + loop về GetResource). Catcher chỉ route lỗi, không tự retry task gốc → phải manual loop, dễ infinite loop nếu không kiểm soát. Không khớp "without unnecessary complexity". IllegalArgumentException vẫn fail bình thường, nhưng tổng thể quá rườm rà.

  • ❌ Phương án SAI:
    Add a catcher to the GetResource task. Configure the catcher with an error type of TooManyRequestsException, an interval of 10 seconds, and a maximum attempts value of 1. Configure the next step to be the GetResource task.
    Giải thích sai: Catcher không hỗ trợ interval hoặc maxAttempts (chỉ có Error matcher và Next state). Đây là nhầm lẫn với Retrier syntax. Catcher chỉ catch lỗi rồi route đến next step (tạo loop thủ công), không tự delay/retry. Thêm complexity tương tự phương án A, và config sai ASL schema → state machine invalid.

  • ✅ Phương án ĐÚNG (như đã giải thích ở trên):
    Add a retrier to the GetResource task. Configure the retrier with an error type of TooManyRequestsException, an interval of 10 seconds, and a maximum attempts value of 1.
    Giải thích đúng: Hoàn hảo khớp yêu cầu, sử dụng Retry block chuẩn ASL:

    "Retry": [{"ErrorEquals": ["TooManyRequestsException"], "IntervalSeconds": 10, "MaxAttempts": 1}]
    

    Không thêm state, xử lý chính xác 1 retry cho error cụ thể, fail ngay cho lỗi khác.

  • ❌ Phương án SAI:
    Duplicate the GetResource task. Rename the new GetResource task to TryAgain. Add a catcher to the original GetResource task. Configure the catcher with an error type of TooManyRequestsException. Configure the next step to be TryAgain.
    Giải thích sai: Duplicate task (GetResource → TryAgain) tạo redundancy, tăng complexity (2 Lambda invocations giống hệt, dễ maintain lỗi). Catcher route đến TryAgain nhưng không có delay 10s, và chỉ 1 retry (không linh hoạt). Nếu TryAgain fail, không xử lý tiếp → không dừng đúng. Vi phạm "unnecessary complexity".

📘 Tài liệu tham khảo (AWS cập nhật 2026)

  • AWS Step Functions Developer Guide: Retry and Wait for a Callback – Chi tiết Retry syntax và error matchers.
  • Amazon States Language Spec: Retry Object – MaxAttempts, IntervalSeconds, ErrorEquals.
  • Exam Tips DOP-C02: Best practice dùng Retrier cho Lambda throttling (như TooManyRequestsException từ Lambda limits).
  • Well-Architected: Reliability pillar khuyến nghị native error handling để tránh custom loops.

Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần ví dụ ASL code đầy đủ, hãy hỏi thêm nhé!

Câu 1087
A developer is creating a serverless application that uses an AWS Lambda function. The developer will use AWS CloudFormation to deploy the application. The application will write logs to Amazon CloudWatch Logs. The developer has created a log group in a CloudFormation template for the application to use. The developer needs to modify the CloudFormation template to make the name of the log group available to the application at runtime.

Which solution will meet this requirement?
  1. A Use the AWS::Include transform in CloudFormation to provide the log group's name to the application.
  2. B Pass the log group's name to the application in the user data section of the CloudFormation template.
  3. C Use the CloudFormation template's Mappings section to specify the log group's name for the application.
  4. D Pass the log group's Amazon Resource Name (ARN) as an environment variable to the Lambda function.
Xem giải thích

🧩 Giải thích nội dung câu hỏi

Câu hỏi xoay quanh việc triển khai một ứng dụng serverless sử dụng AWS Lambda và AWS CloudFormation. Nhà phát triển đã tạo một log group (nhóm nhật ký) trong template CloudFormation để ứng dụng ghi logs vào Amazon CloudWatch Logs. Yêu cầu chính là sửa template CloudFormation để làm cho tên của log group (log group's name) có sẵn cho ứng dụng tại thời điểm runtime (khi Lambda chạy).

🛠️ Vấn đề cốt lõi: Lambda cần biết tên log group động (dynamic value được tạo bởi CloudFormation) để sử dụng tại runtime, không phải giá trị tĩnh. CloudFormation cung cấp các hàm intrinsic như Ref hoặc Fn::GetAtt để lấy tên (name) hoặc ARN của resource, và truyền chúng vào Lambda qua environment variables – đây là cách tiêu chuẩn cho serverless.

✅ Đáp án đúng

Pass the log group's Amazon Resource Name (ARN) as an environment variable to the Lambda function.

Lý do lựa chọn:

  • Trong CloudFormation, bạn sử dụng Fn::GetAtt để lấy ARN của AWS::Logs::LogGroup (ví dụ: !GetAtt LogGroup.Arn), rồi gán vào phần Environment của resource AWS::Lambda::Function.
  • Tại runtime, Lambda đọc env var này để biết chính xác tên log group (vì ARN chứa tên đầy đủ, dạng arn:aws:logs:region:account:log-group:/log-group-name).
  • Đây là cách chuẩn và an toàn nhất cho serverless, hỗ trợ cập nhật tự động khi stack thay đổi (như đổi tên log group). Không cần hardcode, phù hợp phiên bản AWS mới nhất (2026) với CloudFormation StackSets và Lambda extensions.

📋 Phân tích tất cả các phương án

Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá ✅ (đúng) hoặc ❌ (sai), kèm giải thích rõ ràng:

  • Use the AWS::Include transform in CloudFormation to provide the log group's name to the application.
    ❌ Sai: AWS::Include transform chỉ dùng để include nội dung từ file bên ngoài (như snippet YAML/JSON khác) vào template tại thời điểm deploy, không truyền dynamic value như tên log group vào runtime của Lambda. Nó không liên quan đến việc expose resource attributes cho ứng dụng chạy.

  • Pass the log group's name to the application in the user data section of the CloudFormation template.
    ❌ Sai: User data chỉ áp dụng cho EC2 instances (phần UserData trong AWS::EC2::Instance), không tồn tại trong Lambda function (serverless). Lambda không có "user data" – đây là nhầm lẫn giữa compute EC2 và serverless, không khả thi.

  • Use the CloudFormation template's Mappings section to specify the log group's name for the application.
    ❌ Sai: Mappings chỉ lưu dữ liệu tĩnh (static key-value pairs) dựa trên region/AZ/image, được resolve tại deploy time. Nó không lấy được dynamic resource name từ log group (tạo sau), và không truyền vào runtime Lambda. Phù hợp cho config cố định, không phải resource refs.

  • Pass the log group's Amazon Resource Name (ARN) as an environment variable to the Lambda function.
    ✅ Đúng: Như giải thích ở trên, sử dụng Environment.Variables trong AWS::Lambda::Function với !GetAtt [LogGroupLogicalId].Arn. Lambda đọc env var tại runtime một cách dễ dàng (qua process.env hoặc os.environ), và ARN chứa đầy đủ thông tin tên log group. Hỗ trợ quotas lớn (Lambda env vars lên đến 4KB tổng).

📘 Tài liệu tham khảo (cập nhật AWS 2026)

Hy vọng phân tích này giúp bạn ôn thi DOP-C02 hiệu quả! 🚀 Nếu cần ví dụ code YAML cụ thể, hãy hỏi thêm nhé!

Câu 1088
A developer is creating an Amazon DynamoDB table by using the AWS CLI. The DynamoDB table must use server-side encryption with an AWS owned encryption key.

How should the developer create the DynamoDB table to meet these requirements?
  1. A Create an AWS Key Management Service (AWS KMS) customer managed key. Provide the key's Amazon Resource Name (ARN) in the KMSMasterKeyId parameter during creation of the DynamoDB table.
  2. B Create an AWS Key Management Service (AWS KMS) AWS managed key. Provide the key's Amazon Resource Name (ARN) in the KMSMasterKeyId parameter during creation of the DynamoDB table.
  3. C Create an AWS owned key. Provide the key's Amazon Resource Name (ARN) in the KMSMasterKeyId parameter during creation of the DynamoDB table.
  4. D Create the DynamoDB table with the default encryption options.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc tạo một bảng Amazon DynamoDB bằng AWS CLI, với yêu cầu cụ thể là sử dụng server-side encryption (SSE) với AWS owned encryption key.
✅ Yêu cầu chính: Bảng phải được mã hóa dữ liệu tại chỗ (encryption at rest) bằng khóa mã hóa do AWS sở hữu (AWS owned key), không phải khóa do khách hàng quản lý.
🛠️ Ngữ cảnh: AWS CLI sử dụng lệnh create-table, và từ năm 2018 (cập nhật đến 2026), DynamoDB mặc định kích hoạt SSE với AWS owned keys mà không cần cấu hình thêm. Điều này đảm bảo tuân thủ bảo mật mà không phức tạp hóa quy trình tạo bảng.
📘 Kiến thức cốt lõi: AWS owned keys là khóa nội bộ của AWS, không thể truy cập ARN trực tiếp từ người dùng, và được áp dụng tự động qua tùy chọn mặc định.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Create the DynamoDB table with the default encryption options.

Lý do:

  • Khi tạo bảng DynamoDB qua AWS CLI mà không chỉ định tham số SSEKMSKeyId hoặc SSESpecification, hệ thống sẽ tự động sử dụng server-side encryption với AWS owned customer master key (CMK) – chính xác yêu cầu của câu hỏi.
  • Điều này được kích hoạt mặc định từ 2018 và vẫn là tiêu chuẩn đến 2026 (AWS không thay đổi chính sách này).
  • Lệnh CLI ví dụ: aws dynamodb create-table --table-name MyTable --attribute-definitions ... --key-schema ... --provisioned-throughput ... (không cần thêm SSE).
    🛡️ Lợi ích: Đơn giản, an toàn, tuân thủ best practices mà không cần quản lý khóa KMS riêng.

❌ Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích từng lựa chọn một cách chi tiết:

  • Create an AWS Key Management Service (AWS KMS) customer managed key. Provide the key's Amazon Resource Name (ARN) in the KMSMasterKeyId parameter during creation of the DynamoDB table.
    ❌ Sai: Đây là cách sử dụng customer managed key (CMK) trong AWS KMS, yêu cầu tạo khóa riêng và cung cấp ARN vào tham số SSEKMSKeyId (hoặc SSESpecification.SSEType=KMS + SSEKMSKeyId). Nhưng câu hỏi yêu cầu AWS owned key, không phải CMK do khách hàng quản lý. Phương án này phức tạp hóa không cần thiết và không khớp yêu cầu.

  • Create an AWS Key Management Service (AWS KMS) AWS managed key. Provide the key's Amazon Resource Name (ARN) in the KMSMasterKeyId parameter during creation of the DynamoDB table.
    ❌ Sai: AWS managed keys (do AWS tạo cho dịch vụ cụ thể) vẫn cần ARN để chỉ định trong SSEKMSKeyId, nhưng không phải AWS owned key. DynamoDB có AWS managed key riêng cho SSE-KMS, nhưng phương án này không sử dụng khóa do AWS "sở hữu hoàn toàn" (owned) mà là managed. Không đáp ứng yêu cầu chính xác.

  • Create an AWS owned key. Provide the key's Amazon Resource Name (ARN) in the KMSMasterKeyId parameter during creation of the DynamoDB table.
    ❌ Sai: AWS owned keys không có ARN công khai cho người dùng (chúng là nội bộ AWS). Không thể tạo hoặc cung cấp ARN của chúng vào KMSMasterKeyId (nay là SSEKMSKeyId). Phương án này sai về mặt kỹ thuật vì AWS owned keys chỉ hoạt động qua mặc định, không qua ARN.

📘 Tài liệu tham khảo (cập nhật đến 2026)

  • AWS Documentation: Amazon DynamoDB Encryption at Rest – Xác nhận SSE mặc định dùng AWS owned CMK.
  • AWS CLI Reference: create-table – Không yêu cầu SSE cho AWS owned keys.
  • AWS Best Practices: DynamoDB Security – Default encryption enabled since 2018, no changes in 2023-2026 re:Invent updates.
  • Exam Topic (DOP-C02): Security & Encryption trong DevOps Professional (2024-2026 blueprint).

🛠️ Lời khuyên: Trong thực tế DevOps, luôn ưu tiên default encryption cho DynamoDB để giảm overhead quản lý khóa! Nếu cần tùy chỉnh, mới dùng KMS.

Câu 1089
A company has an application that runs across multiple AWS Regions. The application is experiencing performance issues at irregular intervals. A developer must use AWS X-Ray to implement distributed tracing for the application to troubleshoot the root cause of the performance issues.

What should the developer do to meet this requirement?
  1. A Use the X-Ray console to add annotations for AWS services and user-defined services.
  2. B Use Region annotation that X-Ray adds automatically for AWS services. Add Region annotation for user-defined services.
  3. C Use the X-Ray daemon to add annotations for AWS services and user-defined services.
  4. D Use Region annotation that X-Ray adds automatically for user-defined services. Configure X-Ray to add Region annotation for AWS services.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc sử dụng AWS X-Ray để triển khai distributed tracing cho một ứng dụng chạy đa Regions AWS, nhằm troubleshoot vấn đề performance không đều (irregular intervals).

  • Bối cảnh vấn đề: Ứng dụng trải rộng nhiều Regions (ví dụ: us-east-1, eu-west-1), nên cần trace dữ liệu để xác định root cause như latency giữa các Regions, bottlenecks ở service cụ thể.
  • Yêu cầu chính: Developer phải cấu hình Region annotations trong X-Ray traces. Annotation này giúp X-Ray service map hiển thị traces theo Region, hỗ trợ filter và phân tích cross-Region (tính năng cốt lõi của X-Ray từ năm 2017 và vẫn cập nhật đến 2026 với hỗ trợ SAM local, OpenTelemetry).
  • Mục tiêu: Đảm bảo traces tự động gắn nhãn Region cho AWS services (như Lambda, EC2, API Gateway) và user-defined services (code tùy chỉnh), giúp visualize performance issues trên X-Ray console.

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng:
Use Region annotation that X-Ray adds automatically for AWS services. Add Region annotation for user-defined services.

🛠️ Lý do chi tiết:

  • AWS X-Ray tự động thêm Region annotation cho tất cả AWS services được instrumented (qua SDK integration như AWS Lambda extensions, X-Ray SDK for Java/Node/Python, hoặc daemon proxy). Annotation này là string key-value với giá trị là AWS Region code (e.g., "us-east-1"), giúp traces group theo Region trên service map.
  • Đối với user-defined services (ứng dụng tùy chỉnh, non-AWS), developer phải manually add annotation bằng X-Ray SDK: segment.addAnnotation("Region", "us-west-2") hoặc subsegment tương tự. Điều này đảm bảo traces hoàn chỉnh cross-Region.
  • Cách này tối ưu, không cần config thêm, phù hợp troubleshoot performance issues đa Regions. Đáp án khớp chính xác best practice AWS (không thay đổi đến 2026).

📋 Giải thích tất cả các phương án (đúng/sai)

  • ❌ SAI: Use the X-Ray console to add annotations for AWS services and user-defined services.
    X-Ray console chỉ dùng để view/filter traces, không hỗ trợ add annotations động. Annotations phải implement trong code (SDK) hoặc tự động bởi X-Ray. Sử dụng console sẽ không trace real-time, không giải quyết performance issues.

  • ✅ ĐÚNG: Use Region annotation that X-Ray adds automatically for AWS services. Add Region annotation for user-defined services.
    (Như giải thích ở trên) – Đây là cách chính xác, tự động cho AWS services và manual cho custom code, đảm bảo full visibility cross-Regions mà không cần daemon/config extra.

  • ❌ SAI: Use the X-Ray daemon to add annotations for AWS services and user-defined services.
    X-Ray daemon (sidecar trên EC2/Fargate) chỉ thu thập và forward traces đến X-Ray service, không add annotations. Nó hỗ trợ UDP proxy nhưng annotations phải code-level (SDK). Daemon không tự động Region cho user-defined.

  • ❌ SAI: Use Region annotation that X-Ray adds automatically for user-defined services. Configure X-Ray to add Region annotation for AWS services.
    Ngược lại sự thật: X-Ray KHÔNG tự động add Region cho user-defined services (phải manual). AWS services thì đã tự động, không cần "configure X-Ray". Lựa chọn này sai logic, có thể gây trace không đầy đủ.

🧩 Kết luận: Cách tiếp cận đúng giúp developer nhanh chóng filter traces theo Region trên X-Ray console, pinpoint bottlenecks (e.g., cold starts Lambda cross-Region). Recommend integrate X-Ray SDK sớm trong app code! 🚀

Câu 1090
A company runs an application on AWS. The application uses an AWS Lambda function that is configured with an Amazon Simple Queue Service (Amazon SQS) queue called high priority queue as the event source. A developer is updating the Lambda function with another SQS queue called low priority queue as the event source. The Lambda function must always read up to 10 simultaneous messages from the high priority queue before processing messages from low priority queue. The Lambda function must be limited to 100 simultaneous invocations.

Which solution will meet these requirements?
  1. A Set the event source mapping batch size to 10 for the high priority queue and to 90 for the low priority queue.
  2. B Set the delivery delay to 0 seconds for the high priority queue and to 10 seconds for the low priority queue.
  3. C Set the event source mapping maximum concurrency to 10 for the high priority queue and to 90 for the low priority queue.
  4. D Set the event source mapping batch window to 10 for the high priority queue and to 90 for the low priority queue.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi xoay quanh việc cấu hình AWS Lambda function với hai Amazon SQS queue làm event source: một queue high priority (ưu tiên cao) và một queue low priority (ưu tiên thấp). Ứng dụng yêu cầu Lambda luôn ưu tiên xử lý tối đa 10 messages đồng thời từ high priority queue trước khi xử lý từ low priority queue, đồng thời giới hạn tổng số invocations đồng thời của Lambda ở mức 100.

🛠️ Yêu cầu kỹ thuật chính:

  • Lambda phải scale concurrency (số lượng thực thi đồng thời) theo thứ tự ưu tiên: dành 10 slot concurrency cho high priority queue trước.
  • Sau đó mới allocate phần còn lại (90 slot) cho low priority queue.
  • Tổng concurrency của Lambda không vượt 100.

Điều này đòi hỏi sử dụng Event Source Mapping (ESM) của Lambda cho SQS, với các tham số kiểm soát concurrency để đảm bảo fair share (phân bổ công bằng) giữa các queue dựa trên ưu tiên. Kiến thức dựa trên AWS Lambda SQS integration mới nhất (2024-2026), nơi maximum concurrency per ESM là tính năng chính để kiểm soát scaling độc lập cho từng event source.

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Set the event source mapping maximum concurrency to 10 for the high priority queue and to 90 for the low priority queue.

Lý do 🏆:

  • Maximum concurrency trong ESM của Lambda (cho SQS) cho phép giới hạn số lượng invocations đồng thời dành riêng cho từng queue.
    • High priority: 10 → Lambda chỉ scale tối đa 10 executions cho queue này, đảm bảo xử lý nhanh messages ưu tiên cao trước.
    • Low priority: 90 → Phần còn lại (tổng 100) dành cho queue này, chỉ kích hoạt sau khi high priority đạt giới hạn.
  • Tổng concurrency = 10 + 90 = 100, khớp yêu cầu.
  • Lambda provisioned concurrency hoặc reserved concurrency có thể kết hợp để enforce tổng giới hạn 100 tại function level (qua Console/CLI: aws lambda put-function-event-invoke-config).
  • Đây là giải pháp chuẩn AWS best practice cho multi-queue prioritization từ năm 2022, cập nhật stable đến 2026.

📋 Giải thích tất cả các phương án

Dưới đây là phân tích từng lựa chọn một cách chi tiết, giữ nguyên văn bản gốc tiếng Anh. Mỗi phương án được đánh giá ✅ (đúng) hoặc ❌ (sai), kèm lý do cụ thể dựa trên docs AWS Lambda SQS ESM.

  • ❌ Set the event source mapping batch size to 10 for the high priority queue and to 90 for the low priority queue.
    Sai vì: Batch size chỉ kiểm soát số messages trong một batch invocation (mặc định 10, max 10k). Nó không ảnh hưởng đến concurrency (số invocations đồng thời). Ví dụ: Batch size=10 high chỉ nghĩa mỗi invocation xử lý 10 msgs, nhưng Lambda vẫn scale full concurrency cho cả hai queue cùng lúc → không ưu tiên high priority, vi phạm yêu cầu "luôn đọc 10 đồng thời từ high trước".

  • ❌ Set the delivery delay to 0 seconds for the high priority queue and to 10 seconds for the low priority queue.
    Sai vì: Delivery delay là thuộc tính của SQS queue, trì hoãn thời gian messages visible sau khi gửi (mặc định 0). Delay=0 cho high và 10s cho low chỉ làm low chậm lại một chút ban đầu, nhưng không kiểm soát concurrency invocations. Lambda vẫn poll và scale đồng đều cả hai queue → không đảm bảo 10 slot ưu tiên cho high, và tổng concurrency có thể vượt 100.

  • ✅ Set the event source mapping maximum concurrency to 10 for the high priority queue and to 90 for the low priority queue.
    Đúng vì: Như đã giải thích ở trên. Maximum concurrency per ESM (target tracking scaling) enforce reserved slots cho từng queue: high priority chiếm 10 trước, low chỉ dùng 90 sau. Tổng khớp 100. Hoàn hảo cho workload prioritization trong multi-event-source setup.

  • ❌ Set the event source mapping batch window to 10 for the high priority queue and to 90 for the low priority queue.
    Sai vì: Batch window (max 300s, mới từ 2021) kiểm soát thời gian chờ gom batch trước invoke (mặc định 0). Window=10s/90s chỉ ảnh hưởng tốc độ polling, làm high nhanh hơn low một chút, nhưng không giới hạn concurrency. Lambda vẫn scale full 100+ cho cả hai cùng lúc → không ưu tiên 10 concurrent cho high.

📘 Tài liệu tham khảo (AWS cập nhật 2026)

Giải pháp này production-ready, dễ implement qua CDK/Terraform! 🚀 Nếu cần code sample, hỏi thêm nhé!