AWS Lambda là gì và bằng cách nào có thể giúp lập trình viên xây dựng các ứng dụng một cách đơn giản và hiệu quả hơn? Trong bài viết này, hãy cùng ITviec đi sâu vào khái niệm AWS Lambda, đồng thời tìm hiểu cách dịch vụ này hoạt động từ A-Z nhé!
Đọc bài viết để hiểu rõ:
- Định nghĩa AWS Lambda là gì, cách thức hoạt động và các tính năng chính
- AWS Lambda thường được ứng dụng để làm gì?
- AWS Lambda hỗ trợ những ngôn ngữ lập trình gì và có thông số kỹ thuật cơ bản như thế nào? Phương pháp tạo hàm như thế nào?
- Những ưu điểm và hạn chế của AWS Lambda
AWS Lambda là gì?
AWS Lambda là một dịch vụ điện toán cho phép lập trình viên chạy mã code serverless.
AWS Lambda sẽ chạy đoạn mã code trên một cơ sở hạ tầng điện toán có sẵn, đồng thời thực hiện tất cả các công việc quản trị tài nguyên điện toán, bao gồm bảo trì máy chủ và hệ điều hành, cấp phát, tự động mở rộng dung lượng, và ghi nhật ký.
Với AWS Lambda, lập trình viên chỉ cần cung cấp mã code cần xử lý bằng một trong các ngôn ngữ được Lambda hỗ trợ. Dịch vụ này sẽ chỉ chạy hàm code khi cần thiết, và người dùng chỉ phải trả tiền cho thời gian điện toán sử dụng thực tế mà không mất thêm chi phí nào cho phần thời gian đoạn mã code không chạy.
AWS Lambda hoạt động như thế nào?
- Mỗi hàm code Lambda được xử lý và chạy trong một container riêng. Khi một hàm code được tạo, AWS Lambda sẽ đóng gói hàm vào một container mới, sau đó thực thi container đó trên một cluster đa người dùng của máy chủ do AWS quản lý.
- Trước khi các hàm code bắt đầu chạy, mỗi container của hàm được cấp bộ nhớ RAM và dung lượng CPU cần thiết. Khi các hàm đã được chạy xong, dung lượng RAM được cấp ban đầu sẽ được nhân với thời gian mà hàm đã chạy, từ đó tính ra chi phí người dùng cần trả dựa trên bộ nhớ được cấp và thời gian hoàn thành chạy của hàm code.
- Toàn bộ hạ tầng được quản lý bởi AWS, do vậy người dùng không có nhiều quyền kiểm soát hay tác động vào cách hệ thống hoạt động, nhưng đồng thời cũng không cần quan tâm tới việc cập nhật các máy chủ cơ bản, phòng tránh xung đột mạng,… vì các hoạt động này đều đã được AWS quản lý chặt chẽ. Do vậy, người dùng sẽ tiết kiệm được khoảng lớn thời gian dành cho các nhiệm vụ vận hành ứng dụng.
- Một trong những đặc điểm kiến trúc độc đáo của AWS Lambda là khả năng xử lý song song nhiều phiên bản của cùng một hàm code, hoặc của các hàm code khác nhau từ cùng một tài khoản AWS. Quá trình thực thi song song này cũng không khiến người dùng tốn thêm chi phí, mà chỉ cần trả phí cho phần điện toán mà các hàm code cần sử dụng.
Ví dụ về cách AWS Lambda xử lý một hàm code
Vì sao AWS Lambda giúp tiết kiệm chi phí khi sử dụng?
Các tính năng chính của AWS Lambda
Mở rộng các dịch vụ AWS khác với logic tùy chỉnh
AWS Lambda cho phép người dùng thêm logic tùy chỉnh vào các tài nguyên AWS như Amazon S3 buckets và bảng Amazon DynamoDB, giúp xử lý dữ liệu khi dịch chuyển dữ liệu lên nền tảng đám mây.
Tạo các dịch vụ backend tùy chỉnh
Lập trình viên có thể sử dụng AWS Lambda để tạo ra các dịch vụ ứng dụng backend mới, được kích hoạt theo yêu cầu bằng cách sử dụng giao diện lập trình ứng dụng (API) Lambda, hoặc qua các điểm cuối API tùy chỉnh được xây dựng bằng Amazon API Gateway.
Sử dụng mã code tùy biến
Người dùng không cần học thêm ngôn ngữ, công cụ, hay framework mới để sử dụng, mà hoàn toàn có thể sử dụng mã code từ bất kỳ thư viện bên ngoài nào, thậm chí từ cả các thư viện code native. Lập trình viên cũng có thể đóng gói bất kỳ đoạn mã nào (frameworks, SDKs, thư viện, vv.) thành một Lambda Layer để quản lý và chia sẻ dễ dàng trên nhiều hàm code.
Quản lý hoàn toàn tự động
AWS Lambda quản lý toàn bộ cơ sở hạ tầng dùng để chạy mã code trên một lớp hạ tầng có sẵn khả năng phòng chống tấn công an ninh, giúp người dùng tập trung vào việc xây dựng các dịch vụ backend khác biệt hiệu quả hơn.
AWS Lambda hỗ trợ tự động triển khai mã code, xử lý toàn bộ quá trình quản trị, bảo trì và cung cấp các bản vá bảo mật cùng chức năng đăng nhập và giám sát tích hợp thông qua Amazon CloudWatch.
Khả năng chịu lỗi tích hợp sẵn
AWS Lambda duy trì khả năng điện toán trên nhiều khu vực khả dụng (Availability Zones – AZs) trong mỗi vùng AWS để bảo vệ đoạn code trước các lỗi có thể xảy ra trên máy chủ cá nhân hoặc từ các sự cố tại trung tâm dữ liệu. AWS Lambda được thiết kế để cung cấp tính sẵn có cao cho các dịch vụ và sản phẩm được cung cấp.
Đóng gói và triển khai hàm dưới dạng image container
AWS Lambda hỗ trợ đóng gói và triển khai hàm dưới dạng image container, giúp người dùng dễ dàng xây dựng ứng dụng dựa trên Lambda bằng cách sử dụng các công cụ, quy trình làm việc và thành phần phụ thuộc quen thuộc với image container.
Ngoài ra, nhờ khâu vận hành đơn giản, AWS Lambda cũng đem lại nhiều tính năng có ích khác cho người dùng như: tự động mở rộng với thời gian khởi động chỉ trong vài mili giây, kết nối với cơ sở dữ liệu qua Amazon RDS Proxy, khả năng sẵn có cao cùng mô hình tài nguyên linh hoạt, và khả năng tích hợp native với hơn 200 dịch vụ AWS và ứng dụng dịch vụ (SaaS). Những tính năng trên của AWS Lambda sẽ giúp lập trình viên xây dựng các ứng dụng serverless mạnh mẽ và hiệu quả.
Top 5 ứng dụng phổ biến của AWS Lambda
1. Xử lý tệp
Lập trình viên có thể sử dụng Amazon S3 để kích hoạt xử lý dữ liệu AWS Lambda theo thời gian thực ngay sau khi tệp được tải lên.
2. Xử lý luồng dữ liệu (stream processing)
Người dùng có thể kết hợp AWS Lambda với Amazon Kinesis để xử lý dòng dữ liệu realtime trong quá trình theo dõi hoạt động ứng dụng, xử lý đơn hàng giao dịch, phân tích clickstream, làm sạch dữ liệu, lọc log, tạo chỉ mục, phân tích mạng xã hội, dữ liệu telemetrie thiết bị IoT và đo đạc.
3. Tạo ứng dụng web
Lập trình viên có thể sử dụng kết hợp AWS Lambda với các dịch vụ AWS khác để xây dựng loạt ứng dụng web mạnh mẽ với khả năng tự động mở rộng và thu hẹp quy mô khi không có nhu cầu, chạy trong cấu hình có sẵn với đa trung tâm dữ liệu của AWS.
4. Xây dựng backend IoT
Lập trình viên có thể xây dựng backend không máy chủ bằng AWS Lambda để xử lý yêu cầu web, di động, IoT và API từ bên thứ ba.
5. Xây dựng backend di động
Lập trình viên cũng có thể xây dựng backend bằng AWS Lambda và Amazon API Gateway để xác thực và xử lý yêu cầu API, đồng thời sử dụng AWS Amplify để dễ dàng tích hợp với các frontend iOS, Android, Web và React Native.
AWS Lambda hỗ trợ những ngôn ngữ lập trình nào?
- Node.js 8.10
- Node.js 10.x (thường là phiên bản LTS mới nhất từ loạt 10.x)
- Node.js 12.x (thường là phiên bản LTS mới nhất từ loạt 12.x)
- Python 2.7
- Python 3.6
- Python 3.7
- Python 3.8
- Ruby 2.5
- Java 8
- Java 11
- Go 1.x (phiên bản mới nhất)
- C# (.NET Core 1.0)
- C# (.NET Core 2.1)
- PowerShell Core 6.0
Tất cả các runtime này đều được AWS bảo trì và được cung cấp trong môi trường Amazon Linux hoặc Amazon Linux 2. Đối với mỗi ngôn ngữ được hỗ trợ, AWS cũng cung cấp một SDK giúp người dùng viết các hàm Lambda của mình và tích hợp hàm với các dịch vụ AWS khác.
Ngoài ra, một số runtime bổ sung đang được AWS xây dựng và hiện chưa được phát hành chính thức là:
- Rust 1.31
- C++
Những thông số kỹ thuật cơ bản trong AWS Lambda
- AWS Lambda hỗ trợ các runtime sau: Python 3.7, 3.6 và 2.7, Java 8, Go 1.x, .NET Core 1.0.1 và 2.1, Node.js v10.15 và v8.10, Ruby 2.5, và Rust.
- Container của hàm sử dụng Amazon Linux AMI 64-bit.
- Công suất CPU của container hàm được xác định dựa trên dung lượng bộ nhớ. Người dùng có thể tăng hoặc giảm tài nguyên CPU bằng cách thay đổi bộ nhớ. Một container có thể được mở rộng lên đến 10GB bộ nhớ và 6 vCPU.
- Một hàm Lambda có thể chạy trong tối đa 15 phút (đây là thời gian chờ của Lambda), đồng nghĩa rằng Lambda không phù hợp cho các quá trình chạy lâu dài.
- Thư mục /tmp hoạt động với vai trò như một ổ đĩa tạm thời và được dọn dẹp sau mỗi lần gọi.
- Gói hàm không nén được có giới hạn tối đa là 250MB. Gói hàm nén được có giới hạn tối đa là 50MB.
Ưu điểm của AWS Lambda
- Lợi ích về chi phí: Người dùng chỉ cần trả phí cho phần điện toán cần thiết để xử lý các đoạn hàm đã sử dụng, cộng với bất kỳ lưu lượng mạng nào được tạo ra. Đối với khối lượng công việc cần mở rộng đáng kể theo thời gian trong ngày, hình thức thanh toán này thường có hiệu quả về chi phí.
- Cơ sở hạ tầng được AWS quản lý hoàn toàn thay người dùng: Khi chạy các đoạn hàm trên cơ sở hạ tầng được AWS quản lý, người dùng không cần suy nghĩ đến việc duy trì máy chủ cơ bản mà có thể tập trung hơn vào việc xây dựng ứng dụng, đồng thời cũng tiết kiệm được đáng kể công sức dành cho các nhiệm vụ vận hành như nâng cấp hệ điều hành hoặc quản lý mạng.
- Tự động mở rộng: AWS Lambda sẽ tạo ra thêm các phiên bản của hàm theo nhu cầu người dùng mà không bị giới hạn cấp độ mở rộng.
- Tích hợp chặt chẽ với các sản phẩm AWS khác: AWS Lambda tích hợp liền mạch với các dịch vụ như DynamoDB, S3 và API Gateway, cho phép người dùng xây dựng ứng dụng hoàn chỉnh chức năng qua các hàm Lambda.
Hạn chế của AWS Lambda
- Thời gian khởi động có độ trễ lớn: Khi một hàm được khởi động để phản ứng với một event, người dùng có thể gặp độ trễ nhỏ tới khi hàm chạy. Nếu một hàm chưa được sử dụng trong vòng 15 phút vừa qua, độ trễ có thể kéo dài từ 5 đến 10 giây, khiến cho AWS không phù hợp để xây dựng những ứng dụng cần độ trễ thấp.
- Giới hạn của hàm: Các hàm Lambda có một số giới hạn như sau:
- Thời gian thực thi: Một hàm Lambda sẽ hết thời gian sau khi chạy trong vòng 15 phút và không có cách nào để thay đổi giới hạn này.
- Bộ nhớ có sẵn cho hàm: Các tùy chọn cho khối lượng RAM có sẵn cho các hàm Lambda dao động từ 128MB đến 3008MB.
- Kích thước gói mã: Gói mã Lambda nén không được vượt quá 50MB và phiên bản không nén không được lớn hơn 250MB.
- Giới hạn chạy đồng thời: Giới hạn thực thi đồng thời mặc định cho tất cả các hàm Lambda AWS trong một tài khoản AWS cá nhân là 1,000. (Người dùng có thể yêu cầu tăng thêm giới hạn này bằng cách liên hệ hỗ trợ AWS.)
- Kích thước dữ liệu: Khi sử dụng Amazon API Gateway để kích hoạt các hàm Lambda trong phản hồi cho các yêu cầu HTTP (khi người dùng xây dựng một ứng dụng web), kích thước tối đa của dữ liệu mà API Gateway có thể xử lý là 10MB.
- Giới hạn số lượng runtime được hỗ trợ: Mặc dù AWS Lambda cho phép thêm các runtime tùy chỉnh, việc tạo ra các runtime này có thể tốn khá nhiều công sức. Vì vậy, nếu phiên bản ngôn ngữ lập trình bạn đang sử dụng không được hỗ trợ trên Lambda, bạn nên chuyển sang sử dụng AWS EC2 hoặc cân nhắc một nhà cung cấp đám mây khác.
Hướng dẫn cách tạo hàm AWS Lambda
Lập trình viên có thể tạo hàm (function) AWS Lambda bằng AWS Console như sau:
- Trong bảng điều khiển AWS Console, chọn Lambda:
- Khi ở trong bảng điều khiển quản lý Lambda, hãy nhấp vào Tạo hàm (Create function):
- Thêm tên cho hàm mới tạo và chọn thời gian chạy mong muốn. Sau đó, nhấp vào Tạo hàm (Create function) để xác nhận cài đặt:
- Vậy là hàm đã được tạo và lập trình viên có thể tiếp tục làm việc với mã hàm cũng như triển khai hàm trực tiếp trong bảng điều khiển Lambda.
Các câu hỏi thường gặp về AWS Lambda
AWS Lambda có mã nguồn mở không?
Không, bản thân AWS Lambda là một hệ thống độc quyền chỉ có trong AWS.
AWS Lambda có miễn phí không?
Người dùng chỉ cần trả phí theo nhu cầu sử dụng, dựa trên số lượng yêu cầu cho các chức năng sử dụng và thời gian cần thiết để thực thi xử lý mã.
AWS Lambda tạo ra một lệnh yêu cầu mỗi khi bắt đầu khởi chạy để phản hồi lại một thông báo event hoặc lệnh gọi gián tiếp, bao gồm cả lệnh gọi thử nghiệm từ bảng điều khiển. Người dùng được tính phí trên tổng số lệnh yêu cầu từ tất cả các chức năng sử dụng.
Lập trình viên có nên học AWS Lambda không?
Lập trình viên nên có thêm hiểu biết về dịch vụ này để có thể cạnh tranh trong những vị trí công việc IT thu nhập cao như Data Engineer, Senior Data Engineer, Technical Architect, Software Engineer, Software Developer,…
AWS Lambda tách biệt code như thế nào?
Mỗi hàm AWS Lambda đều được chạy trong môi trường cô lập riêng biệt, có tài nguyên riêng. Lambda sử dụng các kỹ thuật tương tự như Amazon EC2 để cung cấp bảo mật và phân tách ở cấp độ cơ sở hạ tầng và thực thi.
AWS Lambda bảo mật mã code như thế nào?
Mã code Lambda được lưu trữ trong Amazon S3 và được mã hóa khi được lưu trữ. AWS Lambda cũng thực hiện các thao tác kiểm tra tính toàn vẹn bổ sung trong khi đoạn mã đang được sử dụng.
Tổng kết
Như vậy, về tổng quan, AWS Lambda là một giải pháp tuyệt vời để xây dựng và vận hành các ứng dụng serverless. Bằng cách sử dụng dịch vụ này, lập trình viên có thể tiết kiệm chi phí, công sức triển khai và tập trung hơn vào việc phát triển ứng dụng hiệu quả mà không cần lo ngại về những vấn đề liên quan tới hạ tầng.