Ngân hàng đề — AWS Certified Developer Associate
Tìm thấy 1356 câu.
Which solution will meet these requirements?
- A Create an Amazon API Gateway REST API. Create an AWS Global Accelerator standard accelerator to resolve requests to the API. Configure endpoint groups on the accelerator. Attach listeners for each country and language.
- B Store the content in a centralized Amazon S3 bucket. Enable S3 Transfer Acceleration on the bucket. Create an Amazon Route 53 hosted zone that includes the endpoint for the S3 bucket. Create records in Route 53 that use geoproximity and geolocation routing policies.
- C Create an Amazon API Gateway REST API. Connect the REST API to AWS WAF. Use geo match statements and regex match statements to allow or deny requests based on the labels returned from web request evaluations.
- D Configure an Amazon CloudFront distribution that uses the application as an origin. Configure the distribution to forward the Accept-Language header and the CloudFront-Viewer-Country header to the origin.
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 một ứng dụng toàn cầu (global application) để phân phối nội dung (content) đến người dùng ở nhiều quốc gia khác nhau. Yêu cầu chính bao gồm:
- Phục vụ nội dung cụ thể dựa trên quốc gia (country) của người dùng và ngôn ngữ chính (primary language) của họ.
- Đảm bảo độ tin cậy cao (reliably) và độ trễ thấp (low latency). 📌 Thách thức cốt lõi: Cần một giải pháp phân phối nội dung động (dynamic content personalization) theo vị trí địa lý và ngôn ngữ, đồng thời tận dụng edge computing để giảm latency toàn cầu. Giải pháp phải hỗ trợ kiến trúc serverless hoặc CDN hiện đại của AWS (cập nhật đến 2026, với CloudFront hỗ trợ Lambda@Edge và custom headers mạnh mẽ hơn).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Configure an Amazon CloudFront distribution that uses the application as an origin. Configure the distribution to forward the Accept-Language header and the CloudFront-Viewer-Country header to the origin.
Lý do chọn đáp án này 🛠️:
- CloudFront là CDN toàn cầu của AWS với hơn 600 edge locations (cập nhật 2026), đảm bảo low latency bằng cách cache và phục vụ nội dung gần người dùng nhất.
- Forward headers quan trọng:
Accept-Language: Header từ browser của user, chỉ ngôn ngữ ưu tiên (ví dụ: vi-VN cho tiếng Việt).CloudFront-Viewer-Country: Header tự động do CloudFront thêm, xác định quốc gia dựa trên IP (chuẩn ISO 3166-1 alpha-2, độ chính xác cao).
- Origin (ứng dụng backend) nhận headers này để tùy chỉnh nội dung động (ví dụ: render trang web theo ngôn ngữ/quốc gia).
- Reliability: Tự động failover, health checks, và tích hợp OAC/OAI cho bảo mật.
- Đây là giải pháp tối ưu, scalable cho global apps, phù hợp best practices AWS Well-Architected Framework (Reliability & Performance Efficiency pillars).
📋 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. Tôi giữ nguyên văn bản gốc bằng tiếng Anh, đánh dấu ✅ (đúng) hoặc ❌ (sai), và giải thích lý do bằng tiếng Việt với emoji minh họa.
-
Create an Amazon API Gateway REST API. Create an AWS Global Accelerator standard accelerator to resolve requests to the API. Configure endpoint groups on the accelerator. Attach listeners for each country and language. ❌ Phương án SAI 🧨:
- AWS Global Accelerator tối ưu traffic đến endpoints regional (như EC2/ALB), nhưng không hỗ trợ listeners granular per country/language. Endpoint groups chỉ định khu vực (regions), không phải quốc gia cụ thể.
- API Gateway phù hợp API management, nhưng thiếu edge caching toàn cầu cho low latency. Không forward language headers tự nhiên.
- Không đáp ứng content personalization theo yêu cầu, chỉ routing cơ bản.
-
Store the content in a centralized Amazon S3 bucket. Enable S3 Transfer Acceleration on the bucket. Create an Amazon Route 53 hosted zone that includes the endpoint for the S3 bucket. Create records in Route 53 that use geoproximity and geolocation routing policies. ❌ Phương án SAI 🚫:
- S3 + Transfer Acceleration chỉ cho static content upload/download nhanh, không xử lý dynamic content dựa trên language (S3 không parse headers).
- Route 53 geoproximity/geolocation chỉ routing DNS tại resolve time (dựa IP), không personalize per request. Không có cơ chế forward language.
- Centralized bucket gây high latency cho global users (không edge cache), vi phạm yêu cầu low latency/reliability.
-
Create an Amazon API Gateway REST API. Connect the REST API to AWS WAF. Use geo match statements and regex match statements to allow or deny requests based on the labels returned from web request evaluations. ❌ Phương án SAI 🔒:
- WAF (Web Application Firewall) dùng cho security (block/allow dựa geo/IP), không phải serve specific content. Geo match chỉ deny/allow, không customize response.
- API Gateway thiếu global edge như CloudFront, latency cao hơn. Regex không handle language headers hiệu quả.
- Không đáp ứng personalization mà chỉ filtering, không reliable cho content delivery.
-
Configure an Amazon CloudFront distribution that uses the application as an origin. Configure the distribution to forward the Accept-Language header and the CloudFront-Viewer-Country header to the origin. ✅ Phương án ĐÚNG 🌟 (như đã giải thích ở trên).
📘 Tài liệu tham khảo (AWS Docs cập nhật 2026)
- CloudFront Headers Documentation – Chi tiết forward
Accept-LanguagevàCloudFront-Viewer-Country. - CloudFront Custom Origins – Hướng dẫn personalize content.
- AWS Global Accelerator vs CloudFront – So sánh rõ ràng.
- AWS Well-Architected: Global Apps Lens.
Giải pháp này là best practice cho global content delivery! 🚀 Nếu cần thêm ví dụ code Terraform/ CDK, hãy hỏi nhé!
The developer needs to create an IAM policy to associate with the Lambda function's execution role.
Which IAM policy statement will meet these requirements?
-
A
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:BatchGetItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:UpdateItem" ], "Resource": "arn:aws:dynamodb:eu-east-1:321456987012:table/DailyOrders" } ] }
-
B
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan" ], "Resource": "arn:aws:dynamodb:eu-east-1:321456987012:table/DailyOrders" } ] }
-
C
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "dynamodb:Query", "dynamodb:Scan", "dynamodb:PutItem", "dynamodb:UpdateItem" ], "Resource": "arn:aws:dynamodb:eu-east-1:321456987012:table/DailyOrders" } ] }
-
D
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:BatchGetItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:Scan" ], "Resource": "arn:aws:dynamodb:eu-east-1:321456987012:table/DailyOrders" } ] }
Xem giải thích
📘 Phân tích câu hỏi
Câu hỏi yêu cầu tạo một chính sách IAM (Identity and Access Management) để cấp quyền cho một hàm AWS Lambda thực hiện các hoạt động đọc trên bảng DynamoDB tên là DailyOrders, nhưng không được thực hiện các hoạt động ghi.
✅ Yêu cầu cụ thể:
- Hàm Lambda phải có thể thực hiện các hoạt động đọc trên bảng
DailyOrders. - Hàm Lambda không được thực hiện các hoạt động ghi trên bảng
DailyOrders.
🧩 Các lựa chọn và phân tích
Lựa chọn 1:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:BatchWriteItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem"
],
"Resource": "arn:aws:dynamodb:eu-east-1:321456987012:table/DailyOrders"
}
]
}
❌ Sai, vì chính sách này cho phép thực hiện cả các hoạt động ghi (dynamodb:BatchWriteItem, dynamodb:PutItem, dynamodb:UpdateItem) ngoài các hoạt động đọc.
Lựa chọn 2:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:eu-east-1:321456987012:table/DailyOrders"
}
]
}
❌ Sai, vì chính sách này cũng cho phép thực hiện hoạt động ghi (dynamodb:PutItem) ngoài các hoạt động đọc.
Lựa chọn 3:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:PutItem",
"dynamodb:UpdateItem"
],
"Resource": "arn:aws:dynamodb:eu-east-1:321456987012:table/DailyOrders"
}
]
}
❌ Sai, vì chính sách này từ chối (Deny) các hoạt động chỉ định, không cấp quyền thực hiện các hoạt động đọc (dynamodb:GetItem, dynamodb:BatchGetItem).
Lựa chọn 4:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:eu-east-1:321456987012:table/DailyOrders"
}
]
}
✅ Đúng, vì chính sách này chỉ cho phép thực hiện các hoạt động đọc trên bảng DailyOrders mà không cấp quyền cho các hoạt động ghi.
📘 Tài liệu tham khảo:
🛠️ Kết luận:
Lựa chọn 4 là chính sách IAM phù hợp để đáp ứng yêu cầu của bài toán. Chính sách này đảm bảo rằng hàm Lambda có thể thực hiện các hoạt động đọc trên bảng DailyOrders mà không có quyền thực hiện các hoạt động ghi.
The developer must use the built-in authorizer and must avoid managing the code with custom logic. The developer needs to define an API route that is available at /auth to test the authorizer configuration.
Which solution will meet these requirements?
- A Create a WebSocket API and the /auth route. Configure and attach the JWT authorizer to the API. Deploy the API.
- B Create a WebSocket API and the /auth route. Create and configure an AWS Lambda authorizer. Attach the Lambda authorizer to the API. Deploy the API.
- C Create an HTTP API and the /auth route. Create and configure an AWS Lambda authorizer. Attach the Lambda authorizer to the /auth route. Deploy the API.
- D Create an HTTP API and the /auth route. Configure the JWT authorizer. Attach the JWT authorizer to the /auth route. Deploy the API.
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 triển khai và kiểm tra JWT (JSON Web Token) authorization trên Amazon API Gateway cho một ứng dụng mới. Developer cần:
- Tạo một API Gateway API.
- Sử dụng built-in authorizer (tích hợp sẵn của AWS, không cần viết code custom logic để quản lý).
- Tránh hoàn toàn việc quản lý code tùy chỉnh (như Lambda authorizer).
- Định nghĩa một route cụ thể là /auth để test cấu hình authorizer.
- Cuối cùng là deploy API để route hoạt động.
Yêu cầu nhấn mạnh vào JWT authorizer built-in, chỉ khả dụng trên HTTP APIs (không phải REST APIs cổ điển hoặc WebSocket APIs). Đây là tính năng hiện đại của AWS API Gateway (cập nhật từ 2021 và ổn định đến 2026), giúp đơn giản hóa authorization với JWT từ các identity provider như Amazon Cognito, Auth0, hoặc tự cấp.
✅ Đáp án đúng và lý do lựa chọn
Create an HTTP API and the /auth route. Configure the JWT authorizer. Attach the JWT authorizer to the /auth route. Deploy the API.
Lý do chọn đáp án này 🛠️:
- HTTP API là loại API hỗ trợ JWT authorizer built-in (tích hợp sẵn, không cần code custom). Bạn chỉ cần cấu hình issuer URL, audience, và các tham số JWT mà không quản lý logic.
- Tạo route /auth, attach JWT authorizer trực tiếp vào route này, rồi deploy để test (ví dụ: gửi request với header
Authorization: Bearer <JWT>). - Hoàn toàn phù hợp yêu cầu: built-in, no custom code, test tại /auth. Đây là cách tối ưu, chi phí thấp hơn REST APIs (theo pricing AWS 2026).
📋 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ài liệu AWS mới nhất (API Gateway HTTP APIs v2.0+).
-
❌ Create a WebSocket API and the /auth route. Configure and attach the JWT authorizer to the API. Deploy the API.
Sai vì: WebSocket APIs không hỗ trợ JWT authorizer built-in. WebSocket chỉ dùng cho kết nối real-time hai chiều, không có route HTTP chuẩn như /auth và không tích hợp JWT authorizer. Phải dùng Lambda authorizer (custom code), vi phạm yêu cầu "built-in, no custom logic". -
❌ Create a WebSocket API and the /auth route. Create and configure an AWS Lambda authorizer. Attach the Lambda authorizer to the API. Deploy the API.
Sai vì: WebSocket không phù hợp cho route HTTP /auth (WebSocket dùng $connect/$disconnect routes). Hơn nữa, Lambda authorizer yêu cầu viết code custom (Lambda function validate JWT), trái với "avoid managing the code with custom logic". Không dùng built-in JWT. -
❌ Create an HTTP API and the /auth route. Create and configure an AWS Lambda authorizer. Attach the Lambda authorizer to the /auth route. Deploy the API.
Sai vì: Mặc dù HTTP API đúng loại, nhưng Lambda authorizer là custom logic (phải code Lambda để parse/validate JWT). Yêu cầu rõ ràng "built-in authorizer" và "avoid managing the code", nên phải dùng JWT authorizer tích hợp sẵn thay vì Lambda. -
✅ Create an HTTP API and the /auth route. Configure the JWT authorizer. Attach the JWT authorizer to the /auth route. Deploy the API.
Đúng vì: Đây là giải pháp chính xác. HTTP API hỗ trợ JWT authorizer built-in (cấu hình qua Console/CLI/CDK: issuer, jwks_uri, audience). Attach trực tiếp vào route /auth, deploy ngay để test. Không code custom, hiệu suất cao (theo AWS best practices 2026).
📘 Tài liệu tham khảo
- AWS Docs: Use JWT authorizers for HTTP APIs (cập nhật 2026).
- AWS Docs: API Gateway HTTP APIs vs REST/WebSocket.
- AWS Well-Architected: API Gateway Security pillar (khuyến nghị JWT built-in cho stateless auth).
- Exam Prep: AWS Certified DevOps Engineer Professional DOP-C02 (chủ đề DOA: API Gateway auth).
Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần ví dụ code CDK/Terraform, hãy hỏi thêm.
Which solution will meet these requirements MOST cost-effectively?
- A Write the files to Amazon S3 Glacier Deep Archive. Add the S3 location of the files to the SQS queue.
- B Write the files to Amazon S3 Standard. Add the S3 location of the files to the SQS queue.
- C Write the files to an Amazon Elastic Block Store (Amazon EBS) General Purpose SSD volume. Add the EBS location of the files to the SQS queue.
- D Write messages that contain the contents of the uploaded files to the SQS queue.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi mô tả một công ty đang xây dựng ứng dụng cho phép người dùng upload và chia sẻ video ngắn, với kích thước trung bình 10 MB mỗi file. Sau khi upload thành công, cần đẩy một message vào Amazon SQS queue để kích hoạt quá trình xử lý file. Yêu cầu quan trọng: file phải có thể truy cập (accessible) để xử lý trong vòng 5 phút. Giải pháp cần tiết kiệm chi phí nhất (MOST cost-effectively).
🔍 Yêu cầu cốt lõi:
- Lưu trữ file sao cho truy cập nhanh (dưới 5 phút).
- SQS chỉ chứa thông tin để xử lý (không chứa file lớn trực tiếp).
- Ưu tiên chi phí thấp, phù hợp với workload upload/share video (high availability, low latency).
Dựa trên kiến thức AWS cập nhật đến 2026 (S3 storage classes mới nhất, SQS FIFO/Standard queues với message size limit 256KB), giải pháp lý tưởng là sử dụng object storage rẻ tiền như S3 với pointer (location) trong SQS.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Write the files to Amazon S3 Standard. Add the S3 location of the files to the SQS queue.
🛠️ Lý do chi tiết:
- Amazon S3 Standard là storage class mặc định, cung cấp truy cập millisecond latency (gần như ngay lập tức), hoàn toàn đáp ứng yêu cầu "accessible within 5 minutes" 📱.
- File 10MB lưu trực tiếp vào S3 (qua presigned URL hoặc multipart upload cho hiệu suất cao), chỉ push S3 object key/URL vào SQS queue (message nhỏ gọn, chi phí thấp).
- Tiết kiệm chi phí nhất: S3 Standard rẻ hơn EBS (~$0.023/GB/tháng vs EBS gp3 ~$0.08/GB/tháng), không cần provisioned storage, hỗ trợ durability 99.999999999%, scale tự động cho upload/share.
- Phù hợp DevOps best practice: Decouple upload (S3) và processing (SQS + Lambda/EC2).
📋 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 dựa trên yêu cầu về truy cập nhanh, chi phí, và tính khả thi kỹ thuật.
-
❌ Write the files to Amazon S3 Glacier Deep Archive. Add the S3 location of the files to the SQS queue.
🛠️ Sai vì: S3 Glacier Deep Archive có thời gian retrieval tối thiểu 12 giờ (Bulk retrieval), không đáp ứng "within 5 minutes". Chi phí lưu trữ rẻ (~$0.00099/GB/tháng) nhưng phí retrieval cao và chậm, không phù hợp workload cần access nhanh. Chỉ dùng cho archival lâu dài, không phải processing video ngay. -
✅ Write the files to Amazon S3 Standard. Add the S3 location of the files to the SQS queue.
🛠️ Đúng vì: Như đã giải thích ở trên, S3 Standard đảm bảo high throughput, immediate access, message SQS chỉ chứa metadata (object key), tối ưu chi phí và performance. Hỗ trợ S3 Intelligent-Tiering tự động chuyển class nếu file ít access sau này. -
❌ Write the files to an Amazon Elastic Block Store (Amazon EBS) General Purpose SSD volume. Add the EBS location of the files to the SQS queue.
🛠️ Sai vì: EBS là block storage gắn với EC2 instance (không phải object storage shared), không có "EBS location" chuẩn để share qua SQS (phải mount volume trên instance cụ thể). Chi phí cao hơn S3 (provisioned IOPS), không scale cho multi-user upload, và rủi ro single point of failure nếu EC2 down. Không cost-effective cho workload này. -
❌ Write messages that contain the contents of the uploaded files to the SQS queue.
🛠️ Sai vì: SQS giới hạn message size 256 KB (standard queue), file 10MB vượt quá giới hạn (phải dùng S3/SNS extended client hack, nhưng phức tạp và kém hiệu quả). Chi phí SQS tính theo request + data out cao vọt, không scalable, và latency cao khi poll message lớn.
📘 Tài liệu tham khảo (AWS cập nhật 2026)
- S3 Storage Classes: AWS S3 Storage Classes – Xác nhận Standard: Millisecond access; Deep Archive: 12h+.
- SQS Limits: Amazon SQS Quotas – Message size max 256KB.
- EBS Pricing/Use Cases: Amazon EBS Features – Block storage cho EC2, không shared như S3.
- Best Practices: AWS Well-Architected Framework – Reliability Pillar: Sử dụng S3 + SQS cho decoupling upload/processing (ví dụ: Media Processing workflows).
🛠️ Khuyến nghị DevOps: Implement với Lambda trigger từ SQS để process video (transcode bằng FFmpeg trên ECS/Fargate), thêm S3 Event Notifications cho idempotency. Test với AWS X-Ray để monitor latency! 🚀
Which solution will meet these requirements?
- A Create a weighted alias that references the production version of the function and the updated version of the function.
- B Add a Network Load Balancer. Add the production version of the function and updated version of the function as targets.
- C Use AWS CodeDeploy to create a linear traffic shifting deployment
- D Create a tag for the Lambda function that contains the production version and updated version of the code.
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ột lập trình viên đang cập nhật code cho một hàm AWS Lambda để thêm tính năng mới. Hàm Lambda hiện tại đã có version aliases riêng biệt cho môi trường production (sản xuất) và development (phát triển), mỗi alias chạy một version riêng của hàm. Yêu cầu là cấu hình một staging environment cho hàm Lambda này, sao cho staging có thể xử lý các invocation (lời gọi) đến cả version development lẫn production.
Mục tiêu chính là tạo môi trường staging linh hoạt, cho phép test và route traffic giữa hai version hiện có (production và version mới được cập nhật), mà không ảnh hưởng đến các alias hiện tại. Điều này tận dụng tính năng versioning và alias routing của AWS Lambda, giúp quản lý deployment an toàn theo mô hình blue-green hoặc canary testing. Kiến thức cập nhật đến năm 2026: AWS Lambda hỗ trợ weighted aliases (alias có trọng số) để phân bổ traffic theo tỷ lệ phần trăm giữa các version, rất phù hợp cho staging (xem tài liệu AWS Lambda Developer Guide).
📘 Tài liệu tham khảo:
✅ Đáp án đúng
Create a weighted alias that references the production version of the function and the updated version of the function.
Lý do lựa chọn:
- Tính năng weighted alias của AWS Lambda cho phép tạo một alias mới (ví dụ: "staging") và chỉ định tỷ lệ traffic (ví dụ: 50% đến production version, 50% đến updated version). Staging alias này sẽ xử lý invocation đến cả hai version một cách linh hoạt, không thay đổi alias production/development hiện có.
- Điều này đáp ứng chính xác yêu cầu: staging handle cả dev (updated version) và prod version. Weighted routing hỗ trợ A/B testing hoặc gradual rollout, cập nhật đến 2026 vẫn là best practice cho multi-environment management trong Lambda. 🛠️ Hoàn hảo cho DevOps workflow!
📋 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:
-
✅ Create a weighted alias that references the production version of the function and the updated version of the function.
Đúng 🏆: Như đã giải thích ở trên, weighted alias là giải pháp native của Lambda, cho phép routing traffic theo trọng số (0-100%) giữa các version cụ thể. Staging alias có thể publish ngay lập tức và test invocation mà không cần tool ngoài. Hỗ trợ qualifier trong invocation ARN (e.g.,arn:...:staging). -
❌ Add a Network Load Balancer. Add the production version of the function and updated version of the function as targets.
Sai 🚫: AWS Lambda không hỗ trợ trực tiếp làm target cho Network Load Balancer (NLB). NLB chỉ hỗ trợ IP targets, instance targets hoặc ALB/ELB, không phải Lambda functions/versions. Lambda invocations dùng API Gateway, ALB (HTTP/HTTPS) hoặc trực tiếp qua SDK/CLI. Sử dụng NLB sẽ phức tạp hóa và không khả thi. -
❌ Use AWS CodeDeploy to create a linear traffic shifting deployment
Sai ⚠️: AWS CodeDeploy hỗ trợ deployment cho Lambda với các strategy như linear (tăng dần traffic theo % theo thời gian), canary hoặc all-at-once. Tuy nhiên, nó dùng để deploy version mới (shift từ old sang new), không tạo staging environment handle cả hai version đồng thời theo alias. CodeDeploy không tạo alias riêng cho staging; nó chỉ quản lý rollout tự động. -
❌ Create a tag for the Lambda function that contains the production version and updated version of the code.
Sai 🔒: Tags trong AWS chỉ dùng cho metadata, billing, access control (IAM policies) hoặc organization, không ảnh hưởng đến invocation routing hay version selection. Tags không thể reference versions để handle traffic; Lambda routing dựa vào version ARN hoặc alias qualifier, không phải tags.
def lambda_handler (event, context):
db = database.connect()
db.statement('INSERT INTO Customers (CustomerName) VALUES (event.name)')
db.execute()
db.close()
After successfully testing the function multiple times, the developer notices that the execution time is longer than expected.
What should the developer do to improve performance?
- A Increase the reserved concurrency of the Lambda function.
- B Increase the size of the RDS database to facilitate an increased number of database connections each hour.
- C Move the database connection and close statement out of the handler. Place the connection in the global space.
- D Replace Amazon RDS with Amazon DynamoDB to implement control over the number of writes per second.
Xem giải thích
📝 Phân tích câu hỏi
Câu hỏi mô tả một hàm AWS Lambda được sử dụng để chèn dữ liệu khách hàng mới vào cơ sở dữ liệu Amazon RDS. Hàm này dự kiến sẽ chạy hàng trăm lần mỗi giờ. Tuy nhiên, sau khi kiểm tra thành công nhiều lần, nhà phát triển nhận thấy thời gian thực hiện của hàm lâu hơn dự kiến.
🧩 Mục tiêu: Tìm cách cải thiện hiệu suất của hàm Lambda.
📝 Phân tích các lựa chọn
-
Increase the reserved concurrency of the Lambda function. ❌ Phương án này không trực tiếp giúp cải thiện hiệu suất của hàm Lambda trong trường hợp này. Reserved concurrency đảm bảo số lượng đồng thời thực hiện của hàm Lambda, nhưng không ảnh hưởng đến thời gian thực hiện của mỗi hàm. Nếu hàm Lambda đang gặp vấn đề về thời gian thực hiện do thiết lập tài nguyên (như RAM) quá nhỏ, tăng reserved concurrency không giải quyết được vấn đề.
-
Increase the size of the RDS database to facilitate an increased number of database connections each hour. ❌ Tăng kích thước của cơ sở dữ liệu RDS có thể giúp xử lý nhiều kết nối đồng thời hơn, nhưng vấn đề ở đây là hàm Lambda và RDS đang ở cùng một VPC, và hàm Lambda chỉ thực hiện một lần insert vào cơ sở dữ liệu. Do đó, vấn đề không nằm ở số lượng kết nối đồng thời, mà có thể liên quan đến cách thức thực hiện kết nối và xử lý trong hàm Lambda.
-
Move the database connection and close statement out of the handler. Place the connection in the global space. ✅ Đây là đáp án đúng. Di chuyển các lệnh kết nối và đóng cơ sở dữ liệu ra khỏi hàm xử lý (handler) và đặt kết nối vào không gian toàn cầu có thể cải thiện hiệu suất. Trong Python, các biến toàn cầu được khởi tạo chỉ một lần, trong khi các biến địa phương và lệnh trong hàm handler được thực hiện mỗi khi hàm được gọi. Kết nối cơ sở dữ liệu là một hoạt động tốn kém. Nếu kết nối được tạo mỗi khi hàm Lambda được gọi, điều này có thể gây ra sự chậm chạp. Bằng cách đặt kết nối vào không gian toàn cầu, kết nối chỉ được tạo một lần khi hàm Lambda khởi tạo, và tái sử dụng cho mỗi lần gọi hàm.
-
Replace Amazon RDS with Amazon DynamoDB to implement control over the number of writes per second. ❌ Thay thế Amazon RDS bằng Amazon DynamoDB có thể giúp kiểm soát số lượng ghi mỗi giây, nhưng điều này không trực tiếp giải quyết vấn đề hiệu suất của hàm Lambda hiện tại. Nếu vấn đề chỉ là chèn dữ liệu đơn giản, RDS có thể xử lý tốt và không cần thiết phải chuyển sang DynamoDB chỉ để kiểm soát số lượng ghi.
📚 Tài liệu tham khảo
- AWS Lambda Developer Guide: https://docs.aws.amazon.com/lambda/latest/dg/welcome.html
- AWS Lambda Best Practices: https://aws.amazon.com/blogs/compute/write-lambda-functions-that-long-run/, https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html
🛠️ Kết luận
Tóm lại, để cải thiện hiệu suất của hàm Lambda trong trường hợp này, cách tiếp cận tốt nhất là di chuyển lệnh kết nối và đóng cơ sở dữ liệu ra khỏi hàm handler và đặt kết nối vào không gian toàn cầu. Điều này giúp giảm thiểu chi phí kết nối cơ sở dữ liệu cho mỗi lần gọi hàm, từ đó cải thiện hiệu suất.
Which command structure should the developer use to test the role permissions?
- A aws sts assume-role
- B aws iam attach-role-policy
- C aws ssm resume-session
- D aws rds add-role-to-db-cluster
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 tình huống một developer đang troubleshoot (khắc phục sự cố) quyền hạn (permissions) của một ứng dụng cần thực hiện các thay đổi trên Amazon RDS database. Developer có quyền truy cập vào IAM role mà ứng dụng đang sử dụng.
Mục tiêu là tìm cấu trúc lệnh AWS CLI phù hợp để kiểm tra (test) quyền hạn của role đó.
🛠️ Lý do quan trọng: Để test permissions một cách an toàn mà không ảnh hưởng đến môi trường thực tế, developer cần giả lập (assume) role tạm thời và sử dụng credentials của role đó để thử các hành động liên quan đến RDS (như modify DB). Điều này giúp xác định chính xác role có đủ quyền hay không, theo best practice của AWS IAM (cập nhật đến 2026, với STS service hỗ trợ session token lên đến 12 giờ).
✅ Đáp án đúng: aws sts assume-role
Lý do lựa chọn:
Lệnh aws sts assume-role cho phép developer assume (giả lập) tạm thời IAM role của ứng dụng, nhận về temporary security credentials (Access Key, Secret Key, Session Token). Sau đó, developer có thể sử dụng các credentials này để chạy các lệnh AWS CLI khác (ví dụ: aws rds modify-db-instance) và kiểm tra xem role có quyền thực hiện thay đổi trên RDS hay không.
🛠️ Đây là phương pháp chuẩn theo AWS để test IAM permissions mà không cần thay đổi role thực tế, tránh rủi ro. Nếu test thất bại (AccessDenied), developer biết chính xác policy thiếu gì. (Kiến thức cập nhật: STS hỗ trợ role chaining và MFA đến 2026).
📋 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, với đánh giá đúng/sai dựa trên chức năng AWS CLI (phiên bản mới nhất 2026):
-
aws sts assume-role
✅ Đúng: Như giải thích ở trên, đây là lệnh cốt lõi để test role permissions bằng cách assume role và sử dụng temp credentials. Ví dụ:aws sts assume-role --role-arn arn:aws:iam::123456789012:role/MyAppRole --role-session-name test-session. Sau đó export credentials và test RDS actions. -
aws iam attach-role-policy
❌ Sai: Lệnh này dùng để gắn (attach) một managed policy vào IAM role, không phải để test permissions. Nó thay đổi role thực tế (có thể gây rủi ro bảo mật), chứ không giúp troubleshoot bằng cách simulate. -
aws ssm resume-session
❌ Sai: Lệnh này thuộc AWS Systems Manager (SSM) Session Manager, dùng để tiếp tục một session SSH/RDP đã bị tạm dừng trên EC2 instance. Không liên quan đến test IAM role permissions hay RDS; chỉ dùng cho quản lý session, không simulate quyền hạn. -
aws rds add-role-to-db-cluster
❌ Sai: Lệnh này dùng để thêm IAM role vào Amazon Aurora DB cluster (cho integration như Lambda hoặc S3 access từ DB). Nó thay đổi cấu hình RDS cluster, không test permissions của role ứng dụng; ngược lại, có thể yêu cầu role đã có quyền RDS.
📘 Tài liệu tham khảo
- AWS CLI Reference - STS Assume-Role: docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html (Cập nhật 2026: Hỗ trợ X.509 certs và role sessions dài hơn).
- AWS IAM Best Practices - Testing Permissions: docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html (Khuyến nghị dùng STS để simulate).
- AWS RDS IAM Integration: docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.IAMDBAuth.html (Không dùng cho testing role app).
Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần ví dụ lệnh cụ thể, hãy hỏi thêm.
What solution will meet these requirements?
- A Use a rolling deployment policy to deploy to Amazon EC2 instances.
- B Use an immutable deployment policy to deploy to Amazon EC2 instances.
- C Use an all-at-once deployment policy to deploy to Amazon EC2 instances.
- D Use a-canary deployment strategy to deploy changes to Amazon EC2 instances.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi xoay quanh việc triển khai ứng dụng web portal của một công ty game trên AWS Elastic Beanstalk. Công ty cần deploy các phiên bản mới 3-4 lần mỗi ngày, với mục tiêu chính là triển khai tính năng mới cho TẤT CẢ người dùng nhanh nhất có thể, đồng thời giảm thiểu tác động đến hiệu suất (minimize performance impact) và tối đa hóa tính sẵn sàng (maximize availability).
🛠️ Yêu cầu cốt lõi:
- Tốc độ cao: Phải rollout nhanh cho toàn bộ users, không chờ kiểm tra dần dần.
- Không downtime: Tránh gián đoạn dịch vụ vì deploy thường xuyên.
- An toàn: Giữ availability cao, tránh ảnh hưởng hiệu suất trong quá trình deploy.
Elastic Beanstalk hỗ trợ các chính sách triển khai (deployment policies) cho môi trường dựa trên EC2, giúp kiểm soát cách ứng dụng được cập nhật trên các instance.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Use an immutable deployment policy to deploy to Amazon EC2 instances.
🧩 Lý do chi tiết:
- Immutable deployment policy tạo một Auto Scaling Group (ASG) mới với các EC2 instance hoàn toàn mới đã cài đặt sẵn phiên bản ứng dụng mới. Sau khi ASG mới healthy (kiểm tra qua health checks), Elastic Beanstalk sẽ chuyển traffic sang ASG mới và terminate ASG cũ.
- Ưu điểm phù hợp yêu cầu:
- ✅ Tốc độ cao: Deploy nhanh cho tất cả users ngay lập tức sau khi ready (không rollout dần).
- ✅ Zero downtime & max availability: Không ảnh hưởng instance đang chạy, traffic switch mượt mà qua Elastic Load Balancing (ELB).
- ✅ Minimize perf impact: Instance cũ vẫn phục vụ đến phút cuối, instance mới scale up độc lập.
- Hoàn hảo cho deploy thường xuyên (3-4 lần/ngày) vì blue-green deployment tự động, an toàn.
📋 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 tiếng Anh). Tôi đánh dấu ✅ đúng hoặc ❌ sai, kèm giải thích bằng tiếng Việt:
-
❌ Use a rolling deployment policy to deploy to Amazon EC2 instances.
Phương án này deploy theo batch (lô): Cập nhật một phần instance tại một thời điểm, sau đó instance đó out-of-service tạm thời để install app mới.
Tại sao sai? Gây downtime ngắn trên từng batch, tác động hiệu suất (CPU/traffic spike), và availability giảm vì instance đang deploy không healthy. Không phù hợp deploy nhanh cho tất cả users, đặc biệt với tần suất cao. -
✅ Use an immutable deployment policy to deploy to Amazon EC2 instances.
Như đã giải thích ở trên: Tạo instance mới hoàn toàn, switch traffic zero-downtime. Hoàn hảo khớp yêu cầu. -
❌ Use an all-at-once deployment policy to deploy to Amazon EC2 instances.
Phương án này deploy toàn bộ instance cùng lúc: Tất cả EC2 dừng phục vụ để install app mới.
Tại sao sai? Gây downtime lớn (toàn bộ app offline vài phút), perf impact cao, và availability thấp. Không thể dùng cho deploy thường xuyên vì rủi ro cao. -
❌ Use a-canary deployment strategy to deploy changes to Amazon EC2 instances.
Phương án này deploy chỉ cho một subset nhỏ instance đầu tiên (canary instances), monitor trước khi rollout rộng.
Tại sao sai? Chậm rollout cho tất cả users (phải chờ kiểm tra canary), không đáp ứng "deploy nhanh nhất cho tất cả". Tuy an toàn nhưng không prioritize tốc độ toàn bộ.
📘 Tài liệu tham khảo (cập nhật AWS 2023-2026)
- AWS Elastic Beanstalk Documentation: Deployment policies – Chi tiết Immutable, Rolling, All-at-once, Canary.
- AWS Best Practices: Zero-downtime deployments – Immutable được khuyến nghị cho high-frequency deploys.
- Exam Prep DOP-C02: Chủ đề Deployment Strategies trong Elastic Beanstalk (AWS Certified DevOps Engineer Professional v2, cập nhật 2024).
🛠️ Lời khuyên thực tế: Kết hợp Immutable với EB CLI hoặc CodePipeline để automate deploy nhanh hơn nữa! Nếu cần config, dùng .ebextensions để tùy chỉnh.
Which of the following modifications should the developer make to ensure that the data is encrypted before uploading it to the bucket?
- A Use the default AWS Key Management Service (AWS KMS) key for Amazon S3 in the Lambda function code.
- B Use the S3 managed key and call the GenerateDataKey API to encrypt the file.
- C Use the GenerateDataKey API, then use that data key to encrypt the file in the Lambda function code.
- D Use an AWS Key Management Service (AWS KMS) customer managed key for Amazon S3 in the Lambda function code.
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 mã hóa dữ liệu client-side trong AWS Lambda trước khi upload file JSON 3MB (chứa thông tin nhạy cảm) lên S3 bucket hàng ngày.
- Bối cảnh chính: Lambda function tạo file lớn (3MB), cần mã hóa ngay trong code Lambda (client-side encryption) để đảm bảo dữ liệu được bảo vệ trước khi upload, tránh rủi ro lộ thông tin trên đường truyền hoặc tại S3 nếu chỉ dùng server-side encryption (SSE).
- Yêu cầu cốt lõi: Sử dụng AWS KMS để tạo data key, mã hóa file cục bộ trong Lambda, rồi mới upload file đã mã hóa (data) + envelope (data key được KMS mã hóa).
- Lý do quan trọng: Server-side encryption (SSE-S3, SSE-KMS) chỉ mã hóa sau khi S3 nhận file, không đáp ứng "encrypted before uploading". Client-side dùng GenerateDataKey API của KMS là chuẩn (hỗ trợ file lớn, hiệu suất cao). Kiến thức cập nhật 2026: AWS vẫn khuyến nghị client-side với KMS Data Key cho dữ liệu nhạy cảm (theo AWS Encryption SDK).
📘 Tài liệu tham khảo:
- AWS KMS Developer Guide: Data Keys
- Amazon S3 User Guide: Client-Side Encryption
- AWS Encryption Library (v3.x, 2026 update)
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Use the GenerateDataKey API, then use that data key to encrypt the file in the Lambda function code.
Lý do chi tiết 🛠️:
- Đây là cách chuẩn xác cho client-side encryption: Gọi
GenerateDataKeytừ AWS KMS SDK để lấy data key (symmetric AES-256), dùng data key mã hóa file JSON trực tiếp trong Lambda code (hiệu quả với file 3MB). - Quy trình: (1) GenerateDataKey → plaintext data key + ciphertext envelope; (2) Mã hóa file bằng data key; (3) Upload file encrypted + envelope lên S3.
- Ưu điểm: Bảo mật cao (KMS quản lý key), không phụ thuộc SSE của S3, hỗ trợ decrypt sau. Phù hợp Lambda (ephemeral env), cập nhật 2026 với AWS Encryption SDK v4+ tối ưu performance.
📋 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, chỉ giải thích bằng tiếng Việt:
-
Use the default AWS Key Management Service (AWS KMS) key for Amazon S3 in the Lambda function code.
❌ Sai: Đây ám chỉ SSE-KMS với aws/s3 key mặc định của AWS, chỉ mã hóa server-side (sau upload). Không mã hóa trước upload trong Lambda, file nhạy cảm vẫn plain-text khi truyền. Không dùng trong code Lambda cho client-side. -
Use the S3 managed key and call the GenerateDataKey API to encrypt the file.
❌ Sai: SSE-S3 (S3 managed key) không hỗ trợGenerateDataKeyAPI (chỉ dành cho KMS keys). SSE-S3 là server-side, không tạo data key cho client-side. Gọi API này với SSE-S3 sẽ lỗi, không mã hóa file trước upload. -
Use the GenerateDataKey API, then use that data key to encrypt the file in the Lambda function code.
✅ Đúng: Như đã giải thích ở trên. Sử dụng KMS (customer hoặc AWS managed key) để generate data key, mã hóa cục bộ trong Lambda – hoàn hảo cho yêu cầu "encrypted before uploading". Hỗ trợ file lớn, an toàn cao. -
Use an AWS Key Management Service (AWS KMS) customer managed key for Amazon S3 in the Lambda function code.
❌ Sai: CMK cho S3 là SSE-KMS (server-side), chỉ cấu hình bucket policy để S3 tự mã hóa sau upload. Không mã hóa trong Lambda code trước upload, vẫn để plain-text file lên S3 trước khi encrypt.
Kết luận 🚀: Chọn client-side với GenerateDataKey là best practice cho dữ liệu nhạy cảm trong Lambda-S3 workflow! Nếu implement, dùng AWS SDK v3+ cho Node/Python với Encryption Library.
The developer has tested the new Lambda code and is ready to deploy the code into production. However, the developer wants to allow only a small percentage of the invocations from the AWS SDK to call the new code.
Which solution will meet these requirements?
- A Configure a Lambda version that has a specific weight value for the updated Lambda function.
- B Create an alias for the Lambda function. Configure a specific weight value for the updated version.
- C Create an Application Load Balancer. Specify weighted target groups for the original Lambda function and the updated Lambda function.
- D Create a Network Load Balancer. Specify weighted target groups for the original Lambda function and the updated 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 xoay quanh việc triển khai canary deployment (triển khai dần dần) cho một AWS Lambda function trong ứng dụng social media. Cụ thể:
- Một developer đã cập nhật code Lambda để theo dõi hoạt động online của user và lưu vào database.
- Web application server sử dụng AWS SDK để invoke (gọi) Lambda function này.
- Code mới đã test xong, sẵn sàng deploy production, nhưng chỉ muốn một phần trăm nhỏ (small percentage) các invocation từ SDK gọi code mới, còn lại gọi code cũ để kiểm tra an toàn (blue-green hoặc canary testing).
Mục tiêu: Cân bằng traffic (weighted routing) giữa version cũ và mới của Lambda, chỉ từ client invoke qua SDK. Đây là tính năng chuẩn của Lambda versioning và aliases để traffic shifting.
🛠️ Yêu cầu chính: Giải pháp phải hỗ trợ weighted traffic giữa các version Lambda, không làm gián đoạn production, và phù hợp với invoke từ SDK (không cần load balancer vì Lambda invoke trực tiếp).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Create an alias for the Lambda function. Configure a specific weight value for the updated version.
Lý do:
- AWS Lambda hỗ trợ versions (phiên bản immutable của function code) và aliases (con trỏ linh hoạt trỏ đến versions với weighted routing).
- Tạo alias (ví dụ: "production") và set weight (ví dụ: 90% cho version cũ $LATEST hoặc v1, 10% cho version mới v2) → SDK invoke alias sẽ tự động route theo tỷ lệ.
- Đây là cách chính thức, đơn giản, serverless cho canary deployment, cập nhật đến 2026 (Lambda aliases hỗ trợ gradual shift lên đến 0.01% increments).
- Không cần thay đổi code client, chỉ update ARN alias trong SDK.
📋 Giải thích tất cả các phương án (đúng/sai)
-
❌ [SAI] Configure a Lambda version that has a specific weight value for the updated Lambda function.
Giải thích sai: Lambda versions là immutable (không thay đổi), không hỗ trợ weight trực tiếp. Weight chỉ set được trên aliases (không phải version). Nếu chỉ publish version mới mà không dùng alias, tất cả traffic sẽ shift 100% sang version mới → không kiểm soát percentage. -
✅ [ĐÚNG] Create an alias for the Lambda function. Configure a specific weight value for the updated version.
Giải thích đúng: Như trên, đây là giải pháp chuẩn. Tạo version mới (publish), tạo alias, set weight (ví dụ: version 1: 0.9, version 2: 0.1) → SDK invoke alias tự route theo tỷ lệ. Hỗ trợ auto-shift dần dần, rollback dễ dàng. Hoàn hảo cho yêu cầu "small percentage". -
❌ [SAI] Create an Application Load Balancer. Specify weighted target groups for the original Lambda function and the updated Lambda function.
Giải thích sai: ALB hỗ trợ weighted target groups, nhưng không phù hợp cho Lambda invoke từ SDK. ALB dùng cho HTTP/HTTPS traffic (Layer 7), trong khi SDK invoke Lambda qua direct invocation (ARN), không qua HTTP. Lambda có thể register làm target cho ALB nhưng phức tạp, tốn kém, không serverless thuần (cần provision), và không dành cho canary code-level. -
❌ [SAI] Create a Network Load Balancer. Specify weighted target groups for the original Lambda function and the updated Lambda function.
Giải thích sai: NLB (Layer 4, TCP/UDP) cũng hỗ trợ weighted targets, nhưng tương tự ALB: không thiết kế cho direct Lambda SDK invoke. NLB nhanh hơn ALB nhưng vẫn cần expose Lambda qua VPC/Function URL (phức tạp, không an toàn cho production social app). Không phải best practice cho Lambda versioning; dùng aliases đơn giản hơn nhiều.
📘 Tài liệu tham khảo (AWS cập nhật mới nhất 2026)
- AWS Lambda Aliases & Versions – Chi tiết weighted traffic shifting.
- Lambda Canary Deployments Best Practices – Case study tương tự.
- AWS Well-Architected Framework - Serverless Lens – Khuyến nghị aliases cho traffic management.
🛠️ Lời khuyên DevOps: Sử dụng Lambda aliases kết hợp CloudWatch Insights để monitor invocations theo version, và Lambda Destinations cho error handling trong canary. Nếu scale lớn, tích hợp AWS AppConfig cho feature flags!