Khóa học
AWS Lambda là một dịch vụ tính toán serverless mạnh mẽ cho phép bạn chạy mã mà không cần quản lý hạ tầng, nhờ đó bạn có thể tập trung hoàn toàn vào việc viết mã mà không phải lo cấp phát hay bảo trì máy chủ.
Trong hướng dẫn này, chúng ta sẽ khám phá AWS Lambda, từ việc thiết lập hàm đầu tiên đến tích hợp với các dịch vụ AWS khác. Dù bạn đang xử lý luồng dữ liệu hay xây dựng API, hướng dẫn này sẽ giúp bạn bắt đầu triển khai serverless với AWS Lambda.
AWS Lambda là gì?
AWS Lambda là một nền tảng điện toán serverless do Amazon Web Services (AWS) cung cấp, cho phép nhà phát triển chạy mã mà không cần cấp phát hay quản lý máy chủ. AWS Lambda thực hiện điều này bằng cách phân bổ tài nguyên động để chạy hàm của bạn chỉ khi cần, tính phí dựa trên mức sử dụng thay vì dung lượng máy chủ được cấp sẵn.
Cách tiếp cận này loại bỏ nhu cầu thiết lập hạ tầng truyền thống, giúp bạn chỉ cần tập trung vào việc viết và triển khai mã.
AWS Lambda vận hành theo mô hình dựa trên sự kiện, tức là được kích hoạt bởi các sự kiện cụ thể từ những dịch vụ AWS khác, khiến nó trở nên lý tưởng để xây dựng các giải pháp phản hồi nhanh, có khả năng mở rộng và tối ưu chi phí.
Các phương pháp triển khai truyền thống yêu cầu thiết lập và quản lý máy chủ, bao gồm mở rộng, cập nhật và vá lỗi. Những tác vụ này có thể tốn thời gian, chi phí và kém hiệu quả với khối lượng công việc không liên tục. Trái lại, triển khai serverless loại bỏ những chi phí quản trị này, cung cấp khả năng mở rộng tự động và tính sẵn sàng cao ngay từ đầu.
Tính năng của AWS Lambda
- Kiến trúc dựa trên sự kiện: Các hàm AWS Lambda được gọi để phản hồi các sự kiện như thay đổi dữ liệu, yêu cầu HTTP hoặc cập nhật tài nguyên AWS.
- Hỗ trợ nhiều runtime: Lambda hỗ trợ nhiều runtime, bao gồm Python, Node.js, Java, Go, Ruby và .NET. Nhà phát triển cũng có thể mang runtime riêng bằng AWS Lambda Runtime API, khiến nền tảng trở nên linh hoạt cho nhiều trường hợp sử dụng.
- Khả năng mở rộng tự động: AWS Lambda tự động mở rộng ứng dụng của bạn dựa trên nhu cầu. Dù xử lý một sự kiện hay hàng nghìn sự kiện cùng lúc, Lambda điều chỉnh tài nguyên tính toán một cách động.
- Giá trả theo mức dùng: Chi phí được xác định bởi số lượng yêu cầu và thời gian thực thi của hàm. Điều này loại bỏ nhu cầu đầu tư trước và đảm bảo bạn chỉ trả tiền cho những gì đã dùng.
- Bảo mật tích hợp: Lambda hoạt động với AWS Identity and Access Management (IAM), đảm bảo kiểm soát truy cập chi tiết và tương tác an toàn giữa các hàm của bạn và các dịch vụ AWS khác.
Các trường hợp sử dụng phổ biến của Lambda
- Xử lý luồng dữ liệu: AWS Lambda tích hợp với Amazon Kinesis để xử lý và phân tích dữ liệu streaming theo thời gian thực. Ví dụ, bạn có thể giám sát thiết bị IoT hoặc xử lý log động.
- Xây dựng RESTful API: Các hàm Lambda có thể kết hợp với AWS API Gateway để tạo API có khả năng mở rộng cho ứng dụng web và di động. Thiết lập này thường dùng để xử lý xác thực người dùng, truy vấn cơ sở dữ liệu hoặc tạo nội dung động.
- Tự động hóa quy trình: Tự động hóa quy trình phức tạp bằng cách kích hoạt các hàm Lambda dựa trên sự kiện từ các dịch vụ như S3, DynamoDB, hoặc CloudWatch. Ví dụ: bạn có thể thay đổi kích thước ảnh tải lên S3 hoặc lưu trữ các bản ghi cũ của cơ sở dữ liệu tự động.
- Xử lý sự kiện trong pipeline dữ liệu: Bạn có thể dùng Lambda để xử lý sự kiện dữ liệu thời gian thực, như xử lý tệp mới tải lên S3, biến đổi dữ liệu trước khi lưu trữ, hoặc làm giàu luồng dữ liệu bằng các cuộc gọi API bên ngoài.
- Xử lý backend không máy chủ: Lambda thường được dùng để giảm tải các tác vụ backend như xác thực dữ liệu, các quy trình ETL (Extract, Transform, Load), hoặc gửi thông báo qua Amazon SNS hoặc SES.
AWS Lambda hoạt động như thế nào?
AWS Lambda vận hành theo mô hình dựa trên sự kiện, nghĩa là thực thi mã để phản hồi các trình kích hoạt hoặc sự kiện cụ thể. Chìa khóa cho khả năng của Lambda là tích hợp với các dịch vụ AWS khác và khả năng thực thi hàm theo nhu cầu. Hãy cùng đi sâu vào cơ chế hoạt động của AWS Lambda theo từng bước:

