Khóa học
Một trong những dịch vụ AWS quan trọng nhất cần nắm vững là AWS Lambda—một dịch vụ điện toán không máy chủ chạy mã để phản hồi các sự kiện và tự động quản lý tài nguyên cơ bản.
Khi Lambda được áp dụng rộng rãi hơn, việc gặp các câu hỏi về AWS Lambda trong phỏng vấn kỹ thuật là điều thường thấy.
Hướng dẫn này đơn giản hóa việc chuẩn bị phỏng vấn AWS Lambda bằng cách cung cấp danh sách tuyển chọn các câu hỏi và câu trả lời. Chúng tôi bao quát những điều cơ bản, đồng thời đi sâu vào các kịch bản nâng cao và thực tiễn.
Nếu bạn muốn tìm hiểu thêm về AWS, hãy xem khóa học về Công nghệ và Dịch vụ Đám mây AWS.
Vì sao chọn AWS?
Trước khi đi vào các câu hỏi và câu trả lời phỏng vấn, điều quan trọng là hiểu vì sao AWS Cloud là nền tảng được ưu tiên—chính điều này cũng có thể là một câu hỏi trong buổi phỏng vấn.
Hãy bắt đầu bằng cách xem xét biểu đồ sau:

Nguồn (Statista)
Biểu đồ minh họa vị thế thống trị của AWS trên thị trường dịch vụ hạ tầng đám mây toàn cầu trong Quý 2/2023. Với 32% thị phần, AWS là người dẫn đầu rõ rệt, bỏ xa đối thủ gần nhất là Microsoft Azure, chiếm 22% thị phần. Trong khi các nhà cung cấp lớn khác như Google Cloud (11%) và Alibaba Cloud (4%) cũng góp phần vào thị trường, thị phần của họ vẫn mờ nhạt khi so với AWS và Azure.
Tổng doanh thu do các dịch vụ hạ tầng đám mây tạo ra trong Quý 2/2023, lên tới 65 tỷ USD, càng nhấn mạnh tầm quan trọng và ý nghĩa tài chính ngày càng tăng của thị trường này. Vị trí dẫn đầu của AWS trong lĩnh vực đang phát triển mạnh mẽ này củng cố tầm quan trọng chiến lược của nó đối với các doanh nghiệp đang tìm kiếm giải pháp đám mây đáng tin cậy và có khả năng mở rộng.
Nếu bạn muốn tìm hiểu thêm về cách các nhà cung cấp đám mây khác nhau so sánh với nhau, hãy xem bảng cheat sheet về So sánh dịch vụ AWS, Azure và GCP.
Mặc dù khía cạnh tài chính rất đáng kể, sức hấp dẫn của AWS còn vượt xa thị phần, bao gồm danh mục dịch vụ phong phú, độ tin cậy, khả năng mở rộng, phạm vi toàn cầu, bảo mật vững chắc, đổi mới liên tục và cộng đồng hỗ trợ. Những yếu tố kết hợp này khiến chuyên môn về AWS trở thành kỹ năng được săn đón trong ngành công nghệ, mở ra nhiều cơ hội nghề nghiệp cho những ai thành thạo nền tảng đám mây hàng đầu này.
Hãy cùng xem một vài câu hỏi phỏng vấn!
Câu hỏi phỏng vấn AWS Lambda cơ bản
Bắt đầu với những điều căn bản. Dù bạn mới làm quen với AWS Lambda hay chỉ muốn ôn tập, các nền tảng này sẽ giúp bạn sẵn sàng đi sâu hơn vào các khả năng của Lambda.
1. AWS Lambda là gì?
AWS Lambda là dịch vụ điện toán không máy chủ cho phép bạn chạy mã mà không cần cấp phát hoặc quản lý máy chủ. Lambda chỉ chạy mã khi cần và tự động mở rộng, từ vài yêu cầu mỗi ngày đến hàng nghìn yêu cầu mỗi giây.
2. Các thành phần chính của một hàm Lambda là gì?
Các thành phần chính của một hàm Lambda gồm:
- Handler: Điểm vào của hàm, là một phương thức trong mã xử lý sự kiện gọi hàm. Hãy coi nó như hàm "main" của mã Lambda.
- Event: Dữ liệu đầu vào định dạng JSON kích hoạt việc thực thi hàm. Nó mang thông tin về những gì đã khởi tạo lời gọi hàm.
- Context: Đối tượng chứa thông tin thời gian chạy về môi trường thực thi của hàm. Bao gồm tên hàm, phiên bản, giới hạn bộ nhớ, ID yêu cầu và thời gian thực thi còn lại.
- Biến môi trường: Các cặp khóa-giá trị bạn có thể đặt để cấu hình hành vi của hàm Lambda mà không cần sửa mã. Thường dùng để lưu khóa API, thông tin xác thực cơ sở dữ liệu, hoặc các thiết lập khác.
3. Lambda hỗ trợ những ngôn ngữ nào?
Lambda hỗ trợ nguyên bản Node.js, Python, Ruby, Java, Go, C# và PowerShell. Nghĩa là chúng ta có thể viết hàm Lambda trực tiếp bằng các ngôn ngữ này mà không cần thiết lập bổ sung.
Ngoài ra, Lambda cho phép dùng runtime tùy chỉnh, linh hoạt đóng gói mã hàm và phụ thuộc trong một ảnh container. Điều này cho phép hỗ trợ hầu như mọi ngôn ngữ lập trình, giúp chúng ta chọn công cụ phù hợp nhất với nhu cầu.
4. Cách tạo một hàm Lambda?
Có một số cách để tạo hàm Lambda:
|
Phương thức |
Mô tả |
Phù hợp nhất cho |
|
Bảng điều khiển Lambda |
Viết mã trực tiếp trong trình soạn thảo của trình duyệt. |
Hàm đơn giản, thử nghiệm nhanh |
|
Gói triển khai |
Đóng gói mã và phụ thuộc vào tệp ZIP và tải lên. |
Dự án lớn hơn, hàm phức tạp |
|
Ảnh Container |
Đóng gói hàm dưới dạng ảnh Docker container. |
Runtime tùy chỉnh, cấu hình chuyên biệt |
|
Hạ tầng dưới dạng mã |
Khai báo hàm và tài nguyên bằng mã khai báo với AWS SAM, CloudFormation hoặc CDK. |
Quản lý ứng dụng serverless phức tạp, tự động hóa |
5. Có những cách nào để gọi một hàm Lambda?
Chúng ta có thể gọi hàm Lambda theo nhiều cách:
- Gọi đồng bộ: Client chờ hàm hoàn thành và trả về phản hồi.
- Gọi bất đồng bộ: Client không chờ phản hồi—Lambda thực thi hàm ở nền.
- Ánh xạ nguồn sự kiện: Lambda tự động thăm dò các dịch vụ như DynamoDB hoặc Kinesis và gọi hàm dựa trên sự kiện.
- Các phương thức khác: Bao gồm API Gateway, AWS SDK hoặc lịch chạy qua Amazon EventBridge.
Câu hỏi phỏng vấn AWS Lambda trung cấp
1. Làm thế nào để triển khai phụ thuộc cùng với mã Lambda?
Có vài lựa chọn để đóng gói phụ thuộc cùng mã Lambda:
- Gộp trực tiếp: Với ngôn ngữ thông dịch, chúng ta có thể đặt các tệp phụ thuộc cùng với mã hàm trong gói triển khai .zip.
- Lambda layer: Với ngôn ngữ biên dịch hoặc phụ thuộc lớn, chúng ta có thể dùng layer để đóng gói riêng và chia sẻ phụ thuộc chung giữa các hàm.
- Ảnh container: Chúng ta cũng có thể đóng gói phụ thuộc trong ảnh container cùng với mã hàm Lambda và runtime tùy chỉnh.
2. Làm sao tối ưu hiệu năng của các hàm Lambda?
Có nhiều lựa chọn để tối ưu hàm Lambda:
- Phân bổ bộ nhớ: Chọn kích thước bộ nhớ phù hợp rất quan trọng để cân bằng chi phí và hiệu năng. Các công cụ như AWS Lambda Power Tuning có thể giúp tìm cấu hình tối ưu.
- Kích thước gói: Gói hàm nhỏ hơn giúp khởi động lạnh nhanh hơn (thời gian Lambda khởi tạo ở lần gọi đầu). Giảm kích thước gói bằng cách loại bỏ phụ thuộc không cần thiết và nén mã.
- Lambda SnapStart: Tính năng này khởi tạo trước môi trường hàm, giảm đáng kể thời gian khởi động lạnh cho một số runtime nhất định.
- Provisioned concurrency: Cấu hình để giữ các phiên bản hàm ở trạng thái “ấm”, đảm bảo thời gian phản hồi ổn định cho tải quan trọng.
- Timeout và giới hạn đồng thời: Đặt thời gian chờ và đồng thời dự trữ phù hợp để tránh hàm chạy mất kiểm soát và duy trì môi trường Lambda ổn định.
3. Bạn có thể dùng công cụ nào để giám sát và gỡ lỗi các hàm Lambda?
Lambda tự động gửi số liệu tới Amazon CloudWatch, bao gồm số lượng yêu cầu, độ trễ, tỷ lệ lỗi và nhiều chỉ số khác.
Chúng ta có thể dùng CloudWatch Logs để truy cập nhật ký do mã hàm và runtime Lambda tạo ra.
Để truy vết và khắc phục sự cố hiệu năng của các ứng dụng Lambda phân tán, chúng ta có thể dùng AWS X-Ray.
4. Lambda extensions dùng để làm gì?
Lambda extensions cho phép chúng ta tăng cường chức năng bằng cách tích hợp với các công cụ giám sát, quan sát, bảo mật và quản trị.
Extensions có thể chạy như các tiến trình riêng trong môi trường thực thi để thu thập thông tin chẩn đoán hoặc gửi dữ liệu tới đích tùy chỉnh.
Ví dụ gồm extension của Datadog cho số liệu và truy vết, và extension AWS AppConfig cho cập nhật cấu hình động.
5. Event source mapping là gì?
Event source mapping là một tài nguyên của Lambda dùng để đọc mục từ một nguồn sự kiện và gọi một hàm.
Chúng ta có thể dùng event source mapping để xử lý các mục từ luồng Amazon DynamoDB, luồng Amazon Kinesis, hàng đợi Amazon MQ, Apache Kafka tự quản trị, hàng đợi Amazon SQS, và hơn thế nữa.
Lambda cung cấp cơ chế thăm dò để đọc theo lô các bản ghi từ nguồn sự kiện và gọi hàm.
Câu hỏi phỏng vấn AWS Lambda nâng cao
1. Làm thế nào bạn kiểm soát quyền truy cập vào các hàm Lambda?
AWS Lambda sử dụng IAM (Identity and Access Management) để kiểm soát truy cập ở hai cấp độ:
- Chính sách dựa trên tài nguyên chỉ định các tài khoản, dịch vụ và tài nguyên AWS nào được phép gọi hàm.
- Vai trò thực thi của hàm xác định mã hàm có thể truy cập những dịch vụ và tài nguyên AWS nào. Theo nguyên tắc đặc quyền tối thiểu, các chính sách này nên bị giới hạn tối đa nhưng vẫn cho phép hàm thực hiện đúng nhiệm vụ.
2. Làm sao giảm thiểu khởi động lạnh trong Lambda?
Khởi động lạnh xảy ra khi Lambda cần khởi tạo môi trường thực thi mới để xử lý yêu cầu. Để giảm khởi động lạnh và cải thiện khả năng phản hồi của hàm Lambda, chúng ta có thể áp dụng một số chiến lược:
- Dùng SnapStart: Tính năng này (hỗ trợ cho một số runtime) cho phép lưu trữ môi trường đã khởi tạo, giúp giảm đáng kể thời gian khởi động cho các lần gọi sau.
- Bật provisioned concurrency: Bằng cách giữ sẵn một nhóm môi trường đã khởi tạo, chúng ta có thể loại bỏ khởi động lạnh cho tải dự đoán được.
- Tối ưu kích thước gói: Giảm kích thước gói hàm bằng cách loại bỏ phụ thuộc không cần thiết và tối ưu mã để tăng tốc quá trình khởi tạo.
- Lựa chọn ngôn ngữ: Chọn các ngôn ngữ như Go hoặc Rust, vốn có thời gian khởi động nhanh hơn so với ngôn ngữ trên JVM, cũng giúp giảm trễ khởi động lạnh.
- Tái sử dụng ngữ cảnh thực thi: Tách mã xử lý chính của Lambda khỏi logic khởi tạo ban đầu để có thể tái sử dụng ngữ cảnh thực thi giữa các lần gọi, giảm thêm chi phí.
3. Một số thực tiễn tốt về bảo mật API cho Lambda là gì?
Khi công bố hàm Lambda qua API Gateway, một số thực tiễn bảo mật gồm:
- Sử dụng IAM hoặc Lambda authorizer để xác thực và phân quyền yêu cầu.
- Bật Amazon Cognito user pools để quản lý người dùng.
- Định nghĩa chính sách tài nguyên để cho phép hoặc từ chối truy cập dựa trên thuộc tính yêu cầu như địa chỉ IP nguồn.
- Thiết lập mTLS cho giao tiếp client-server an toàn.
- Dùng AWS WAF để bảo vệ trước các khai thác web phổ biến nhắm vào API.
4. Sự khác nhau giữa ảnh container Lambda và gói triển khai .zip là gì?
Ảnh container Lambda cho phép đóng gói mã hàm và phụ thuộc theo định dạng container tương thích OCI. Hãy so sánh ảnh container với gói triển khai .zip:
|
Tính năng |
Ảnh Container |
Gói triển khai .zip |
|
Linh hoạt về runtime |
Tự mang runtime (bất kỳ ngôn ngữ hay phiên bản nào) |
Giới hạn ở các runtime được Lambda định nghĩa sẵn |
|
Kích thước triển khai |
Lên tới 10GB |
Lên tới 250MB (sau khi giải nén) |
|
Triển khai & Khởi động lạnh |
Triển khai chậm hơn và có thể có độ trễ khởi động lạnh cao hơn |
Triển khai nhanh hơn và thường có độ trễ khởi động lạnh thấp hơn |
|
Công cụ & Quy trình làm việc |
Tích hợp liền mạch với bộ công cụ và quy trình container hiện có |
Có thể cần công cụ bổ sung để quản lý phụ thuộc và triển khai |
|
Phù hợp nhất cho |
Ứng dụng có phụ thuộc lớn hoặc yêu cầu runtime tùy chỉnh |
Ứng dụng nhỏ và tương thích với runtime định nghĩa sẵn của Lambda |
5. Các hàm Lambda có thể gọi các hàm Lambda khác không?
Có, các hàm Lambda có thể gọi trực tiếp các hàm khác bằng AWS SDK. Các trường hợp sử dụng phổ biến gồm điều phối hàm, tổng hợp kết quả từ nhiều hàm và lan tỏa xử lý sự kiện.
Khi một hàm Lambda gọi hàm khác, chính sách dựa trên tài nguyên của hàm được gọi phải cấp quyền rõ ràng để cho phép lời gọi từ hàm gọi.
Câu hỏi phỏng vấn AWS Lambda thực tiễn
1. Làm thế nào triển khai một REST API đơn giản bằng Lambda và API Gateway?
Chúng ta có thể triển khai một REST API đơn giản bằng Lambda và API Gateway theo các bước sau:
- Tạo một hàm Lambda: Phát triển một hàm Lambda nhận đầu vào từ API Gateway dưới dạng đối tượng sự kiện và trả về đối tượng phản hồi với dữ liệu và mã trạng thái.
- Tạo API Gateway: Trong API Gateway, tạo REST API mới với tài nguyên và phương thức tương ứng với đường dẫn API và phương thức HTTP.
- Cấu hình tích hợp: Cấu hình kiểu tích hợp của phương thức là Lambda proxy và chỉ định hàm cần gọi
- Triển khai API: Triển khai API để tạo điểm cuối URL công khai cho việc truy cập.
- Kiểm thử kỹ lưỡng: Có thể dùng công cụ như cURL hoặc Postman để đảm bảo API hoạt động đúng, với hàm Lambda xử lý yêu cầu và trả về phản hồi phù hợp.
2. Làm sao cấu hình một hàm Lambda để xử lý sự kiện từ một bucket S3?
Chúng ta có thể cấu hình hàm Lambda để xử lý sự kiện từ một bucket S3 theo các bước dưới đây:
- Tạo một hàm Lambda với quyền thích hợp để truy cập bucket S3.
- Trong bảng điều khiển S3, cấu hình thông báo sự kiện trên bucket nguồn.
- Chọn các loại sự kiện kích hoạt thông báo, như tạo hoặc xóa đối tượng.
- Chỉ định hàm Lambda làm đích nhận thông báo.
- Kiểm thử bằng cách thực hiện các thao tác trên bucket S3 khớp với loại sự kiện đã cấu hình.
- Xác minh hàm Lambda được gọi với sự kiện chứa chi tiết hành động trên S3.
3. Làm sao cấu hình một hàm Lambda để ghi dữ liệu vào bảng DynamoDB?
Chúng ta có thể cấu hình một hàm Lambda để ghi dữ liệu vào bảng DynamoDB qua sáu bước sau:
- Tạo bảng DynamoDB với khóa chính phù hợp và các chỉ mục phụ cần thiết.
- Tạo vai trò IAM cho hàm Lambda với quyền truy cập DynamoDB.
- Tạo hàm Lambda và gắn vai trò IAM.
- Dùng SDK DynamoDB để tạo một client với tên bảng.
- Dùng phương thức
put_itemđể ghi mục vào bảng, chỉ định thuộc tính khóa và các trường khác. - Kiểm thử hàm với sự kiện mẫu và dùng truy vấn DynamoDB để xác minh dữ liệu được ghi chính xác.
4. Làm sao triển khai một hàm Lambda theo lịch?
Chúng ta có thể triển khai một hàm Lambda theo lịch bằng các bước sau–chúng ta:
- Tạo một hàm Lambda để thực hiện tác vụ mong muốn theo lịch.
- Mở bảng điều khiển Amazon EventBridge và tạo quy tắc mới.
- Định nghĩa biểu thức lịch cho quy tắc bằng cú pháp rate hoặc cron.
- Chọn hàm Lambda làm đích cho quy tắc.
- Lưu quy tắc và kiểm thử bằng cách chờ sự kiện theo lịch tiếp theo.
- Xác minh lần thực thi của hàm trong số liệu và nhật ký CloudWatch.
5. Làm sao chuyển lưu lượng dần dần sang phiên bản mới của một hàm Lambda?
Để chuyển lưu lượng sang phiên bản mới của một hàm Lambda, chúng ta:
- Phát hành phiên bản mới của hàm Lambda với mã đã cập nhật.
- Tạo một alias trỏ tới phiên bản ổn định cũ hơn.
- Cập nhật alias để chia lưu lượng giữa phiên bản cũ và mới bằng trọng số (ví dụ, 90/10).
- Điều chỉnh dần trọng số để chuyển thêm lưu lượng sang phiên bản mới trong khi theo dõi số liệu.
- Khi đã hài lòng, cập nhật alias để gửi 100% lưu lượng tới phiên bản mới.
- Lặp lại quy trình cho lần cập nhật tiếp theo, coi phiên bản trước đó là phiên bản ổn định mới.
Kết luận
Những câu hỏi phỏng vấn AWS Lambda phổ biến này kiểm tra hiểu biết của ứng viên về các khái niệm cốt lõi của Lambda, các thực tiễn tốt và các mẫu sử dụng thực tế.
Điều quan trọng cần nhớ là kinh nghiệm thực hành xây dựng và vận hành ứng dụng Lambda là vô giá để khắc sâu các khái niệm này.
Để tìm hiểu thêm, hãy xem hai khóa học sau:
Nhà khoa học dữ liệu đa tài, yêu thích chia sẻ kiến thức và đóng góp cho cộng đồng, Zoumana là người sáng tạo nội dung trên YouTube và là cây bút công nghệ hàng đầu trên Medium. Anh yêu thích thuyết trình, lập trình và giảng dạy. Zoumana có hai bằng thạc sĩ: một về khoa học máy tính chuyên sâu Học máy tại Paris, Pháp, và một về Khoa học dữ liệu tại Texas Tech University, Hoa Kỳ. Anh bắt đầu sự nghiệp với vai trò Nhà phát triển phần mềm tại Groupe OPEN ở Pháp, sau đó chuyển sang IBM làm Tư vấn Học máy, nơi anh phát triển các giải pháp AI đầu-cuối cho các công ty bảo hiểm. Zoumana gia nhập Axionable, startup Trí tuệ nhân tạo Bền vững đầu tiên có trụ sở tại Paris và Montreal. Tại đây, anh làm Nhà khoa học dữ liệu và triển khai các sản phẩm AI, chủ yếu là các bài toán NLP, cho khách hàng tại Pháp, Montreal, Singapore và Thụy Sĩ. Ngoài ra, 5% thời gian của anh được dành cho Nghiên cứu và Phát triển. Hiện tại, anh làm việc với vai trò Nhà khoa học dữ liệu cao cấp tại IFC - Nhóm Ngân hàng Thế giới.
