Nếu bạn đang chuẩn bị ứng tuyển cho vị trí DevOps, Cloud Engineer hoặc Software Developer làm việc với Serverless, đây là tài liệu không thể bỏ qua. Bài viết này tổng hợp 40 câu hỏi phỏng vấn Lambda AWS, từ những kiến thức cơ bản đến các tình huống phức tạp, giúp bạn xây dựng nền tảng vững chắc và tự tin chinh phục mọi thử thách trong buổi phỏng vấn.
Đọc bài viết để hiểu thêm về:
- Lambda là gì? Vì sao nhà tuyển dụng hỏi về AWS Lambda;
- Các chủ đề AWS Lambda phổ biến khi phỏng vấn;
- Câu hỏi phỏng vấn Lambda cơ bản;
- Câu hỏi phỏng vấn Lambda cấp trung;
- Câu hỏi phỏng vấn Lambda cấp cao;
- Câu hỏi phỏng vấn giải quyết tình huống;
- Lời khuyên để phỏng vấn AWS Lambda thuận lợi.
Lambda là gì? Vì sao nhà tuyển dụng hỏi về AWS Lambda?
AWS Lambda là dịch vụ điện toán không máy chủ (serverless computing) dựa trên sự kiện dành cho nền tảng AWS. Thông qua điện toán serverless, Lambda cho phép viết và thực thi mã mà không cần quản lý máy chủ. Thay vì lo về việc cấp phát, vận hành, mở rộng tài nguyên hoặc vá lỗi bảo mật, developer chỉ cần tập trung vào code, Lambda sẽ tự động xử lý phần hạ tầng.
Ngày càng nhiều công ty xây dựng các ứng dụng serverless nhờ hiệu quả về chi phí, khả năng mở rộng và chi phí cơ sở hạ tầng tối thiểu. Lambda chính là trọng tâm của xu hướng này. Việc chứng minh kiến thức về Lambda cho thấy bạn có thể xây dựng các hệ thống đám mây đáng tin cậy, tiết kiệm chi phí và dễ bảo trì.
Nhìn chung, nhà tuyển dụng kiểm tra kiến thức về AWS Lambda để đánh giá:
- Khả năng thiết kế các ứng dụng có khả năng mở rộng và hướng sự kiện.
- Bạn hiểu rõ các ràng buộc và sự đánh đổi của serveless như thế nào.
- Đảm bảo ứng viên có thể thiết kế, triển khai và quản lý các hàm Lambda, đồng thời tích hợp chúng một cách liền mạch với các dịch vụ AWS khác như API Gateway, S3, DynamoDB và EventBridge.
Đọc chi tiết: AWS Lambda là gì? Cẩm nang sử dụng AWS Lambda
Các chủ đề câu hỏi phỏng vấn Lambda phổ biến
Cấp độ câu hỏi phỏng vấn Lambda cơ bản
Ứng viên thường được hỏi về:
- Cơ chế vận hành, trường hợp sử dụng và tích hợp với các dịch vụ AWS khác.
- Việc tạo, triển khai và quản lý các hàm Lambda
- Cách AWS Lambda tương tác với các dịch vụ AWS khác như S3, DynamoDB và API Gateway, đồng thời nhấn mạnh việc hiểu rõ vai trò của Lambda trong hệ sinh thái AWS lớn hơn
- Kiến thức về các ngôn ngữ lập trình tương thích với AWS Lambda, các câu hỏi có thể bao gồm viết hoặc gỡ lỗi mã hàm Lambda.
- Mô tả tình huống khắc phục sự cố Lambda thường gặp, kỹ năng giải quyết vấn đề trong môi trường điện toán serverless.
Cấp độ câu hỏi phỏng vấn Lambda trung cấp và cao cấp
Các câu hỏi sẽ đi sâu vào việc triển khai hàm Lambda, bao gồm các trigger, nguồn sự kiện và tích hợp với các dịch vụ AWS khác, các khía cạnh như mở rộng quy mô và tối ưu hóa hiệu suất.
Câu hỏi phỏng vấn cấp trung và cấp cao cũng đề cập đến các tính năng bảo mật của Lambda, khám phá vai trò IAM, quyền truy cập và biến môi trường. Ứng viên được kỳ vọng sẽ thể hiện kiến thức về mô hình định giá của Lambda, khả năng giám sát bằng các công cụ như Amazon CloudWatch và các phương pháp logging.
Hướng dẫn trả lời các câu hỏi phỏng vấn Lambda cơ bản
AWS Lambda hỗ trợ những ngôn ngữ nào?
AWS Lambda cho phép sử dụng các ngôn ngữ lập trình sau:
- Node.js (JavaScript)
- Python
- Java (bao gồm các phiên bản mới hơn như 11, 17, 21)
- C# (.NET)
- Go
- Ruby
- PowerShell
- Custom Runtime (Rust, C++…)
Các ngôn ngữ lập trình này đã được thiết lập sẵn thư viện và các tính năng tích hợp khác, sẵn sàng để sử dụng.
Làm thế nào để tạo hàm Lambda?
- Đăng nhập vào AWS Management Console và điều hướng đến dịch vụ Lambda. Chọn “Create Function” để bắt đầu quy trình.
- Chọn sử dụng bản thiết kế, AWS Serverless Application Repository hoặc tự tạo hàm. Nếu tự tạo, bạn sẽ cần cung cấp tên hàm và chọn runtime tức là ngôn ngữ lập trình hoặc nền tảng cho hàm Lambda của bạn.
- Sau khi cấu hình tên hàm và runtime sẽ là thiết lập vai trò thực thi. Vai trò này cấp cho hàm Lambda quyền truy cập vào các dịch vụ và tài nguyên AWS.
- Có thể tạo một vai trò mới với các quyền Lambda cơ bản hoặc sử dụng một vai trò hiện có. Viết mã hàm trong trình inline code editor hoặc tải lên tệp .zip chứa mã và các phần phụ thuộc sau khi vai trò thực thi được thiết lập.
- Cấu hình các thiết lập hàm như bộ nhớ, thời gian chờ và biến môi trường, sau đó triển khai hàm Lambda bằng cách nhấp vào “Create Function”.
- Kiểm tra, giám sát và điều chỉnh hàm khi cần thiết trong bảng điều khiển AWS Lambda.
Thời gian thực thi tối đa để tùy chỉnh một hàm AWS Lambda là bao lâu?
Toàn bộ quá trình thực thi sẽ hoàn tất trong vòng 900 giây kể từ khi người dùng đầu tiên gọi AWS Lambda. Thời gian chờ có thể được tùy chỉnh từ 1 đến 900 giây, với giá trị mặc định là 3 giây.
AWS Lambda có thể xử lý bao nhiêu RAM?
Chúng ta có thể cấu hình lượng bộ nhớ được phân bổ cho hàm Lambda từ 128 MB đến 10240 MB.
Có những framework nào dành cho serverless?
Có nhiều framework và công cụ hỗ trợ xây dựng ứng dụng serverless, tiêu biểu như:
- Serverless Framework (open-source, đa cloud)
- AWS SAM (Serverless Application Model, do AWS cung cấp)
- AWS CDK, Terraform (IaC)
- Các micro-framework ngôn ngữ như Zappa (Python), Chalice (Python), Claudia.js (Node.js)…
Những framework này giúp quản lý và triển khai các hàm Lambda cùng các dịch vụ liên quan một cách dễ dàng, nhất quán.
Giải thích các trình kích hoạt khác nhau cho các hàm AWS Lambda
AWS Lambda có thể được kích hoạt bởi nhiều loại sự kiện khác nhau trong hệ sinh thái AWS hoặc từ nguồn bên ngoài. Ví dụ:
- Hàm Lambda được kích hoạt khi dữ liệu trong Amazon S3 bucket thay đổi.
- Các sự kiện trong Amazon DynamoDB như cập nhật bảng, cũng kích hoạt các hàm Lambda.
- Ứng dụng người dùng có thể trực tiếp gọi các hàm Lambda thông qua AWS SDK.
- Các hàm Lambda được kích hoạt bởi các yêu cầu HTTP thông qua Amazon API Gateway, giúp nó phù hợp để xây dựng các ứng dụng serverless.
- Các nguồn sự kiện bên ngoài như API của bên thứ ba hoặc các ứng dụng tùy chỉnh cũng có thể kích hoạt hàm Lambda.
Nhờ sự đa dạng này, Lambda có thể phục vụ nhiều use case, từ xử lý dữ liệu phát trực tuyến theo thời gian thực, phản hồi thay đổi cơ sở dữ liệu. tương tác với tin nhắn và thông báo
EC2 là gì? AWS Lambda khác với EC2 như thế nào?
Amazon Elastic Compute Cloud (EC2) là dịch vụ web cung cấp khả năng tính toán có thể thay đổi kích thước trên đám mây, cho phép người dùng chạy ứng dụng và quản lý khối lượng công việc mà không cần phần cứng vật lý. Điều này cho phép các nhà phát triển dễ dàng mở rộng ứng dụng và cơ sở hạ tầng khi cần.
AWS Lambda là dịch vụ điện toán serverless, loại bỏ nhu cầu cung cấp hoặc quản lý máy chủ. Điều này trái ngược với EC2, vốn cung cấp các máy chủ ảo có khả năng mở rộng yêu cầu thiết lập và quản lý thủ công.
Một số điểm khác nhau nổi bật khác:
- Lambda tự động điều chỉnh dung lượng tính toán bằng cách chạy mã để đáp ứng các kích hoạt. Trong khi với EC2, việc mở rộng yêu cầu cấu hình thủ công hoặc thiết lập tự động mở rộng.
- Các hàm Lambda có thời gian thực thi hạn chế cho các tác vụ ngắn hạn, trong khi các phiên bản EC2 có thể chạy liên tục và xử lý các quy trình dài hạn.
- Bạn chỉ phải trả tiền cho thời gian tính toán sử dụng trong Lambda, giúp tiết kiệm chi phí cho khối lượng công việc không liên tục. EC2 phát sinh chi phí dựa trên năng lực tính toán, bất kể mức sử dụng.
Sự khác biệt này khiến Lambda phù hợp với khối lượng công việc theo sự kiện và không thường xuyên, trong khi EC2 phù hợp hơn với các ứng dụng liên tục, ổn định.
Bạn quản lý các phụ thuộc trong AWS Lambda như thế nào?
Tôi thường quản lý phụ thuộc trong Lambda theo hai cách chính:
- Gói triển khai:
Tôi đóng gói các thư viện và thành phần cần thiết cùng với hàm Lambda để quản lý các phụ thuộc trong AWS Lambda. Cách tiếp cận này đảm bảo hàm có tất cả phụ thuộc cần thiết khi thực thi. Các phụ thuộc được bao gồm trong gói triển khai, là một tệp .zip chứa mã hàm Lambda và bất kỳ phụ thuộc nào liên quan. Gói này được tải lên AWS Lambda, nơi dịch vụ tự động triển khai và thực thi hàm trong một môi trường nhất quán.
- Sử dụng Lambda Layers:
Các phụ thuộc cho hàm AWS Lambda cũng được quản lý bằng Lambda Layers. Lambda Layers cho phép chia sẻ các thành phần chung trên nhiều hàm Lambda, giúp giảm kích thước tổng thể của các gói triển khai. Tính năng này đặc biệt hữu ích cho các thư viện, runtime tùy chỉnh và các phụ thuộc khác được nhiều hàm sử dụng.
Lambda Layers thúc đẩy khả năng tái sử dụng mã và đơn giản hóa việc quản lý phụ thuộc, đảm bảo các hàm có quyền truy cập vào đúng phiên bản của thư viện hoặc thành phần. AWS Lambda kết hợp mã hàm và các layer để tạo thành môi trường runtime hoàn chỉnh khi một hàm Lambda được gọi.
Có giới hạn số lượng hàm AWS lambda có thể chạy song song cùng lúc không?
Lambda có giới hạn cho lượng tài nguyên tính toán và lưu trữ mà bạn có thể sử dụng để chạy và lưu trữ các hàm. AWS Lambda giới hạn concurrent executions mặc định (1.000 mỗi region), 75GB lưu trữ cho các hàm đã tải lên và các layer, các giới hạn này có thể tăng lên theo nhu cầu.
Cold start (Khởi động nguội) trong AWS Lambda là gì và nó ảnh hưởng đến hiệu suất như thế nào?
Khởi động nguội đề cập đến quá trình khởi tạo xảy ra khi một hàm Lambda được gọi lần đầu tiên hoặc sau khi không hoạt động một khoảng thời gian đáng kể. AWS Lambda tải mã và runtime của hàm vào một môi trường thực thi mới trong quá trình khởi động nguội, thiết lập các tài nguyên cần thiết để chạy hàm.
Quá trình này gây ra độ trễ trong thực thi hàm, ảnh hưởng đến hiệu suất bằng cách tăng thời gian phản hồi cho yêu cầu ban đầu.
Thời gian khởi động nguội thay đổi tùy thuộc vào các yếu tố như runtime đã chọn, kích thước gói triển khai và cấu hình hàm. Khởi động nguội dễ nhận thấy hơn đối với các hàm không được gọi thường xuyên, vì AWS Lambda sử dụng lại môi trường thực thi cho các lần gọi tiếp theo nếu có. Việc tối ưu hóa mã, giảm thiểu kích thước gói và chọn cài đặt bộ nhớ phù hợp sẽ giảm thiểu tác động của khởi động nguội, đồng thời duy trì hiệu suất ổn định.
Mô tả quy trình quản lý phiên bản trong AWS Lambda.
Quản lý phiên bản trong AWS Lambda bao gồm việc gán mã định danh duy nhất cho các phiên bản khác nhau của hàm Lambda.
- AWS Lambda tự động gán cho hàm một số phiên bản khi một hàm Lambda được tạo, bắt đầu với $LATEST cho lần triển khai gần đây nhất.
- Mỗi khi một phiên bản mới được phát hành, AWS Lambda sẽ tăng số phiên bản và duy trì lịch sử các phiên bản trước đó. Điều này cho phép dễ dàng khôi phục và tham chiếu đến các cấu hình hàm cũ hơn.
Phiên bản cụ thể của hàm Lambda là bất biến; sau khi được xuất bản, mã và cài đặt của hàm đó không thể thay đổi. Tôi sử dụng quản lý phiên bản để kiểm tra mã mới trong một môi trường được kiểm soát trước khi cập nhật phiên bản sản xuất.
AWS Lambda cũng cho phép tạo các alias trỏ đến các phiên bản hàm cụ thể. Tôi cập nhật hàm bằng cách thay đổi alias để trỏ đến phiên bản mới, đảm bảo giảm thiểu gián đoạn và tạo điều kiện thuận lợi triển khai blue-green.
Những hạn chế khi sử dụng AWS Lambda là gì?
Những hạn chế khi sử dụng AWS Lambda bao gồm các ràng buộc cụ thể về môi trường thực thi và tài nguyên:
- Hàm AWS Lambda có giới hạn thời gian thực thi tối đa, hạn chế các quy trình chạy lâu hơn.
- Việc phân bổ bộ nhớ cho hàm Lambda bị giới hạn, ảnh hưởng đến việc xử lý các tác vụ đòi hỏi nhiều bộ nhớ.
- AWS Lambda áp đặt giới hạn kích thước gói triển khai, ảnh hưởng đến việc tích hợp các thư viện hoặc phần phụ thuộc lớn.
- Hàm Lambda gặp phải vấn đề khởi động nguội, dẫn đến độ trễ khi thực thi hàm, đặc biệt là sau một khoảng thời gian không hoạt động.
- Việc tích hợp với VPC có thể dẫn đến độ trễ và độ phức tạp trong quá trình thiết lập.
- AWS Lambda áp dụng mô hình thanh toán trả tiền theo mức sử dụng, điều này dẫn đến chi phí không thể dự đoán trước cho các ứng dụng có mô hình sử dụng biến động.
Hướng dẫn trả lời các câu hỏi phỏng vấn Lambda trung cấp
Lambda xử lý lỗi trong quá trình xử lý sự kiện như thế nào?
Trong Lambda, một hàm được chạy ở chế độ đồng bộ hoặc bất đồng bộ. Nếu một hàm bị lỗi ở chế độ đồng bộ, nó chỉ tạo ra một ngoại lệ cho ứng dụng gọi hàm đó. Nếu một hàm bị lỗi ở chế độ bất đồng bộ, nó sẽ được thử lại ít nhất 3 lần.
AWS Lambda@Edge là gì và được sử dụng như thế nào?
AWS Lambda@Edge là một tính năng của AWS Lambda cho phép chạy các hàm Lambda tại các vị trí AWS Edge gần người dùng cuối hơn, nhờ đó giảm độ trễ và cải thiện hiệu suất. Edge tích hợp liền mạch với Amazon CloudFront, một mạng phân phối nội dung (CDN), cho phép thực thi mã trên mạng lưới toàn cầu các vị trí AWS mà không cần cung cấp hoặc quản lý máy chủ. Tính năng này đặc biệt hữu ích cho việc tùy chỉnh nội dung được phân phối qua CloudFront như cá nhân hóa trang web, chỉnh sửa hình ảnh hoặc tạo phản hồi dựa trên đặc điểm yêu cầu của người xem.
Lambda@Edge hỗ trợ các ngôn ngữ AWS Lambda chuẩn và tuân theo cùng một mô hình thực thi. Dịch vụ này lý tưởng cho các ứng dụng yêu cầu truy cập tài nguyên AWS với độ trễ thấp và xử lý các yêu cầu HTTP theo thời gian thực. Lambda@Edge tự động mở rộng theo số lượng yêu cầu, đảm bảo tính khả dụng cao và hiệu suất ổn định. Đây là một công cụ mạnh mẽ để xây dựng các ứng dụng và dịch vụ phản hồi nhanh hơn bằng cách đưa khả năng tính toán đến gần hơn với người dùng cuối.
Làm thế nào để khắc phục lỗi trong các hàm AWS Lambda?
Để khắc phục lỗi trong các hàm AWS Lambda, tôi thường tuân theo các nguyên tắc sau:
- Kiểm tra CloudWatch Logs để tìm thông báo lỗi và theo dõi stack nhằm khắc phục sự cố trong các hàm AWS Lambda. Các logs này cung cấp thông tin chi tiết về việc thực thi các hàm Lambda và bất kỳ lỗi nào xảy ra.
- Đảm bảo hàm có đủ quyền và vai trò cần thiết, xác thực cấu hình của hàm, bao gồm cài đặt thời gian chờ và phân bổ bộ nhớ, để đảm bảo chúng phù hợp với nhu cầu của ứng dụng.
- Xem lại input dữ liệu sự kiện để xác nhận nó tuân thủ định dạng và cấu trúc dự kiến. Điều này rất quan trọng vì input data không chính xác hoặc bị lỗi có thể dẫn đến lỗi runtime.
- Kiểm tra chức năng cục bộ bằng các công cụ như AWS SAM hoặc khả năng kiểm tra cục bộ Lambda để sao chép và chẩn đoán sự cố trong môi trường được kiểm soát. Nếu sự cố vẫn tiếp diễn, bật AWS X-Ray cho hàm Lambda, tính năng này cung cấp thông tin chi tiết về hiệu suất và luồng thực thi, giúp xác định các điểm nghẽn hoặc lỗi.
- Khắc phục mọi sự cố kết nối mạng bằng cách kiểm tra cài đặt VPC nếu hàm Lambda được cấu hình để truy cập tài nguyên trong VPC.
Bạn sửa lỗi ứng dụng serverless như thế nào?
Để sửa lỗi trong ứng dụng serverless, tôi sử dụng AWS X-Ray kết hợp với CloudWatch để:
- Cung cấp quyền truy cập x-ray vào các vai trò hàm Lambda để thực thi;
- Thiết lập “mode of code tracing” để hoạt động.
Khi người dùng kích hoạt các thành phần X-RAY cho Lambda, hệ thống sẽ bắt đầu ghi lại nhiều thông tin khác nhau, bao gồm thời gian dành cho từng dịch vụ Lambda, tổng thời gian dành cho tất cả các dịch vụ Lambda, thời lượng thực thi của từng chức năng… Hiện tại, có các bộ công cụ phát triển phần mềm (SDK) X-ray cho cả Node.js và Java.
Quy trình thiết lập VPC với AWS Lambda như thế nào?
Người dùng cần tạo một VPC trong AWS Management Console. Quy trình này bao gồm việc xác định dải địa chỉ IP (IP address range), tạo subnet và thiết lập Internet Gateway.
Sau khi VPC được cấu hình, người dùng có thể cấu hình VPC cho các hàm AWS Lambda bằng cách chỉ định subnet và Security Group (nhóm bảo mật) trong phần cấu hình hàm Lambda. Cấu hình này cho phép Lambda truy cập tài nguyên bên trong VPC.
Security Group và Network Access Control List (NACL) được sử dụng để kiểm soát lưu lượng mạng vào và ra khỏi các hàm Lambda. Người dùng cần thiết lập các quy tắc cho phép lưu lượng cần thiết và gán IAM role phù hợp để hàm Lambda có quyền truy cập các dịch vụ AWS khác trong VPC. Việc triển khai Lambda với cấu hình này đảm bảo nó hoạt động an toàn trong môi trường VPC.
Môi trường sandbox của AWS Lambda có những hạn chế gì và ảnh hưởng ra sao?
Môi trường sandbox của Lambda không cho phép:
- Kết nối qua cổng TCP 25 (để ngăn spam email).
- Kết nối mạng inbound (nhận kết nối từ bên ngoài) hoặc mở phiên debug.
- Quyền truy cập root hoặc cài đặt phần mềm tùy ý trên hệ điều hành Lambda.
Lambda chỉ hỗ trợ kết nối outbound qua TCP/IP. Điều này nghĩa là bạn không thể lắng nghe socket hoặc truy cập trực tiếp tài nguyên nội bộ trong VPC nếu chưa cấu hình VPC. Ngoài ra, bạn không có quyền truy cập root hoặc cài đặt phần mềm tùy ý trên hệ điều hành Lambda – phải đóng gói mọi thứ cần thiết trong hàm hoặc layer.
Giải thích cách sử dụng biến môi trường trong AWS Lambda?
Việc sử dụng biến môi trường trong AWS Lambda giúp lưu trữ các thiết lập cấu hình và bảo mật thông tin nhạy cảm, cho phép các nhà phát triển thay đổi hành vi của hàm Lambda mà không cần thay đổi mã. Biến môi trường là cặp key-value lưu trữ dữ liệu như chuỗi kết nối cơ sở dữ liệu, file path và khóa API. Chúng có thể truy cập được trong mã hàm Lambda và được mã hóa để tăng cường bảo mật.
Hàm Lambda truy xuất giá trị của các biến môi trường này khi chạy, cho phép tách dữ liệu bí mật khỏi mã hàm, hỗ trợ quy trình phát triển an toàn và dễ quản lý hơn. Biến môi trường đặc biệt hữu ích trong các quy trình triển khai, vì chúng cho phép thiết lập ở nhiều giai đoạn khác nhau như phát triển, thử nghiệm và sản xuất. Mã hóa biến môi trường bằng AWS Key Management Service (KMS) để tăng cường bảo mật, đảm bảo thông tin nhạy cảm được bảo vệ, cho phép cấu hình hàm linh hoạt và hiệu quả.
Bạn quản lý và cập nhật mã hàm Lambda như thế nào?
Tôi sử dụng AWS Management Console hoặc AWS CLI (giao diện dòng lệnh) để quản lý và cập nhật mã hàm Lambda.
- Management Console cung cấp giao diện đồ họa thân thiện với người dùng để tải lên mã mới hoặc chỉnh sửa trực tiếp mã hiện có. Phương pháp này phù hợp với những thay đổi nhỏ hoặc cập nhật nhanh.
- AWS CLI được sử dụng cho các bản cập nhật lớn hơn hoặc triển khai tự động, vì nó cho phép scripting và tích hợp với quy trình CI/CD .
Hàm Lambda cũng có thể được cập nhật thông qua các công cụ IaC như AWS CloudFormation hoặc Serverless Framework, cho phép kiểm soát phiên bản và cập nhật hệ thống các hàm Lambda như một phần của triển khai ứng dụng lớn hơn. Các bản cập nhật mã được tự động triển khai khi cấu hình IaC thay đổi.
Mô tả trường hợp sử dụng AWS Lambda với Amazon DynamoDB?
Các hàm AWS Lambda có thể xử lý, chuyển đổi hoặc tổng hợp dữ liệu ngay khi dữ liệu mới được ghi vào Amazon DynamoDB, mà không cần thao tác thủ công hay triển khai thêm cơ sở hạ tầng. Cách thiết lập này lý tưởng cho các ứng dụng yêu cầu xử lý dữ liệu theo thời gian thực, như theo dõi hành vi người dùng, cập nhật trạng thái đơn hàng hoặc giám sát tồn kho.
Ví dụ: khi khách hàng đặt sản phẩm, một mục mới sẽ được thêm vào bảng Orders trong DynamoDB. Sự kiện này tự động kích hoạt một hàm Lambda đã cấu hình sẵn. Hàm này đọc dữ liệu đơn hàng, tính toán điểm thưởng dựa trên giá trị đơn hàng và cập nhật điểm vào hồ sơ khách hàng. Toàn bộ quy trình diễn ra tự động, không cần máy chủ vật lý, giúp quản lý và tính toán điểm thưởng nhanh chóng, chính xác và tối ưu chi phí.
Làm thế nào để tối ưu hóa thời gian cold start (khởi động nguội) cho AWS Lambda trong môi trường sản xuất?
Để giảm thiểu thời gian khởi động nguội (cold start), có thể áp dụng các kỹ thuật sau:
- Tối ưu gói triển khai: Giữ kích thước nhỏ, loại bỏ phụ thuộc không cần thiết, dùng công cụ như Webpack để đóng gói và thu gọn mã.
- Chọn runtime có thời gian khởi động nhanh: Ví dụ như Node.js hoặc Python thường có thời gian cold start ngắn hơn so với các runtime khác.
- Khởi tạo các tài nguyên quan trọng bên ngoài handler (trình xử lý): Các kết nối hoặc đối tượng cần thiết được khởi tạo trước để sẵn sàng khi hàm Lambda chạy.
- Gọi hàm Lambda theo lịch: Việc khởi động trước các hàm Lambda bằng cách kích hoạt chúng thường xuyên sẽ đảm bảo chúng luôn ở trạng thái sẵn sàng, giảm độ trễ khởi động nguội.
- Sử dụng Provisioned Concurrency: Duy trì sẵn một số lượng phiên bản Lambda đã khởi tạo trước, đảm bảo phản hồi gần như tức thì khi lưu lượng tăng đột biến.
Bằng cách kết hợp các phương pháp này, ứng dụng sẽ giảm đáng kể độ trễ khi cold start, đảm bảo hiệu suất và trải nghiệm người dùng trong môi trường production.
Các câu hỏi phỏng vấn Lambda cấp cao
Bạn xử lý các giao dịch phân tán trong kiến trúc serverless bằng AWS Lambda như thế nào?
Trong kiến trúc serverless với AWS Lambda, tôi thường xử lý các giao dịch phân tán bằng cách áp dụng saga pattern. Mỗi bước trong giao dịch sẽ là một hàm Lambda riêng biệt và nếu một bước nào đó thất bại, tôi sẽ triển khai các hàm bù trừ để hoàn tác hành động đã thực hiện trước đó.
Tôi cũng tích hợp AWS Step Functions để điều phối luồng làm việc giữa các Lambda, đảm bảo tính nhất quán và khả năng phục hồi của giao dịch. Tôi sử dụng Amazon DynamoDB làm kho dữ liệu cho trạng thái giao dịch giúp duy trì sự đồng bộ và cho phép dễ dàng truy vấn trạng thái hiện tại.
Cần cân nhắc gì khi triển khai quy trình CI/CD cho các hàm Lambda?
- Quy trình CI/CD cho AWS Lambda cần tích hợp với AWS CodeCommit, CodeBuild và CodePipeline để tự động hóa xây dựng, kiểm thử và triển khai.
- Nên hỗ trợ các chiến lược triển khai như Blue/Green hoặc Canary để giảm thiểu rủi ro.
- Quy trình phải có kiểm soát phiên bản, quản lý hiện vật và kiểm thử tự động (đơn vị, tích hợp, hiệu suất) để đảm bảo độ tin cậy.
- Cần giám sát và logging bằng AWS CloudWatch để theo dõi hiệu suất.
- Pipeline phải linh hoạt để thích ứng với các thay đổi của hàm Lambda.
Điều gì xảy ra khi đạt đến số lần thực hiện tối đa trên một tài khoản?
Khi đạt đến ngưỡng này, lệnh gọi đồng bộ đến các hàm AWS Lambda sẽ nhận được lỗi cho biết ngưỡng đã đạt (mã lỗi 429). Các hàm Lambda được gọi không đồng bộ phải có khả năng chịu được các đợt tăng đột biến lưu lượng thường xuyên trong 15 – 30 phút trước khi được yêu cầu bắt đầu từ chối và điều tiết các sự kiện đến.
Nếu hàm Lambda đang được gọi để phản hồi các sự kiện Amazon S3 bị từ chối, Amazon S3 có thể giữ các sự kiện đó trong tối đa 24 giờ và thử xử lý lại trong thời gian đó. Các sự kiện từ luồng Amazon Kinesis và Amazon DynamoDB được thử lại trong trường hợp hàm Lambda không thành công hoặc dữ liệu không hết hạn vào thời điểm thích hợp. Luồng Amazon Kinesis và Amazon DynamoDB được sử dụng để lưu trữ dữ liệu trong một ngày tương ứng.
Các hàm dựa trên Lambda có còn khả dụng sau khi mã hoặc cấu hình thay đổi không?
Có, các hàm dựa trên Lambda vẫn khả dụng sau khi mã hoặc cấu hình được thay đổi. Khi một hàm Lambda được cập nhật, sẽ có một khoảng thời gian ngắn (chưa đến 1 phút) để các yêu cầu có thể được xử lý bởi phiên bản cũ hoặc mới của hàm.
Làm thế nào để tăng bộ nhớ được phân bổ cho hàm Lambda và điều này ảnh hưởng như thế nào đến hiệu suất?
Để tăng bộ nhớ được phân bổ cho một hàm Lambda, tôi điều hướng đến bảng điều khiển AWS Lambda, chọn hàm đó và điều chỉnh cài đặt bộ nhớ trong tab ‘Configuration’. Việc tăng bộ nhớ được phân bổ có thể cải thiện hiệu suất bằng cách cung cấp nhiều năng lượng CPU hơn, nhưng cũng có thể làm tăng chi phí.
Chiến lược nào giúp xử lý các lệnh gọi tần suất cao, quy mô lớn trong AWS Lambda mà không đạt đến giới hạn điều tiết?
Tôi thường áp dụng nhiều phương pháp như:
- Tăng giới hạn đồng thời dành riêng cho hàm Lambda. Hành động này trực tiếp tăng số lượng phiên bản có thể chạy đồng thời, giúp quản lý hiệu quả lưu lượng truy cập cao hơn.
- Sử dụng AWS Step Functions để điều phối và quản lý các hàm Lambda. Cách tiếp cận này đảm bảo thực thi và xử lý lỗi hiệu quả, đặc biệt là đối với các quy trình làm việc phức tạp.
- Việc thiết kế hiệu quả các hàm Lambda cũng đóng một vai trò quan trọng. Việc tối ưu hóa mã để thực thi nhanh hơn sẽ giảm thời gian của mỗi lần gọi, cho phép nhiều hàm được thực thi hơn trong cùng một khung thời gian.
- Triển khai cơ chế thử lại (retry) với Exponential Backoff và Jitter để xử lý trơn tru các lần gọi hàm đột biến. Cơ chế này thử lại các lần gọi hàm không thành công với độ trễ tăng dần, ngăn chặn sự gia tăng đột ngột các lệnh gọi hàm.
- Giám sát và logging với AWS CloudWatch để theo dõi hiệu suất Lambda theo thời gian thực, xác định và giải quyết nhanh chóng các sự cố có thể dẫn đến việc điều tiết.
Trình bày những phương pháp tốt nhất để logging và monitoring ở quy mô lớn với AWS Lambda?
Khi số lượng hàm Lambda tăng, việc logging và monitoring cần chiến lược rõ ràng:
- Quản lý log tập trung bằng Amazon CloudWatch Logs để tổng hợp nhật ký trên tất cả các hàm Lambda. Điều này đảm bảo chế độ xem nhật ký thống nhất, tạo điều kiện phân tích và giám sát dễ dàng hơn.
- Triển khai logging có cấu trúc bằng JSON cho log messages. Phương pháp này nâng cao khả năng đọc và lọc nhật ký.
- Sử dụng AWS X-Ray để theo dõi chi tiết việc thực thi hàm Lambda. X-Ray cung cấp thông tin chi tiết về hiệu suất và tình trạng hoạt động của các hàm Lambda, giúp xác định các điểm nghẽn và sự cố.
- Thiết lập giám sát và cảnh báo theo thời gian thực bằng CloudWatch Metrics và Alarms. Các công cụ này theo dõi các chỉ số quan trọng như tỷ lệ lỗi và thời gian thực thi, kích hoạt thông báo khi có bất kỳ bất thường hoặc vi phạm ngưỡng nào.
- Tối ưu hóa chính sách lưu giữ nhật ký trong CloudWatch Logs để cân bằng giữa khả năng truy cập dữ liệu lịch sử và hiệu quả chi phí. Triển khai các chiến lược luân chuyển và lưu trữ nhật ký để quản lý khối lượng dữ liệu nhật ký theo thời gian.
- Sử dụng AWS Lambda Insights để hiểu sâu hơn các chỉ số hiệu suất hàm Lambda. Lambda Insights cung cấp các chỉ số và nhật ký nâng cao trực tiếp trong bảng điều khiển Lambda, hỗ trợ xác minh và điều chỉnh nhanh chóng.
- Thường xuyên xem xét và cập nhật các thiết lập monitoring và logging để bắt kịp với các yêu cầu ứng dụng và các phương pháp hay nhất của AWS.
Mô tả các trường hợp sử dụng nâng cao cho AWS Lambda với quyền truy cập liên tài khoản?
Một số trường hợp mà tôi đã có kinh nghiệm như:
- Tận dụng AWS Lambda cho các ứng dụng phức tạp, có khả năng mở rộng và bảo mật trên nhiều tài khoản AWS. Các hàm AWS Lambda có thể tương tác với tài nguyên trong các tài khoản AWS khác nhau, mang đến giải pháp mạnh mẽ cho kiến trúc phân tán. Quyền truy cập liên tài khoản rất cần thiết cho các tổ chức lớn có nhiều đơn vị kinh doanh cần truy cập vào tài nguyên dùng chung, đồng thời duy trì kiểm soát truy cập và bảo mật nghiêm ngặt.
- Các hàm Lambda đảm nhận vai trò trong các tài khoản AWS khác để thực hiện các hành động như xử lý dữ liệu, gọi API hoặc quản lý tài nguyên. Thiết lập này đảm bảo tính cô lập và bảo mật dữ liệu, vì các hàm Lambda thực thi trong một môi trường được kiểm soát với các quyền cụ thể. Bằng cách triển khai kích hoạt liên tài khoản, các hàm Lambda phản hồi các sự kiện trong một tài khoản và thực thi tác vụ trong một tài khoản khác, tạo điều kiện thuận lợi cho việc giao tiếp giữa các tài khoản liền mạch.
Lambda có cơ chế tăng năng lực tính toán riêng (scale vertical) hay không? Nếu có, thì cách thức tăng như thế nào?
Lambda không cho scale dọc CPU hay gắn thêm tài nguyên như server; cách duy nhất là tăng memory (cũng tăng CPU proportionally) hoặc chuyển workload qua dịch vụ khác nếu một instance Lambda không đủ sức.
Để xử lý khối lượng công việc lớn, Lambda chủ yếu scale theo chiều ngang (tạo nhiều instance hàm để xử lý song song) thay vì vertical scaling.
Làm thế nào để triển khai cơ chế ủy quyền tùy chỉnh cho các hàm AWS Lambda?
- Sử dụng các vai trò và chính sách IAM để triển khai cơ chế ủy quyền tùy chỉnh cho các hàm AWS Lambda. Các vai trò này xác định quyền cho hàm Lambda, đảm bảo quyền truy cập an toàn và cụ thể vào tài nguyên AWS.
- Tích hợp Lambda với Amazon API Gateway để quản lý quyền truy cập vào các hàm, cho phép sử dụng các trình ủy quyền Lambda – là mã tùy chỉnh xác thực các mã thông báo người gửi, chẳng hạn như mã thông báo OAuth hoặc xác nhận SAML, cấp quyền truy cập hàm Lambda.
- Cấu hình trình xác thực Lambda trong API Gateway để thực thi logic xác thực tùy chỉnh của mình. Hàm Lambda trả về chính sách IAM mà API Gateway sử dụng để cấp hoặc từ chối quyền truy cập vào hàm Lambda. Quá trình xác thực bao gồm API Gateway gọi trình xác thực Lambda, sau đó xác thực người dùng hoặc ứng dụng thực hiện yêu cầu dựa trên logic tùy chỉnh. API Gateway chỉ chuyển tiếp yêu cầu đến hàm Lambda đích sau khi xác thực và xác thực thành công.
Câu hỏi phỏng vấn Lambda giải quyết tình huống
Xử lý tính bất biến trong AWS Lambda: Hàm Lambda xử lý thanh toán nhưng do sự cố mạng, một số request bị gửi lại, dẫn đến tính phí trùng lặp. Bạn sẽ triển khai idempotency như thế nào?
Tôi triển khai tính năng idempotency bằng cách:
- Sử dụng DynamoDB hoặc Redis để lưu trữ ID giao dịch đã xử lý.
- Triển khai mã thông báo idempotency được truyền trong tiêu đề yêu cầu.
- Cấu hình ánh xạ nguồn sự kiện Lambda để loại bỏ tin nhắn trùng lặp cho các luồng SQS hoặc DynamoDB.
Khi truy vấn một database lớn trên RDS, Lambda bị timeout sau 15s. Theo bạn, có những cách nào để cải thiện tình trạng này?
Tôi sẽ xử lý bằng các bước sau:
- Tối ưu hóa các truy vấn SQL và sử dụng chỉ mục phù hợp.
- Tăng giới hạn thời gian chờ Lambda (tối đa 15 phút).
- Sử dụng RDS Proxy để quản lý kết nối cơ sở dữ liệu hiệu quả.
- Tôi cân nhắc việc di chuyển các truy vấn chạy lâu dài sang Step Functions .
Bạn sẽ làm gì khi triển khai Lambda không thành công do kích thước gói?
- Sử dụng các lớp Lambda để lưu trữ các phụ thuộc được chia sẻ.
- Lưu trữ các tệp lớn trong S3 và tải chúng xuống khi chạy.
- Tối ưu hóa và loại bỏ các phụ thuộc không cần thiết.
- Sử dụng thời gian chạy tùy chỉnh nếu có thể.
Trong một workflow xử lý ảnh upload, Lambda mất khá nhiều thời gian. Nếu gặp case này, bạn sẽ đề xuất những cách tối ưu nào?
Một số cách tối ưu tôi sẽ nghĩ đến là:
- Tăng bộ nhớ và CPU được phân bổ (bộ nhớ nhiều hơn sẽ tự động tăng CPU).
- Sử dụng thông báo sự kiện S3 để kích hoạt quy trình làm việc được tối ưu hóa (ví dụ: SQS hoặc Step Functions).
- Chuyển giao các tác vụ tính toán nặng sang AWS Batch hoặc Fargate .
Khi bạn không thấy bất kỳ log nào trong CloudWatch dù Lambda đã chạy, bạn sẽ kiểm tra theo hướng nào?
Tôi sẽ dùng các cách sau để kiểm tra:
- Đảm bảo vai trò IAM có quyền AWSLambdaBasicExecutionRole
- Ghi nhật ký tin nhắn theo cách thủ công bằng console.log (Node.js) hoặc print (Python).
- Kiểm tra chính sách lưu giữ của CloudWatch (nhật ký có thể bị xóa sau một khoảng thời gian nhất định).
- Xác minh CloudWatch có nằm cùng vùng với Lambda không.
Bạn có một hàm AWS Lambda được kích hoạt bởi API Gateway. Hàm thực thi thành công, nhưng API Gateway lại trả về lỗi 500 Internal Server Error. Nguyên nhân có thể là gì và cách xử lý ra sao?
- Kiểm tra CloudWatch logs để tìm lỗi thực thi Lambda.
- Đảm bảo hàm Lambda trả về phản hồi JSON được định dạng đúng.
- Xác minh vai trò IAM được gắn vào API Gateway có quyền gọi hàm Lambda.
- Xác thực mapping phản hồi tích hợp của API Gateway.
Làm thế nào để bảo mật dữ liệu nhạy cảm như thông tin đăng nhập cơ sở dữ liệu trong AWS Lambda?
- Sử dụng AWS Secrets Manager hoặc SSM Parameter Store thay vì hard-code thông tin xác thực.
- Hạn chế quyền IAM theo nguyên tắc least privilege (đặc quyền tối thiểu).
- Mã hóa các biến môi trường bằng KMS.
- Theo dõi nhật ký truy cập thông qua AWS CloudTrail.
Làm thế nào để chuẩn bị tốt cho phần phỏng vấn AWS Lambda?
Để dễ dàng vượt qua phần phỏng vấn về AWS Lambda, bạn nên tập trung ôn tập các nhóm kiến thức sau:
- Các khái niệm và chức năng chính của AWS Lambda.
- Kiến thức về kiến trúc serverless, điện toán hướng sự kiện và tích hợp Lambda với các dịch vụ AWS khác.
- Kiến thức về các ngôn ngữ lập trình được AWS Lambda hỗ trợ như Python, Node.js và Java, đồng thời thực hành viết và triển khai các hàm Lambda.
- Thành thạo mô hình định giá của Lambda, các kỹ thuật tối ưu hóa hiệu suất và các trường hợp sử dụng phổ biến.
- Các khía cạnh bảo mật của AWS Lambda, bao gồm các vai trò và quyền IAM.
- Cách giám sát và gỡ lỗi các hàm Lambda bằng các công cụ AWS như CloudWatch và X-Ray.
Ngoài ra, để trả lời tốt các câu hỏi tình huống, bạn nên tích lũy nhiều kinh nghiệm thực tế bằng cách:
- Tạo các dự án mẫu sử dụng AWS Lambda trong các tình huống thực tế như tự động hóa tác vụ hoặc tích hợp với AWS S3 và DynamoDB.
- Làm quen với các gói triển khai, quản lý phiên bản và đặt alias của Lambda.
- Hiểu các giới hạn của Lambda như thời gian thực thi và phân bổ bộ nhớ, cũng như cách làm việc trong phạm vi các hạn chế này.
- Thực hành các kỹ thuật khắc phục sự cố phổ biến cho hàm Lambda
- Tổng hợp lại các dự án hoặc kinh nghiệm trước đây của bạn liên quan đến AWS Lambda.
Kinh nghiệm thực tế này không chỉ giúp bạn hiểu sâu hơn mà còn cho phép bạn đưa ra các ví dụ cụ thể trong buổi phỏng vấn.
Tổng kết câu hỏi phỏng vấn Lambda
Việc nắm vững kiến thức lý thuyết về kiến trúc serverless, mô hình định giá, cùng với kinh nghiệm thực tế trong việc triển khai và xử lý sự cố, sẽ là chìa khóa để bạn vượt qua các câu hỏi phỏng vấn Lambda AWS một cách xuất sắc. Hãy luyện tập trả lời các câu hỏi phỏng vấn Lambda mà ITviec vừa chia sẻ, chuẩn bị các ví dụ cụ thể về dự án của bạn và tự tin thể hiện những kỹ năng mà bạn đã có để từng bước chinh phục vị trí công việc mong muốn.