Ví dụ sơ đồ kiến trúc sử dụng Lambda và các dịch vụ cốt lõi khác của AWS. Nguồn ảnh: AWS.
1. Kích hoạt các hàm AWS Lambda
Các hàm AWS Lambda được khởi chạy bởi các sự kiện từ nhiều dịch vụ AWS hoặc hệ thống bên ngoài. Một số nguồn sự kiện phổ biến gồm:
- API Gateway: Khi người dùng gửi yêu cầu HTTP (ví dụ: GET hoặc POST) tới endpoint API Gateway của bạn, Lambda có thể thực thi một hàm để xử lý yêu cầu — chẳng hạn, một endpoint RESTful để tạo người dùng trong cơ sở dữ liệu.
- Sự kiện S3: Các hàm Lambda có thể phản hồi hành động như tải lên, xóa hoặc sửa đổi đối tượng trong bucket S3. Ví dụ, chúng có thể thay đổi kích thước ảnh hoặc chuyển đổi định dạng tệp sau khi ảnh được tải lên S3.
- DynamoDB streams: Bất kỳ thay đổi nào đối với bảng DynamoDB, như chèn, cập nhật hoặc xóa, đều có thể kích hoạt một hàm Lambda. Ví dụ, kích hoạt pipeline phân tích khi có hàng mới được thêm vào bảng DynamoDB.
- Ứng dụng tùy chỉnh: Bạn có thể gọi trực tiếp các hàm Lambda bằng SDK, CLI, hoặc yêu cầu HTTP, cho phép tích hợp với hệ thống bên ngoài.
2. Môi trường thực thi
Khi một sự kiện kích hoạt hàm Lambda, AWS tự động tạo môi trường thực thi để chạy mã. Môi trường này bao gồm:
- Mã hàm của bạn: Phần mã bạn viết cho tác vụ cụ thể.
- Tài nguyên được cấp: CPU và bộ nhớ (cấu hình được) được gán động dựa trên nhu cầu của hàm.
- Phụ thuộc: Mọi thư viện hoặc gói bên ngoài được chỉ định trong quá trình triển khai đều được bao gồm.
3. Đồng thời và mở rộng
AWS Lambda hỗ trợ mở rộng tự động bằng cách chạy song song nhiều phiên bản hàm của bạn. Nó quản lý mở rộng một cách trong suốt mà không cần cấu hình. Cách hoạt động của đồng thời như sau:
- Nếu hàm của bạn cần xử lý 100 sự kiện đồng thời, Lambda sẽ tạo ra số môi trường thực thi cần thiết (tới giới hạn đồng thời).
4. Tích hợp với các dịch vụ AWS khác
AWS Lambda tích hợp sâu với các dịch vụ AWS để xây dựng giải pháp đầu-cuối vững chắc:
- Tương tác cơ sở dữ liệu: Lambda có thể đọc/ghi dữ liệu tới DynamoDB hoặc RDS trong quá trình thực thi.
- Dịch vụ nhắn tin: Lambda có thể kích hoạt thông báo qua SNS hoặc gửi thông điệp tới hàng đợi SQS cho xử lý tiếp theo.
- Giám sát và ghi log: CloudWatch thu thập toàn bộ log, số liệu và chi tiết lỗi cho các hàm Lambda, cho phép bạn giám sát và khắc phục sự cố hiệu năng.
Giờ hãy bắt đầu thiết lập hàm Lambda đầu tiên của bạn!
Thiết lập AWS Lambda
Yêu cầu tiên quyết
- Tài khoản AWS: Đảm bảo bạn có tài khoản AWS đang hoạt động. Đăng ký tại đây.
- Thiết lập người dùng IAM: Tạo người dùng IAM với quyền cho AWS Lambda. Làm theo hướng dẫn IAM.
Thiết lập môi trường phát triển
- Cài đặt AWS CLI: Tải xuống và cài đặt AWS CLI. Cấu hình bằng thông tin xác thực IAM của bạn.
- Thiết lập Python hoặc Node.js: Cài đặt Python hoặc Node.js dựa trên runtime bạn ưa dùng. AWS Lambda hỗ trợ nhiều runtime. Trong hướng dẫn này, chúng ta sẽ dùng Python runtime.
Bước 1: Truy cập bảng điều khiển AWS Lambda
- Đăng nhập vào AWS Management Console.
- Đi đến dịch vụ Lambda.

