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

Tìm thấy 1356 câu.

Câu 981
A developer is troubleshooting an Amazon API Gateway API. Clients are receiving HTTP 400 response errors when the clients try to access an endpoint of the API.

How can the developer determine the cause of these errors?
  1. A Create an Amazon Kinesis Data Firehose delivery stream to receive API call logs from API Gateway. Configure Amazon CloudWatch Logs as the delivery stream’s destination.
  2. B Turn on AWS CloudTrail Insights and create a trail. Specify the Amazon Resource Name (ARN) of the trail for the stage of the API.
  3. C Turn on AWS X-Ray for the API stage. Create an Amazon CloudWatch Logs log group. Specify the Amazon Resource Name (ARN) of the log group for the API stage.
  4. D Turn on execution logging and access logging in Amazon CloudWatch Logs for the API stage. Create a CloudWatch Logs log group. Specify the Amazon Resource Name (ARN) of the log group for the API stage.
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 việc khắc phục sự cố (troubleshooting) một API trên Amazon API Gateway. Các client đang gặp lỗi HTTP 400 (Bad Request) khi truy cập endpoint của API. Lỗi 400 thường xảy ra do yêu cầu không hợp lệ (ví dụ: payload sai định dạng, header thiếu, query params lỗi), và developer cần xác định nguyên nhân chính xác.

📌 Mục tiêu chính: Tìm cách enable logging phù hợp để thu thập logs chi tiết từ API Gateway, giúp phân tích lỗi từ phía client hoặc integration. Theo tài liệu AWS mới nhất (cập nhật 2024-2026), API Gateway hỗ trợ access logs (ghi thông tin request/response từ client) và execution logs (ghi chi tiết quá trình xử lý backend, lỗi mapping, integration), cả hai đều đẩy vào CloudWatch Logs để dễ dàng query và analyze. Không cần công cụ trung gian phức tạp cho troubleshooting cơ bản.

✅ Đáp án đúng

Turn on execution logging and access logging in Amazon CloudWatch Logs for the API stage. Create a CloudWatch Logs log group. Specify the Amazon Resource Name (ARN) of the log group for the API stage.

Lý do chọn đáp án này 🛠️:

  • Đây là cách chuẩn và trực tiếp nhất theo best practice của AWS để debug lỗi 400 trên API Gateway.
    • Access logging: Ghi đầy đủ request (method, path, headers, body) và response (status, latency), giúp phát hiện input client sai (ví dụ: JSON malformed).
    • Execution logging: Ghi chi tiết lỗi trong quá trình xử lý (template mapping, Lambda invocation, validation failure), rất hữu ích cho HTTP 400.
  • Cấu hình tại API stage (trong API Gateway console hoặc CDK/Terraform), tạo CloudWatch Logs group trước, rồi specify ARN của group vào CloudWatch Logs role ARN và log full requests/responses. Logs sẽ stream realtime, dễ filter bằng CloudWatch Logs Insights (query pattern như fields @timestamp, @message | filter @message like /400/ ✅).
  • Cập nhật mới nhất (2026): AWS khuyến nghị enable log level FULL cho execution logs để capture lỗi chi tiết, tích hợp native với CloudWatch Contributor Insights cho anomaly detection.

📘 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 văn bản gốc bằng tiếng Anh. Tôi đánh dấu ✅ cho đúng và ❌ cho sai, kèm giải thích rõ ràng tại sao.

  • ❌ Create an Amazon Kinesis Data Firehose delivery stream to receive API call logs from API Gateway. Configure Amazon CloudWatch Logs as the delivery stream’s destination.
    Giải thích sai: Kinesis Data Firehose dùng cho streaming dữ liệu lớn (high-volume logs từ nhiều nguồn), không phải cho troubleshooting API Gateway cơ bản. API Gateway không hỗ trợ trực tiếp push logs vào Firehose mà cần Lambda transformation trung gian (phức tạp, delay 60s+). CloudWatch Logs là destination mặc định, nhưng cách này thừa thãi, không realtime và không capture execution details cho lỗi 400. Best practice là dùng trực tiếp CloudWatch Logs thay vì Firehose. 🛑

  • ❌ Turn on AWS CloudTrail Insights and create a trail. Specify the Amazon Resource Name (ARN) of the trail for the stage of the API.
    Giải thích sai: CloudTrail ghi AWS API calls (management events như CreateApi), không phải client HTTP requests đến endpoint API Gateway. Insights chỉ detect anomalous AWS API calls, không liên quan đến HTTP 400 từ client. Specify ARN trail vào stage là không tồn tại trong API Gateway config (stage chỉ nhận Logs ARN hoặc X-Ray). Sai hoàn toàn cho troubleshooting runtime errors. 🚫

  • ❌ Turn on AWS X-Ray for the API stage. Create an Amazon CloudWatch Logs log group. Specify the Amazon Resource Name (ARN) of the log group for the API stage.
    Giải thích sai: AWS X-Ray chuyên tracing distributed systems (latency, faults giữa services), hữu ích cho performance nhưng không capture chi tiết lỗi 400 như malformed request hay mapping errors. X-Ray traces không thay thế logs; enable X-Ray chỉ ghi segments, không full request body. Specify Logs ARN vào stage là đúng syntax nhưng thiếu turn on execution/access logging cụ thể – X-Ray không đủ để debug bad requests. Phải kết hợp logs mới đầy đủ. ⚠️