Bảng điều hướng trong AWS console.
Nhấp vào Lambda trong menu điều hướng để xem bảng điều khiển:

Bảng điều khiển AWS Lambda trong AWS Console.
Bước 2: Tạo một hàm mới
- Nhấp Create Function.
- Chọn “Author from Scratch.”
- Đặt tên cho hàm của bạn.
- Chọn runtime (ví dụ: Python 3.11).
- Nhấp vào nút Create Function.

Tạo một hàm AWS Lambda mới.
Sẽ mất vài giây. Khi hàm được tạo, bạn sẽ thấy thông báo thành công ở phía trên.
Bước 3: Viết mã cho hàm của bạn

Trình duyệt IDE của AWS Lambda để chỉnh sửa mã đơn giản.
Bước 4: Kiểm thử hàm Lambda của bạn
Ở thời điểm này, hàm chỉ trả về chuỗi “Hello from Lambda!”.
Chưa có logic, không có phụ thuộc, không gì cả.
Chúng ta có một script Python tên là lambda_function.py chứa hàm lambda_handler() trả về một chuỗi.
Giờ bạn có thể kiểm thử bằng cách nhấp nút Test.

Kiểm thử hàm AWS Lambda trong trình duyệt.
Bạn có thể xóa “Event JSON” vì hàm của chúng ta không nhận đầu vào. Đặt tên sự kiện và nhấp nút Invoke.

Kiểm thử thành công hàm AWS Lambda.
Hàm đã thực thi thành công và trả về thông điệp.
Tuyệt vời! Chúng ta vừa triển khai một hàm serverless bằng AWS Lambda. Hiện tại nó chưa làm được nhiều, nhưng đã hoạt động. Mỗi lần hàm được gọi, nó sẽ trả về một chuỗi đơn giản.
Kích hoạt Lambda bằng Sự kiện
Như đã đề cập, kiến trúc AWS Lambda cho phép bạn kích hoạt các hàm để phản hồi những sự kiện cụ thể từ nhiều dịch vụ AWS, khiến nó trở thành công cụ linh hoạt để tự động hóa quy trình và tích hợp hệ thống.
Các sự kiện như tải tệp lên bucket S3, cập nhật trong bảng DynamoDB, hoặc lời gọi API qua API Gateway có thể gọi các hàm Lambda, cho phép xử lý theo thời gian thực và thực thi có khả năng mở rộng.
1. Thiết lập trigger S3
- Đi tới bảng điều khiển S3.
- Chọn bucket S3.
- Trong phần Properties, thêm thông báo sự kiện để kích hoạt hàm Lambda của bạn khi tạo đối tượng.
Tạo thông báo sự kiện trong bucket AWS S3.
Chọn hàm Lambda để kích hoạt trong S3.
Ví dụ trường hợp sử dụng:
-
- Tự động thay đổi kích thước ảnh tải lên S3.
- Chuyển đổi video sang nhiều độ phân giải hoặc định dạng để streaming.
- Kiểm tra định dạng tệp, kích thước hoặc metadata khi tải lên.
- Sử dụng AI để trích xuất văn bản từ tài liệu tải lên (ví dụ: qua Amazon Textract).
2. Tích hợp API Gateway
- Đi tới dịch vụ API Gateway.

Bảng điều khiển dịch vụ API Gateway trong AWS Console.
- Tạo một REST API mới.

Tạo REST API mới qua API Gateway.
- Cấu hình một method (ví dụ: POST) để kích hoạt hàm Lambda của bạn.
Ví dụ trường hợp sử dụng:
-
- Xây dựng API serverless cho phản hồi theo thời gian thực.
- Kích hoạt hàm Lambda để tạo và lưu dữ liệu người dùng vào cơ sở dữ liệu.
- Xử lý các yêu cầu POST để xử lý và xác thực đơn hàng theo thời gian thực
- Kích hoạt hàm Lambda để truy vấn và trả về dữ liệu từ cơ sở dữ liệu hoặc API.
Triển khai và Giám sát AWS Lambda
Triển khai các hàm AWS Lambda khá đơn giản và có thể thực hiện bằng nhiều phương thức tùy theo nhu cầu, như AWS Management Console cho triển khai thủ công hoặc AWS CLI cho triển khai tự động.
1. Triển khai thủ công bằng AWS Console
AWS Management Console cung cấp giao diện web trực quan để triển khai các hàm Lambda. Phương pháp này lý tưởng cho các dự án nhỏ hoặc thay đổi nhanh. Đây là cách triển khai hàm Lambda bằng console:
- Tạo hoặc chỉnh sửa hàm:
- Đăng nhập vào AWS Management Console.
- Đi tới AWS Lambda.
- Nhấp Create Function để tạo hàm mới hoặc chọn một hàm hiện có để cập nhật.
- Tải mã của bạn lên:
- Chọn Upload from và chọn tệp .zip hoặc container image.
- Bạn có thể chỉnh sửa trực tiếp mã hàm trong trình soạn thảo tích hợp cho các thay đổi nhỏ.
- Cấu hình hàm:
- Đặt biến môi trường, phân bổ bộ nhớ và giới hạn timeout theo trường hợp sử dụng.
- Thêm quyền cần thiết bằng các vai trò AWS IAM để cho phép hàm tương tác với dịch vụ AWS khác.
- Triển khai thay đổi:
- Nhấp Deploy để lưu và kích hoạt thay đổi.
- Dùng tính năng Test để gọi hàm thủ công và xác nhận hoạt động như mong đợi.
2. Triển khai tự động bằng AWS CLI
AWS CLI là cách hiệu quả để triển khai và cập nhật các hàm Lambda cho tự động hóa hoặc cập nhật thường xuyên. Nó đảm bảo tính nhất quán và giảm lỗi thủ công, đặc biệt trong các dự án lớn hoặc pipeline CI/CD.
Bước 1 - Chuẩn bị gói triển khai
Đóng gói mã và phụ thuộc vào một tệp .zip. Ví dụ:
zip -r my-deployment-package.zip .
Bước 2 - Triển khai hàm bằng CLI
Sử dụng lệnh update-function-code để tải mã mới lên AWS Lambda:
aws lambda update-function-code \
--function-name MyFunction \
--zip-file fileb://my-deployment-package.zip
Bước 3 - Kiểm tra triển khai
Sau khi triển khai, xác minh trạng thái của hàm bằng:
aws lambda get-function --function-name MyFunction
Lệnh này truy xuất cấu hình của hàm và xác nhận việc triển khai.
Giám sát Lambda với CloudWatch
Giám sát rất quan trọng để đảm bảo các hàm Lambda của bạn chạy hiệu quả, xử lý lỗi khéo léo và đáp ứng kỳ vọng về hiệu năng. AWS Lambda tích hợp với Amazon CloudWatch để cung cấp khả năng giám sát và ghi log.
Amazon CloudWatch tự động thu thập và hiển thị các số liệu chính cho hàm Lambda của bạn. Những số liệu này giúp bạn phân tích hiệu năng và xử lý sự cố.
Các số liệu cần theo dõi:
- Invocations: Theo dõi số lần hàm của bạn được gọi. Giúp bạn hiểu mô hình lưu lượng và xu hướng sử dụng.
- Errors: Hiển thị số lỗi trong quá trình thực thi hàm. Dùng để xác định tỷ lệ lỗi và gỡ lỗi.
- Duration: Đo thời gian thực thi hàm. Đây là yếu tố quan trọng để tối ưu hiệu năng và quản lý chi phí.
- Throttles: Hiển thị số lần gọi bị giới hạn do chạm ngưỡng đồng thời.
Truy cập số liệu:
- Đi đến CloudWatch Metrics Console.
- Chọn Lambda từ danh sách namespace.
- Chọn hàm bạn muốn theo dõi để xem số liệu chi tiết.
Các thực hành tốt nhất cho AWS Lambda
Giờ bạn đã triển khai hàm Lambda đầu tiên, việc nắm một số thực hành tốt cho các dự án phức tạp hơn trong tương lai là hữu ích. Phần này cung cấp một số khuyến nghị cần ghi nhớ.
1. Tối ưu hóa cold start của hàm
Cold start xảy ra khi một hàm Lambda được gọi sau thời gian không hoạt động, dẫn đến độ trễ nhỏ do AWS cấp môi trường thực thi. Dù AWS giảm thiểu chi phí này, bạn vẫn có thể thực hiện các bước để rút ngắn thời gian cold start:
Sử dụng gói triển khai nhỏ hơn
- Giữ gói triển khai nhẹ bằng cách chỉ bao gồm các phụ thuộc cần thiết.
- Dùng các công cụ như AWS Lambda Layers để chia sẻ thư viện chung (ví dụ: AWS SDK) giữa các hàm mà không cần đưa vào từng gói riêng lẻ.
- Nén và rút gọn mã khi có thể, đặc biệt với các hàm dựa trên JavaScript hoặc Python.
Tránh khởi tạo nặng trong hàm của bạn
Di chuyển các khởi tạo tốn tài nguyên (ví dụ: kết nối cơ sở dữ liệu, client API, hoặc thư viện bên thứ ba) ra ngoài handler của hàm. Điều này đảm bảo mã chỉ chạy một lần cho mỗi môi trường và được tái sử dụng giữa các lần gọi.
Tận dụng provisioned concurrency
Với các hàm quan trọng, nhạy cảm độ trễ, hãy dùng Provisioned Concurrency để giữ môi trường thực thi sẵn sàng phục vụ yêu cầu. Dù phát sinh thêm chi phí, nó đảm bảo độ trễ thấp cho khối lượng công việc ưu tiên cao.
2. Giữ hàm không trạng thái
Không trạng thái là nguyên tắc nền tảng của kiến trúc serverless, giúp ứng dụng của bạn mở rộng liền mạch:
Tránh phụ thuộc vào dữ liệu trong bộ nhớ
Các hàm Lambda là tạm thời, nghĩa là môi trường thực thi của chúng không đảm bảo được duy trì giữa các lần gọi. Thay vì dựa vào biến trong bộ nhớ, hãy lưu trạng thái ở các hệ thống bên ngoài như DynamoDB, S3 hoặc Redis.
Kích hoạt tính idempotent
Thiết kế hàm của bạn để xử lý các sự kiện trùng lặp một cách an toàn. Dùng định danh duy nhất cho yêu cầu và kiểm tra log hoặc cơ sở dữ liệu để đảm bảo cùng một sự kiện không bị xử lý nhiều lần.
3. Sử dụng biến môi trường
Biến môi trường là cách an toàn và thuận tiện để cấu hình các hàm Lambda của bạn:
Lưu trữ thông tin nhạy cảm
- Lưu API key, chuỗi kết nối cơ sở dữ liệu và các bí mật khác dưới dạng biến môi trường. AWS Lambda mã hóa các biến này khi lưu trữ và giải mã khi thực thi.
- Để tăng cường bảo mật, dùng AWS Secrets Manager hoặc Systems Manager Parameter Store để quản lý bí mật động.
Đơn giản hóa quản lý cấu hình
Dùng biến môi trường để quản lý cấu hình như mức log, thiết lập vùng, hoặc URL dịch vụ bên thứ ba. Điều này loại bỏ nhu cầu hardcode giá trị, giúp hàm của bạn dễ dàng di chuyển giữa các môi trường (ví dụ: dev, staging, prod).
Kết luận
Hướng dẫn này đã cung cấp lộ trình bắt đầu với AWS Lambda, từ hiểu tính năng và trường hợp sử dụng đến triển khai và giám sát hàm hiệu quả. Bằng cách tuân thủ các thực hành tốt như tối ưu cold start, giữ hàm không trạng thái và sử dụng biến môi trường, bạn có thể tạo ra các ứng dụng serverless vững chắc và dễ bảo trì.
AWS Lambda là một cách để xây dựng kiến trúc hiện đại, dựa trên sự kiện và tích hợp với hệ sinh thái AWS. Nếu bạn muốn tìm hiểu thêm, tôi khuyên bạn xem các khóa học AWS của DataCamp.