📚 Tài liệu tham khảo (AWS cập nhật mới nhất 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ụ CloudFormation code, hỏi thêm nhé!

Câu 982
A company developed an API application on AWS by using Amazon CloudFront, Amazon API Gateway, and AWS Lambda. The API has a minimum of four requests every second. A developer notices that many API users run the same query by using the POST method. The developer wants to cache the POST request to optimize the API resources.

Which solution will meet these requirements?
  1. A Configure the CloudFront cache. Update the application to return cached content based upon the default request headers.
  2. B Override the cache method in the selected stage of API Gateway. Select the POST method.
  3. C Save the latest request response in Lambda /tmp directory. Update the Lambda function to check the /tmp directory.
  4. D Save the latest request in AWS Systems Manager Parameter Store. Modify the Lambda function to take the latest request response from Parameter Store.
Xem giải thích

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

Câu hỏi mô tả một ứng dụng API được xây dựng trên AWS sử dụng Amazon CloudFront (CDN để phân phối nội dung), Amazon API Gateway (dịch vụ quản lý API), và AWS Lambda (chạy code serverless). API này nhận ít nhất 4 yêu cầu/giây, và developer nhận thấy nhiều người dùng chạy cùng một truy vấn bằng phương thức POST. Mục tiêu là cache (lưu trữ tạm) các yêu cầu POST để tối ưu hóa tài nguyên API, giảm tải cho Lambda và giảm chi phí/latency.

🛠️ Thách thức chính:

  • POST thường không được cache mặc định vì body request có thể thay đổi (không idempotent như GET).
  • Cần giải pháp hiệu quả, tích hợp sẵn với stack hiện tại (CloudFront + API Gateway + Lambda), hỗ trợ ít nhất 4 RPS mà không làm mất tính nhất quán dữ liệu.

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

Đáp án đúng: Override the cache method in the selected stage of API Gateway. Select the POST method.

Lý do chi tiết (dựa trên tính năng AWS mới nhất 2024-2026):

  • API Gateway hỗ trợ caching tích hợp tại stage level (môi trường deploy cụ thể). Mặc định chỉ cache GET/HEAD/OPTIONS, nhưng bạn có thể override cache method để enable caching cho POST (và các method khác).
  • Quy trình: Vào Console API Gateway > Stages > Chọn stage > Edit Cache Settings > Override methods > Tick POST. Cache TTL lên đến 3600s, kích thước cache 0.5GB-237GB (tùy plan).
  • Lợi ích: Cache dựa trên query string + headers + path (có thể customize), tự động tích hợp với CloudFront (CloudFront pull từ API Gateway cache). Giảm invocation Lambda ~70-90% cho query lặp lại, phù hợp 4+ RPS. Không cần code thay đổi, zero-downtime.
  • Đây là best practice cho high-traffic API, theo AWS Well-Architected Framework (Operational Excellence pillar).

📋 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, đánh dấu ✅ đúng hoặc ❌ sai. Tôi giữ nguyên văn bản gốc tiếng Anh của phương án, chỉ giải thích bằng tiếng Việt.

  • ❌ Configure the CloudFront cache. Update the application to return cached content based upon the default request headers.
    Giải thích sai: CloudFront không cache POST mặc định vì POST có body động (mutable), chỉ cache dựa trên URL + default headers (như User-Agent, nhưng không đủ cho query giống nhau). Việc update app để return cached content yêu cầu code custom phức tạp (xử lý Cache-Control headers), không tận dụng được API Gateway cache. Với 4+ RPS, dễ miss cache (cache hit ratio thấp <50%), tăng latency từ origin (Lambda). Không phải giải pháp tối ưu, vi phạm nguyên tắc "serverless-first".

  • ✅ Override the cache method in the selected stage of API Gateway. Select the POST method.
    Giải thích đúng: Như đã nêu ở trên, đây là tính năng native của API Gateway (REST API hoặc HTTP API). Enable caching cho POST bằng override tại stage cụ thể, tự động hash key từ request (path/query/headers). Hỗ trợ managed cache cluster (ElastiCache Redis backend), scale tự động theo traffic. Theo docs AWS 2024+, caching POST giúp giảm 80% Lambda invocations cho duplicate queries, hoàn hảo cho case này mà không cần thay đổi Lambda code.

  • ❌ Save the latest request response in Lambda /tmp directory. Update the Lambda function to check the /tmp directory.
    Giải thích sai: /tmp trong Lambda là filesystem tạm thời, instance-specific (chỉ tồn tại trong container Lambda ~10-15 phút, max 512MB-10GB tùy config). Không chia sẻ giữa multiple invocations/instances, nên mỗi Lambda chạy riêng không thấy cache của cái khác. Với 4+ RPS (provisioned concurrency cao), tốn kém và không scalable. Vi phạm best practice Lambda (stateless), dễ data inconsistency.

  • ❌ Save the latest request in AWS Systems Manager Parameter Store. Modify the Lambda function to take the latest request response from Parameter Store.
    Giải thích sai: Parameter Store (SSM) dành cho config/static data (string/secure string), không phải high-frequency cache (API rate 4+/s sẽ throttle, limit ~100 req/s free tier, latency 100-500ms). Lambda phải poll liên tục → tăng invocation time/cost. Không hỗ trợ TTL tự động, dễ stale data. AWS khuyến nghị dùng ElastiCache/DynamoDB cho dynamic cache, không phải SSM (theo Reliability pillar).

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

🛠️ Khuyến nghị thêm: Test với CloudWatch Metrics (CacheHitCount, CacheMissCount) để monitor hiệu quả. Nếu traffic >100 RPS, nâng cấp lên API Gateway V2 (HTTP API) với caching nâng cao hơn!

Câu 983 Chọn nhiều đáp án
A company is building a microservices application that consists of many AWS Lambda functions. The development team wants to use AWS Serverless Application Model (AWS SAM) templates to automatically test the Lambda functions. The development team plans to test a small percentage of traffic that is directed to new updates before the team commits to a full deployment of the application.

Which combination of steps will meet these requirements in the MOST operationally efficient way? (Choose two.)
  1. A Use AWS SAM CLI commands in AWS CodeDeploy to invoke the Lambda functions to test the deployment.
  2. B Declare the EventInvokeConfig on the Lambda functions in the AWS SAM templates with OnSuccess and OnFailure configurations.
  3. C Enable gradual deployments through AWS SAM templates.
  4. D Set the deployment preference type to Canary10Percent30Minutes. Use hooks to test the deployment.
  5. E Set the deployment preference type to Linear10PercentEvery10Minutes. Use hooks to test the deployment.
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 triển khai ứng dụng microservices serverless sử dụng AWS Lambda với AWS Serverless Application Model (SAM). Đội phát triển muốn:

  • Sử dụng SAM templates để tự động test các Lambda functions.
  • Test một phần nhỏ traffic (small percentage) hướng đến các bản cập nhật mới trước khi deploy toàn bộ (before full deployment).
  • Tìm kết hợp 2 bước hiệu quả nhất về mặt vận hành (MOST operationally efficient).

🛠️ Yêu cầu cốt lõi: Kết hợp SAM để kích hoạt gradual deployments (triển khai dần dần) cho Lambda, sử dụng AWS CodeDeploy backend. Điều này cho phép canary deployments (gửi traffic nhỏ đến version mới) kết hợp hooks (pre/post hooks) để test tự động mà không ảnh hưởng toàn bộ hệ thống. Kiến thức dựa trên AWS SAM phiên bản mới nhất (2024-2026), hỗ trợ gradual deployments với các loại như Canary và Linear qua DeploymentPreference property.

✅ Đáp án đúng (Chọn 2)

Các lựa chọn đúng là:

  • Enable gradual deployments through AWS SAM templates.
  • Set the deployment preference type to Canary10Percent30Minutes. Use hooks to test the deployment.

Lý do chọn (giải thích ngắn gọn): ✅ Enable gradual deployments through AWS SAM templates: Kích hoạt gradual deployment trong SAM template bằng thuộc tính DeploymentPreference: Enabled: true trên AWS::Serverless::Function, cho phép CodeDeploy quản lý traffic shift dần dần – hiệu quả vận hành cao vì tự động hóa toàn bộ quy trình test mà không cần can thiệp thủ công.
✅ Set the deployment preference type to Canary10Percent30Minutes. Use hooks to test the deployment: Đây là kiểu Canary deployment lý tưởng cho "small percentage traffic" (10% traffic trong 30 phút đầu), kết hợp hooks (Lambda hooks pre-traffic/post-traffic) để test tự động. Hiệu quả hơn Linear vì ít rủi ro hơn (chỉ test nhỏ, nhanh quyết định rollback nếu fail), phù hợp yêu cầu "test before full deployment".

Kết hợp 2 bước này tạo quy trình tự động, an toàn, tiết kiệm tài nguyên nhất.

📋 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, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phân tích chỉ rõ đúng/sai và lý do dựa trên docs AWS mới nhất.

  • Use AWS SAM CLI commands in AWS CodeDeploy to invoke the Lambda functions to test the deployment.
    ❌ SAI: SAM CLI chỉ dùng để local invoke/test (như sam local invoke), không tích hợp trực tiếp vào CodeDeploy để tự động test deployment. CodeDeploy không hỗ trợ chạy SAM CLI commands như hook – cách này không tự động, không efficient, phải thủ công và không meet gradual traffic testing.

  • Declare the EventInvokeConfig on the Lambda functions in the AWS SAM templates with OnSuccess and OnFailure configurations.
    ❌ SAI: EventInvokeConfig dùng cho async invocation destinations (chuyển event thành công/thất bại đến SQS/SNS/EventBridge), không liên quan đến deployment testing hay traffic shifting. Đây là config runtime cho Lambda events, không hỗ trợ test gradual deployment – không đáp ứng yêu cầu.

  • Enable gradual deployments through AWS SAM templates.
    ✅ ĐÚNG: Trong SAM template (YAML), khai báo DeploymentPreference: Enabled: true trên function để kích hoạt CodeDeploy gradual deployments. Hiệu quả vận hành cao vì tự động hóa traffic shift/test mà không cần config thủ công CodeDeploy riêng – chính là nền tảng cho canary/linear.

  • Set the deployment preference type to Canary10Percent30Minutes. Use hooks to test the deployment.
    ✅ ĐÚNG: Type: Canary10Percent30Minutes gửi 10% traffic đến version mới trong 30 phút, sau đó full nếu pass. Kết hợp hooks (PreTraffic/PostTraffic Lambda) trong SAM để test tự động (ví dụ: integration tests). Phù hợp nhất với "small percentage before full", efficient hơn Linear vì ít traffic expose rủi ro.

  • Set the deployment preference type to Linear10PercentEvery10Minutes. Use hooks to test the deployment.
    ❌ SAI: Linear10PercentEvery10Minutes tăng dần 10% mỗi 10 phút (tổng 10 bước), expose traffic nhiều hơn so với Canary (chỉ test 10% rồi quyết định). Ít efficient hơn cho "small percentage test" vì kéo dài thời gian và rủi ro cao hơn – không phải lựa chọn tối ưu nhất.

📘 Tài liệu tham khảo (Cập nhật AWS 2024-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ụ SAM YAML, hỏi thêm nhé!

Câu 984
A company is using AWS CloudFormation to deploy a two-tier application. The application will use Amazon RDS as its backend database. The company wants a solution that will randomly generate the database password during deployment. The solution also must automatically rotate the database password without requiring changes to the application.

What is the MOST operationally efficient solution that meets these requirements?
  1. A Use an AWS Lambda function as a CloudFormation custom resource to generate and rotate the password.
  2. B Use an AWS Systems Manager Parameter Store resource with the SecureString data type to generate and rotate the password.
  3. C Use a cron daemon on the application’s host to generate and rotate the password.
  4. D Use an AWS Secrets Manager resource to generate and rotate the password.
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 việc triển khai ứng dụng hai tầng (two-tier application) bằng AWS CloudFormation, với Amazon RDS làm cơ sở dữ liệu backend. Yêu cầu chính là:

  • Tự động tạo mật khẩu ngẫu nhiên (randomly generate) cho database trong quá trình triển khai (during deployment).
  • Tự động xoay vòng mật khẩu (automatically rotate) mà không yêu cầu thay đổi code ứng dụng.
    Mục tiêu là tìm giải pháp hiệu quả vận hành nhất (MOST operationally efficient), nghĩa là ưu tiên serverless, tích hợp sẵn, ít bảo trì, scalable và an toàn cao theo best practices AWS.
    🔍 Bối cảnh DevOps: Đây là kịch bản điển hình trong certification DOP-C02 (AWS Certified DevOps Engineer Professional), nhấn mạnh IaC (Infrastructure as Code) với CloudFormation, secrets management và automation rotation cho RDS mà không hardcode credentials vào app.

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

Đáp án đúng: Use an AWS Secrets Manager resource to generate and rotate the password.

Lý do chi tiết:

  • AWS Secrets Manager tích hợp trực tiếp với CloudFormation qua resource AWS::SecretsManager::Secret, cho phép tự động generate mật khẩu ngẫu nhiên khi tạo stack (sử dụng GenerateSecretString).
  • Tự động rotate cho RDS qua tích hợp Lambda function (rotation Lambda được Secrets Manager quản lý), hỗ trợ RDS MySQL/PostgreSQL/SQL Server mà không cần thay đổi ứng dụng – app chỉ cần retrieve secret qua SDK/API (ví dụ: secretsmanager:GetSecretValue).
  • Operationally efficient nhất 🛠️: Serverless, audit logs tự động (CloudTrail), VPC integration, chi phí theo usage, và là best practice AWS đến 2026 (hỗ trợ rotation cho RDS Multi-AZ, Aurora với zero-downtime). Không cần custom code phức tạp.

📋 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/sai dựa trên yêu cầu (generate random + auto rotate + no app changes + efficient).

  • ❌ [SAI] Use an AWS Lambda function as a CloudFormation custom resource to generate and rotate the password.
    Phương án này không efficient nhất vì yêu cầu custom code Lambda (handler Python/Node.js) để generate/rotate, phải tự quản lý rotation schedule (EventBridge), IAM roles phức tạp, và debug khó khăn. CloudFormation custom resource chỉ phù hợp cho logic đặc thù, không phải secrets management tiêu chuẩn. Không đáp ứng "MOST operationally efficient" so với dịch vụ managed như Secrets Manager.

  • ❌ [SAI] Use an AWS Systems Manager Parameter Store resource with the SecureString data type to generate and rotate the password.
    SSM Parameter Store SecureString chỉ lưu trữ secret (có thể generate manual qua CLI), KHÔNG tự động generate random trong CloudFormation và KHÔNG hỗ trợ auto-rotation cho RDS (cần Lambda custom riêng). App phải poll thay đổi (không seamless), thiếu integration sâu với RDS như Secrets Manager. Không đáp ứng yêu cầu auto-rotate mà không thay đổi app.

  • ❌ [SAI] Use a cron daemon on the application’s host to generate and rotate the password.
    Cách thủ công, không scalable: Cron trên EC2 instance yêu cầu quản lý server (patch, scale), generate/rotate bằng script custom (có thể lỗi), và app phải restart/retrieve – vi phạm "no changes to the application". Không serverless, không tích hợp CloudFormation native, rủi ro bảo mật cao (secret trên host). Hoàn toàn không efficient trong môi trường AWS modern.

  • ✅ [ĐÚNG] Use an AWS Secrets Manager secret resource to generate and rotate the password.
    Như đã giải thích ở phần đáp án đúng: Tích hợp hoàn hảo với CloudFormation (Fn::GetAtt để lấy secret ARN/URL), generate random (GenerateSecretString), rotate tự động (enableRotation=true, target RDS), app retrieve động qua ARN. Zero-downtime rotation cho RDS đến 2026.

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

  • AWS Secrets Manager Docs: Rotation for Amazon RDS & CloudFormation Integration.
  • RDS Secrets Rotation: Best Practices.
  • DOP-C02 Exam Guide: Nhấn mạnh Secrets Manager > SSM cho rotation (AWS re:Post & Whitepapers 2025).
  • CloudFormation Sample: Template ví dụ với AWS::SecretsManager::Secret và RDS integration trên AWS Samples GitHub.

Hy vọng phân tích này giúp bạn ôn thi hiệu quả! 🚀 Nếu cần template CloudFormation mẫu, hãy hỏi thêm nhé!

Câu 985
A developer has been asked to create an AWS Lambda function that is invoked any time updates are made to items in an Amazon DynamoDB table. The function has been created, and appropriate permissions have been added to the Lambda execution role. Amazon DynamoDB streams have been enabled for the table, but the function is still not being invoked.

Which option would enable DynamoDB table updates to invoke the Lambda function?
  1. A Change the StreamViewType parameter value to NEW_AND_OLD_IMAGES for the DynamoDB table.
  2. B Configure event source mapping for the Lambda function.
  3. C Map an Amazon Simple Notification Service (Amazon SNS) topic to the DynamoDB streams.
  4. D Increase the maximum runtime (timeout) setting of the Lambda function.
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 một lập trình viên đã tạo một AWS Lambda function để kích hoạt (invoke) mỗi khi có cập nhật (updates) trên các item trong Amazon DynamoDB table. Các bước đã thực hiện bao gồm:

  • Tạo Lambda function thành công.
  • Thêm quyền phù hợp vào Lambda execution role (IAM role).
  • Bật DynamoDB Streams cho table (để ghi lại các thay đổi dưới dạng stream events).

Tuy nhiên, Lambda function vẫn không được invoke khi có thay đổi trên table. Vấn đề cốt lõi là thiếu bước kết nối stream events từ DynamoDB đến Lambda.

Theo kiến thức AWS cập nhật đến năm 2026 (Lambda runtime mới nhất và DynamoDB Streams v2), chỉ bật streams thôi không tự động trigger Lambda. Cần cấu hình thêm để Lambda "lắng nghe" (poll) các events từ stream. Đây là kiến trúc event-driven phổ biến trong serverless, giúp xử lý real-time changes như update, insert, delete trên DynamoDB.

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

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

Configure event source mapping for the Lambda function.

Lý do:

  • Event Source Mapping (ESM) là cơ chế bắt buộc để Lambda tự động poll và xử lý events từ DynamoDB Streams. Khi cấu hình ESM, bạn chỉ định ARN của DynamoDB Stream làm event source, Lambda sẽ tự động tạo consumer để đọc batch events và invoke function.
  • Các bước đã làm (permissions, enable streams) chỉ là prerequisite, thiếu ESM nên Lambda không nhận events.
  • 🛠️ Cách thực hiện: Sử dụng AWS Console, CLI (aws lambda create-event-source-mapping), hoặc CDK/Terraform với StartingPosition: LATEST hoặc TRIM_HORIZON. Hỗ trợ batch size lên đến 10,000 (tăng từ 2024).

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

  • ❌ [SAI] Change the StreamViewType parameter value to NEW_AND_OLD_IMAGES for the DynamoDB table.
    Phương án này không giải quyết vấn đề vì StreamViewType chỉ quyết định loại dữ liệu stream (NEW_IMAGE: chỉ dữ liệu mới; OLD_IMAGE: chỉ cũ; NEW_AND_OLD_IMAGES: cả hai). Streams đã enabled (dù loại nào), Lambda vẫn cần ESM để kết nối. Thay đổi này chỉ hữu ích nếu function cần full data, nhưng không trigger invoke. (Mặc định là NEW_AND_OLD_IMAGES từ 2023).

  • ✅ [ĐÚNG] Configure event source mapping for the Lambda function.
    Như đã giải thích ở trên: Đây là bước thiếu thiết yếu. ESM tạo liên kết trực tiếp DynamoDB Stream → Lambda, hỗ trợ on-demand mode (mới 2025) cho scale tự động. Không có ESM, Lambda không poll stream dù permissions OK.

  • ❌ [SAI] Map an Amazon Simple Notification Service (Amazon SNS) topic to the DynamoDB streams.
    Hoàn toàn không liên quan. DynamoDB Streams không hỗ trợ publish trực tiếp đến SNS. SNS dùng cho pub/sub messaging, không phải stream processing. Nếu dùng SNS, phải qua Lambda trung gian hoặc Kinesis, làm phức tạp hóa architecture không cần thiết.

  • ❌ [SAI] Increase the maximum runtime (timeout) setting of the Lambda function.
    Timeout (tối đa 15 phút từ 2024) chỉ ảnh hưởng thời gian chạy function sau khi invoke, không liên quan đến việc invoke ban đầu. Vấn đề ở đây là không có trigger events đến Lambda, nên tăng timeout vô ích.

🛠️ Khuyến nghị thực hành: Sau khi config ESM, kiểm tra CloudWatch Logs/Metrics (IteratorAge) để monitor lag. Sử dụng Provisioned Concurrency cho high-throughput workloads (cập nhật 2026). Nếu gặp lỗi permissions, verify lambda:DynamoDBExecutionRole policy!

Câu 986
A developer needs to deploy an application running on AWS Fargate using Amazon ECS. The application has environment variables that must be passed to a container for the application to initialize.

How should the environment variables be passed to the container?
  1. A Define an array that includes the environment variables under the environment parameter within the service definition.
  2. B Define an array that includes the environment variables under the environment parameter within the task definition.
  3. C Define an array that includes the environment variables under the entryPoint parameter within the task definition.
  4. D Define an array that includes the environment variables under the entryPoint parameter within the service definition.
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 việc triển khai ứng dụng trên AWS Fargate sử dụng Amazon ECS (Elastic Container Service). Nhà phát triển cần truyền biến môi trường (environment variables) vào container để ứng dụng có thể khởi tạo đúng cách.

📌 Chi tiết vấn đề:

  • AWS Fargate là chế độ serverless của ECS, nơi bạn định nghĩa task (nhiệm vụ) qua task definition (định nghĩa nhiệm vụ) và quản lý service (dịch vụ) qua service definition.
  • Environment variables là các biến như DB_PASSWORD hoặc API_KEY cần được inject vào container lúc runtime.
  • Câu hỏi yêu cầu cách chính xác để định nghĩa mảng (array) chứa các biến này trong cấu hình ECS, dựa trên tài liệu AWS mới nhất (cập nhật đến 2024-2026, ECS API version 1.4.0+).

🛠️ Ngữ cảnh kỹ thuật: Task definition chứa chi tiết container (image, CPU, memory, environment vars), trong khi service definition chỉ định số lượng task, load balancer, và scaling, nhưng KHÔNG chứa environment variables trực tiếp.

✅ Đáp án đúng

Define an array that includes the environment variables under the environment parameter within the task definition.

Lý do chọn đáp án này:

  • Trong ECS, environment variables phải được định nghĩa trong task definition (phần containerDefinitions > environment), dưới tham số environment dạng mảng các object {name: "VAR_NAME", value: "var_value"}.
  • Task definition là nơi cố định cấu hình container, bao gồm env vars, secrets (SSM/ Secrets Manager). Service chỉ tham chiếu task definition này.
  • ✅ Điều này đảm bảo env vars được inject tự động vào container khi task chạy trên Fargate, hỗ trợ khởi tạo app an toàn (không hardcode).

📋 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, giữ nguyên văn bản gốc bằng tiếng Anh:

  • ❌ Define an array that includes the environment variables under the environment parameter within the service definition.
    Sai vì: Service definition (CreateService API) không có tham số environment để định nghĩa env vars. Service chỉ quản lý lifecycle task (desiredCount, deployment), không override container config. Nếu dùng, ECS sẽ báo lỗi validation. Task definition mới là nơi đúng.

  • ✅ Define an array that includes the environment variables under the environment parameter within the task definition.
    Đúng vì: Như đã giải thích ở trên. Đây là cách chuẩn theo ECS docs: taskDefinition > containerDefinitions[0] > environment: [{name: "...", value: "..."}]. Hỗ trợ Fargate Spot/Run, cập nhật đến API 2026.

  • ❌ Define an array that includes the environment variables under the entryPoint parameter within the task definition.
    Sai vì: entryPoint trong task definition chỉ dùng để override entrypoint của Docker image (ví dụ: thay /bin/sh bằng script custom), dạng array strings như ["/app/start.sh"]. Không hỗ trợ env vars – nhầm lẫn cơ bản về tham số container.

  • ❌ Define an array that includes the environment variables under the entryPoint parameter within the service definition.
    Sai vì: Service definition hoàn toàn không có entryPoint. Đây là thuộc tính của task definition/container. Sử dụng sẽ gây lỗi "InvalidParameter" khi register service.

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

🧩 Mẹo DevOps: Sử dụng AWS Secrets Manager hoặc SSM Parameter Store cho env vars nhạy cảm thay vì plain text để tăng security (inject via secrets array). Test bằng aws ecs register-task-definition!

Câu 987 Chọn nhiều đáp án
A development team maintains a web application by using a single AWS RDS, template. The template defines web servers and an Amazon RDS database. The team uses the CloudFormation template to deploy the CloudFormation stack to different environments.

During a recent application deployment, a developer caused the primary development database to be dropped and recreated. The result of this incident was a loss of data. The team needs to avoid accidental database deletion in the future.

Which solutions will meet these requirements? (Choose two.)
  1. A Add a CloudFormation DeletionPolicy attribute with the Retain value to the database resource.
  2. B Update the CloudFormation stack policy to prevent updates to the database.
  3. C Modify the database to use a Multi-AZ deployment.
  4. D Create a CloudFormation stack set for the web application and database deployments.
  5. E Add a CloudFormation DeletionPolicy attribute with the Retain value to the stack.
Xem giải thích

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

Câu hỏi mô tả một tình huống thực tế trong AWS CloudFormation: Đội phát triển sử dụng một template CloudFormation duy nhất để định nghĩa web servers và Amazon RDS database, sau đó deploy stack này vào các môi trường khác nhau (như dev, staging, prod). Vấn đề xảy ra: Trong lần deploy gần đây, một developer vô tình khiến database chính (primary development database) bị drop (xóa) và recreate (tạo lại), dẫn đến mất dữ liệu.

Mục tiêu: Tìm hai giải pháp để tránh xóa database ngẫu nhiên trong tương lai, đặc biệt khi stack bị update hoặc delete. Đây là vấn đề phổ biến trong DevOps khi CloudFormation tự động thay đổi resources (như RDS instance) nếu template thay đổi, có thể dẫn đến replacement/delete. Giải pháp cần tập trung vào bảo vệ resource cụ thể mà không ảnh hưởng toàn bộ stack.

✅ Đáp án đúng (Chọn TWO)

Hai đáp án đúng là:

  1. Add a CloudFormation DeletionPolicy attribute with the Retain value to the database resource.
  2. Update the CloudFormation stack policy to prevent updates to the database.

Lý do lựa chọn:

  • 🛡️ DeletionPolicy: Retain trên resource RDS cụ thể sẽ giữ nguyên database ngay cả khi stack bị delete hoặc update yêu cầu thay thế resource (replacement). Điều này ngăn chặn việc drop/recreate ngẫu nhiên, dữ liệu được bảo toàn vì RDS instance không bị xóa.
  • 📜 Stack policy cho phép chặn updates (bao gồm replacement/delete) trên resource database, yêu cầu phê duyệt thủ công (override) nếu cần thay đổi. Kết hợp hai cách này đảm bảo bảo vệ kép: chống delete khi xóa stack và chống update nguy hiểm.

📋 Phân tích chi tiết 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 rõ ràng, giữ nguyên văn bản gốc tiếng Anh. Mỗi phương án được đánh giá đúng/sai dựa trên tài liệu AWS CloudFormation mới nhất (cập nhật đến 2026, không thay đổi cơ bản so với 2023-2025).

  • ✅ Add a CloudFormation DeletionPolicy attribute with the Retain value to the database resource.
    Đúng: Thuộc tính DeletionPolicy: Retain áp dụng riêng cho resource RDS trong template. Khi stack delete hoặc update (replacement), CloudFormation sẽ giữ nguyên instance RDS thay vì xóa. Dữ liệu không mất, resource vẫn tồn tại ngoài stack. Đây là giải pháp trực tiếp, khuyến nghị cho production/dev databases. (Ví dụ: Trong YAML template, thêm DeletionPolicy: Retain vào RDS resource.)

  • ✅ Update the CloudFormation stack policy to prevent updates to the database.
    Đúng: Stack policy (file JSON riêng) có thể định nghĩa Statement với Effect: Deny cho actions như Update:Replace hoặc Delete trên resource database cụ thể (qua LogicalResourceId). Khi update stack, CloudFormation chặn thay đổi, buộc developer override thủ công. Ngăn ngừa tai nạn từ template changes. (Ví dụ: {"Statement": [{"Effect": "Deny", "Principal": "*", "Action": "Update:*", "Resource": "DBInstance"}]}.)

  • ❌ Modify the database to use a Multi-AZ deployment.
    Sai: Multi-AZ chỉ tăng high availability (HA) bằng standby replica, tự động failover nếu primary fail. Không liên quan đến ngăn xóa resource từ CloudFormation actions. RDS vẫn bị drop/recreate nếu template update yêu cầu replacement.

  • ❌ Create a CloudFormation stack set for the web application and database deployments.
    Sai: StackSets dùng để deploy stack cross-account/region một cách nhất quán. Không có tính năng bảo vệ resource khỏi delete/update. Vẫn gặp vấn đề drop database nếu template sai, chỉ thay đổi cách quản lý deployment.

  • ❌ Add a CloudFormation DeletionPolicy attribute with the Retain value to the stack.
    Sai: DeletionPolicy chỉ áp dụng cho resources, không tồn tại cho toàn bộ stack. Stack không có thuộc tính này; nếu thêm sẽ bị lỗi validate. Không bảo vệ database cụ thể mà chỉ ảnh hưởng toàn bộ (không khả thi).

📘 Tài liệu tham khảo (AWS chính thức, cập nhật mới nhất 2026)

Lời khuyên DevOps 🚀: Luôn test stack updates với ChangeSet trước khi execute, kết hợp IAM roles hạn chế cho developers. Nếu cần, dùng AWS Service Catalog để kiểm soát templates!

Câu 988
A developer is storing sensitive data generated by an application in Amazon S3. The developer wants to encrypt the data at rest. A company policy requires an audit trail of when the AWS Key Management Service (AWS KMS) key was used and by whom.

Which encryption option will meet these requirements?
  1. A Server-side encryption with Amazon S3 managed keys (SSE-S3)
  2. B Server-side encryption with AWS KMS managed keys (SSE-KMS)
  3. C Server-side encryption with customer-provided keys (SSE-C)
  4. D Server-side encryption with self-managed keys
Xem giải thích

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

Câu hỏi xoay quanh việc mã hóa dữ liệu tại chỗ (at-rest encryption) cho dữ liệu nhạy cảm được lưu trữ trong Amazon S3. Một lập trình viên cần chọn phương án mã hóa server-side encryption phù hợp, đồng thời tuân thủ chính sách công ty yêu cầu audit trail (dấu vết kiểm toán) về thời điểm và người dùng nào đã sử dụng AWS KMS key.

🛠️ Yêu cầu chính:

  • Mã hóa dữ liệu trong S3.
  • Sử dụng AWS KMS (AWS Key Management Service) để quản lý khóa mã hóa.
  • CloudTrail phải ghi lại lịch sử sử dụng key (khi nào, bởi ai) để kiểm toán.

Đây là tình huống thực tế trong DevOps, nơi bảo mật dữ liệu nhạy cảm cần tích hợp audit logging từ KMS (cập nhật đến 2026, AWS vẫn sử dụng CloudTrail để log các API calls liên quan đến KMS keys trong SSE-KMS).

✅ Đáp án đúng: Server-side encryption with AWS KMS managed keys (SSE-KMS)

Lý do lựa chọn:

  • SSE-KMS sử dụng khóa KMS (có thể là AWS-managed hoặc customer-managed keys), tự động mã hóa dữ liệu tại server-side trong S3.
  • Audit trail đầy đủ: Mọi hoạt động sử dụng key (GetObject, PutObject, v.v.) được CloudTrail ghi log chi tiết, bao gồm user/ARN, thời gian, IP, và API called. Điều này đáp ứng chính xác yêu cầu chính sách công ty.
  • ✅ Hoàn hảo cho dữ liệu nhạy cảm, dễ tích hợp với IAM policies và KMS key policies.

📋 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/sai dựa trên tính năng mã hóa S3 và khả năng audit KMS (dữ liệu cập nhật AWS 2026).

  • ❌ Server-side encryption with Amazon S3 managed keys (SSE-S3)
    Sai vì: SSE-S3 sử dụng khóa do S3 tự quản lý (không liên quan đến KMS). Dữ liệu được mã hóa at-rest, nhưng KHÔNG có audit trail từ KMS qua CloudTrail. S3 chỉ log metadata qua S3 access logs, không ghi chi tiết key usage (thời gian/bởi ai). Không đáp ứng yêu cầu chính sách.

  • ✅ Server-side encryption with AWS KMS managed keys (SSE-KMS)
    Đúng vì: Như đã giải thích ở trên. SSE-KMS tích hợp trực tiếp KMS keys, mọi request mã hóa/giải mã đều gọi KMS API → CloudTrail log đầy đủ (events như Decrypt, GenerateDataKey). Hỗ trợ cả symmetric/asymmetric keys, và dual-layer encryption nếu cần.

  • ❌ Server-side encryption with customer-provided keys (SSE-C)
    Sai vì: SSE-C yêu cầu khách hàng cung cấp khóa mỗi lần (per-object), KHÔNG sử dụng KMS. Khóa do ứng dụng tự quản lý (ví dụ: từ HSM). Mã hóa at-rest tốt, nhưng KHÔNG có audit trail từ KMS vì không gọi KMS API. CloudTrail không log key usage.

  • ❌ Server-side encryption with self-managed keys
    Sai vì: Đây KHÔNG phải option chuẩn của S3 (AWS không định nghĩa "self-managed keys" riêng). Có thể ám chỉ customer-managed keys ngoài KMS (tương tự SSE-C), nhưng vẫn thiếu audit trail KMS. S3 chỉ hỗ trợ SSE-S3/SSE-KMS/SSE-C chính thức; phương án này mơ hồ và không đảm bảo logging qua CloudTrail.

📘 Tài liệu tham khảo

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

Câu 989
A company has an ecommerce application. To track product reviews, the company’s development team uses an Amazon DynamoDB table.

Every record includes the following:

•A Review ID, a 16-digit universally unique identifier (UUID)
•A Product ID and User ID, 16-digit UUIDs that reference other tables
•A Product Rating on a scale of 1-5
•An optional comment from the user

The table partition key is the Review ID. The most performed query against the table is to find the 10 reviews with the highest rating for a given product.

Which index will provide the FASTEST response for this query?
  1. A A global secondary index (GSI) with Product ID as the partition key and Product Rating as the sort key
  2. B A global secondary index (GSI) with Product ID as the partition key and Review ID as the sort key
  3. C A local secondary index (LSI) with Product ID as the partition key and Product Rating as the sort key
  4. D A local secondary index (LSI) with Review ID as the partition key and Product ID as the sort key
Xem giải thích

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

Câu hỏi xoay quanh một ứng dụng thương mại điện tử sử dụng bảng Amazon DynamoDB để lưu trữ đánh giá sản phẩm (reviews). Mỗi bản ghi (record) bao gồm:

  • Review ID: Khóa phân vùng chính (partition key) của bảng, là UUID 16 chữ số duy nhất.
  • Product ID và User ID: UUID tham chiếu đến các bảng khác.
  • Product Rating: Điểm đánh giá từ 1-5.
  • Comment: Bình luận tùy chọn từ người dùng.

Truy vấn phổ biến nhất là tìm 10 đánh giá có điểm số cao nhất (highest rating) cho một Product ID cụ thể. Vì partition key là Review ID (không liên quan đến Product ID), truy vấn này không thể thực hiện hiệu quả trên bảng chính mà cần sử dụng index phù hợp để đảm bảo tốc độ nhanh nhất (FASTEST response).

DynamoDB hỗ trợ Local Secondary Index (LSI) và Global Secondary Index (GSI):

  • LSI: Phải chia sẻ partition key với bảng chính (Review ID), chỉ thay đổi sort key, và phải tạo ngay khi tạo bảng.
  • GSI: Có thể có partition key và sort key hoàn toàn khác, linh hoạt hơn, nhưng tốn chi phí đọc/ghi cao hơn.

Mục tiêu: Query theo Product ID (partition key của index), sắp xếp giảm dần theo Product Rating (sort key) để lấy top 10 nhanh chóng. 🛠️

✅ Đáp án đúng

A global secondary index (GSI) with Product ID as the partition key and Product Rating as the sort key

Lý do lựa chọn:

  • GSI cho phép sử dụng Product ID làm partition key, nên tất cả dữ liệu cho một Product ID sẽ nằm trong cùng một partition, query nhanh (O(1) cho partition lookup).
  • Product Rating làm sort key cho phép sắp xếp giảm dần (descending order) để lấy chính xác top 10 rating cao nhất bằng Query operation với ScanIndexForward=false và Limit=10.
  • Đây là cách tối ưu nhất về tốc độ cho truy vấn lặp lại cao, tuân thủ best practices DynamoDB (single-digit millisecond latency). Không cần scan toàn bộ bảng hoặc filter kém hiệu quả. 📈

📝 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, giữ nguyên văn bản gốc:

  • A global secondary index (GSI) with Product ID as the partition key and Product Rating as the sort key ✅
    Đúng: Như giải thích ở trên, GSI linh hoạt thay đổi partition key/sort key hoàn toàn. Query sẽ siêu nhanh vì khớp chính xác pattern: partition theo Product ID + sort theo rating. Hoàn hảo cho top-N queries. 🚀

  • A global secondary index (GSI) with Product ID as the partition key and Review ID as the sort key ❌
    Sai: GSI với partition key Product ID tốt cho query theo Product ID, nhưng sort key là Review ID (UUID ngẫu nhiên) không giúp sắp xếp theo rating. Để lấy top 10 rating cao nhất, phải dùng FilterExpression sau Query (chậm, tốn RCU cao vì scan toàn partition). Không phải FASTEST. 😞

  • A local secondary index (LSI) with Product ID as the partition key and Product Rating as the sort key ❌
    Sai: LSI bắt buộc phải dùng partition key giống bảng chính (Review ID), không thể dùng Product ID làm partition key. Nếu thử tạo, DynamoDB sẽ báo lỗi. Không khả thi về mặt kỹ thuật. 🚫

  • A local secondary index (LSI) with Review ID as the partition key and Product ID as the sort key ❌
    Sai: LSI hợp lệ (partition key=Review ID), nhưng query phải bắt đầu bằng Review ID (query chính). Để tìm theo Product ID, phải dùng FilterExpression trên toàn bảng (rất chậm cho dữ liệu lớn, tốn RCU). Không hỗ trợ query trực tiếp theo Product ID như yêu cầu. 🐌

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

  • AWS DynamoDB Developer Guide: Secondary Indexes - Giải thích GSI vs LSI, query patterns.
  • Best Practices for Designing DynamoDB Data Models: GSI for Flexible Queries - Khuyến nghị GSI cho partition key khác table chính, sort key cho top-N.
  • DynamoDB Query API Reference: Hỗ trợ Limit, ScanIndexForward cho top results (không thay đổi đến 2026).
  • Exam Topic DOP-C02: DynamoDB indexing strategies. Kiểm tra thực tế qua AWS Console hoặc CDK/Serverless Framework. 🔍
Câu 990
A company needs to distribute firmware updates to its customers around the world.

Which service will allow easy and secure control of the access to the downloads at the lowest cost?
  1. A Use Amazon CloudFront with signed URLs for Amazon S3.
  2. B Create a dedicated Amazon CloudFront Distribution for each customer.
  3. C Use Amazon CloudFront with AWS Lambda@Edge.
  4. D Use Amazon API Gateway and AWS Lambda to control access to an S3 bucket.
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 việc phân phối firmware updates (cập nhật firmware) cho khách hàng trên toàn thế giới một cách dễ dàng, an toàn và chi phí thấp nhất. 🛡️️ Công ty cần một dịch vụ AWS cho phép kiểm soát truy cập (access control) bảo mật đến các file tải xuống, đồng thời tận dụng khả năng phân phối nội dung toàn cầu với độ trễ thấp và chi phí tối ưu. Đây là tình huống điển hình trong DevOps khi xử lý nội dung tĩnh lớn (như firmware), yêu cầu CDN (Content Delivery Network) kết hợp bảo mật mà không làm tăng chi phí không cần thiết.

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

Đáp án đúng: Use Amazon CloudFront with signed URLs for Amazon S3.
🧠️ Lý do chi tiết:

  • Amazon CloudFront là dịch vụ CDN toàn cầu của AWS, cache nội dung từ Amazon S3 tại các edge location gần người dùng, giúp phân phối firmware nhanh chóng, đáng tin cậy trên toàn thế giới với độ trễ thấp.
  • Signed URLs (URL có chữ ký) cho phép tạo liên kết tạm thời (pre-signed) đến object S3 qua CloudFront, kiểm soát chính xác thời gian truy cập, IP nguồn hoặc điều kiện khác mà không cần public bucket. Điều này đảm bảo bảo mật cao (không ai có URL có thể truy cập vĩnh viễn) và dễ dàng triển khai (tạo URL bằng AWS SDK/CLI).
  • Chi phí thấp nhất: CloudFront tính phí theo traffic và request (pay-as-you-go), không cần tài nguyên luôn chạy; S3 lưu trữ rẻ; signed URLs không tốn thêm chi phí đáng kể. Phù hợp cập nhật AWS 2024-2026 với hỗ trợ OAC (Origin Access Control) tích hợp.
    Đây là giải pháp best practice cho phân phối nội dung private toàn cầu. 🚀

📋 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, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá đúng/sai với lý do cụ thể dựa trên kiến thức AWS mới nhất (tính đến 2026):

  • ✅ Use Amazon CloudFront with signed URLs for Amazon S3.
    Đúng vì như đã giải thích ở trên: Kết hợp CDN toàn cầu + bảo mật tạm thời + chi phí tối ưu (traffic-based pricing). Signed URLs hỗ trợ CloudFront Field-Level Encryption và tích hợp IAM policies mới nhất, lý tưởng cho firmware updates lớn.

  • ❌ Create a dedicated Amazon CloudFront Distribution for each customer.
    Sai vì tạo distribution riêng cho từng khách hàng sẽ tốn kém cực kỳ (mỗi distribution có chi phí cố định ~$0.085/tháng + traffic), khó quản lý scale (hàng nghìn distribution), và không cần thiết cho kiểm soát truy cập. CloudFront hỗ trợ shared distribution với signed cookies/URLs hiệu quả hơn.

  • ❌ Use Amazon CloudFront with AWS Lambda@Edge.
    Sai vì Lambda@Edge thêm độ phức tạp và chi phí cao (chạy code tại edge, tính phí invocation + duration), chỉ phù hợp customize phức tạp (như auth động). Signed URLs đơn giản hơn, rẻ hơn cho kiểm soát truy cập cơ bản đến S3. AWS khuyến nghị tránh Lambda@Edge nếu không cần thiết (theo best practices 2025).

  • ❌ Use Amazon API Gateway and AWS Lambda to control access to an S3 bucket.
    Sai vì API Gateway + Lambda là cho API REST/HTTP, không phải CDN nên kém hiệu quả phân phối file lớn toàn cầu (proxy traffic qua region, độ trễ cao, chi phí invocation cao ~$3.50/million requests). Không tận dụng edge caching như CloudFront, vi phạm yêu cầu "lowest cost" và "distribute around the world".

📘 Tài liệu tham khảo

  • AWS Documentation: CloudFront Signed URLs (cập nhật 2025).
  • S3 Presigned URLs with CloudFront.
  • AWS Well-Architected Framework: Pillar Reliability & Cost Optimization (2026 edition).
  • Exam Guide DOP-C02: Content Delivery & Security (AWS Certified DevOps Engineer Professional).

Hy vọng phân tích này giúp bạn ôn thi hiệu quả! 💪 Nếu cần thêm case study, hãy hỏi nhé.