Chúng ta đã nghe khá nhiều tới thuật ngữ “serverless”, cách hoạt động của chúng và lợi ích mang lại cho ứng dụng của bạn. Một dịch vụ serverless nói chung sẽ không yêu cầu bất kỳ sự cung cấp nào của máy chủ để chạy ứng dụng. Khi bạn chạy một ứng dụng trên serverless, người dùng sẽ không phải lo lắng về việc thiết lập hệ điều hành, vá lỗi hoặc mở rộng các máy chủ mà bạn sẽ phải xem xét khi chạy ứng dụng của mình trên một máy chủ vật lý.
Dạo gần đây, khi nhắc tới serverless là nhắc tới dịch vụ AWS Lambda. Đây là dịch vụ provision-free serverless compute offering dựa trên functions của Amazon Web Services. Trong bài viết này, VTI Cloud sẽ giới thiệu về AWS Lambda, bao gồm cách nó liên kết với kiến trúc không máy chủ, cách tạo nó và khi nào sử dụng nó.
AWS Lambda là gì?
AWS Lambda là dịch vụ tính toán serverless (serverless compute) của Amazon Web Services (AWS). AWS Lambda hoạt động dựa theo FaaS (Function-as-a-service) model. Với dịch vụ AWS Lambda, người dùng, đặc biệt là developer, sẽ không phải lo lắng về việc quản lý và cung cấp cơ sở hạ tầng (zero administration) mà chỉ cần tập trung vào việc xây dựng các ứng dụng!
Chỉ việc tải code lên AWS Lambda, dịch vụ này sẽ run code, scale về hạ tầng để luôn đảm bảo về hiệu suất cũng như tính sẵn sàng của ứng dụng.
Code chạy trên AWS Lambda được gọi là lambda function. Hiện tại, lambda function hỗ trợ các ngôn ngữ lập trình sau:
- Java
- Python
- C#
- Node.js
- Go
- PowerShell
- Ruby
Function cũng cung cấp runtime API, có thể sử dụng để chạy các function được viết bởi các ngôn ngữ lập trình native khác.
Để làm việc với AWS Lambda, chỉ có một điều kiện tiên quyết; bạn phải có tài khoản trên AWS từ đó bạn có thể truy cập bảng điều khiển quản lý AWS.
Cùng tham khảo hướng dẫn tạo tài khoản và sử dụng AWS Free Tier để trải nghiệm dịch vụ AWS Lambda tại đây: https://vticloud.io/trai-nghiem-dien-toan-dam-may-voi-tai-khoan-aws-free-tier/
Tính năng của AWS Lambda
Dưới đây là một số tính năng quan trọng của AWS Lambda mà VTI Cloud tóm tắt:
-
AWS Lambda dễ dàng scale cơ sở hạ tầng mà không cần bất kỳ cấu hình bổ sung nào. Dịch vụ này giúp các developer giảm công việc vận hành liên quan tới hạ tầng hệ thống.
-
Dịch vụ cung cấp nhiều tùy chọn như dịch vụ Amazon S3, Amazon CloudWatch, Amazon DynamoDB, Amazon API Gateway, Amazon Kinesis, Amazon CodeCommit và nhiều tùy chọn khác để trigger event.
-
Không yêu cầu chi phí trả trước (upfront). Bạn chỉ trả tiền cho bộ nhớ được sử dụng bởi lambda function và chi phí tối thiểu cho số lượng request do đó AWS Lambda khá tiết kiệm chi phí cho người dùng.
-
AWS Lambda sử dụng AWS IAM để xác định tất cả các vai trò và chính sách bảo mật do đảm bảo tính bảo mật cho ứng dụng của người dùng.
-
AWS Lambda cũng cung cấp khả năng chịu lỗi (fault tolerance) cho các services run code và function. Người dùng sẽ không cần lo về downtime của ứng dụng.
Một số use case thường gặp của AWS Lambda
Dưới đây là một số use case mà dịch vụ AWS Lambda đã giúp người sử dụng giải quyết triệt để các vấn đề thường gặp:
1. HTTP API
Bằng việc sử dụng AWS Lambda, bạn có thể tích hợp hoặc triển khai backend logic lên đám mây và invoke các function khi cẩn thiết chỉ bằng việc gọi HTTP.
Khi tích hợp Amazon API Gateway với AWS Lambda, không những giảm thiểu được chi phí (VTI Cloud sẽ nói kỹ hơn trong phần tiếp theo) mà người dùng còn giảm thiểu được công sức vận hành các server cũng như mở rộng các dịch vụ.
2. Xử lý dữ liệu
Ví dụ ứng dụng xử lý nhiều dữ liệu được lưu trữ trong Amazon DynamoDB, bạn có thể trigger Lambda function bất cứ khi nào bạn viết, cập nhật hoặc xóa các mục trong bảng đó.
Những sự kiện này trigger các lambda function sẽ xử lý, phân tích và có thể đẩy dữ liệu này sang các dịch vụ AWS khác như Amazon S3 để lưu trữ kết quả…
Nói cách khác – người dùng có thể tạo toàn bộ quy trình xử lý dữ liệu bằng cách kết hợp các tài nguyên AWS khác nhau với dịch vụ AWS Lambda.
3. Xử lý tệp tin thời gian thực
Thông thường các ứng dụng CMS về quản lý content luôn có chức năng upload hình ảnh. Hình ảnh này sẽ được lưu trên Amazon S3 bucket. Lúc này, AWS Lambda có thể được dùng để tạo một task tự động.
Ví dụ sau khi upload hình lên sẽ trigger tạo ra một version khác của hình với độ phân giải thấp hơn (thumbnails) và được tại một bucket khác.
AWS Lambda sẽ giúp ứng dụng tự động trong việc gọi logic theo yêu cầu và chỉ khi thực sự cần thiết. Tham khảo: GitHub – aws-samples/lambda-refarch-fileprocessing: Serverless Reference Architecture for Real-time File Processing
4. Xử lý luồng thời gian thực
Với những ứng dụng có traffic “khủng”, hệ thống thường sử dụng dịch vụ AWS Lambda và Amazon Kinesis Stream để xử lý các dữ liệu streaming real-time để ứng dụng tracking các hoạt động (application activity tracking), hay các nghiên cứu real-time các dữ liệu khác nhau từ các metrics collect từ nhiều data source như Website clickstream, Payment transactions, Social media timeline, IT logs hay Location based tracking.
Chi phí khi sử dụng dịch vụ AWS Lambda
Với AWS Lambda, bạn chỉ phải trả tiền cho những gì bạn sử dụng. Bạn bị tính phí dựa trên số lượng request cho các function và duration, thời gian thực thi code.
Duration được tính từ khi code được thực thi tới khi thực thi xong hoặc terminate, được làm tròn tới 1ms gần nhất. Chi phí sẽ dựa vào dung lượng bố nhớ phân bổ cho function.
AWS Lambda free usage tier bao gồm 1M requests miễn phí và 400,000 GB-giây thời gian tính toán mỗi tháng. Dưới đây là bảng giá cho region Asia Pacific (Singapore) của dịch vụ này.
Bạn có thể xem thêm về cách tính giá của AWS Lambda tại đây: https://aws.amazon.com/lambda/pricing
Cách hoạt động của AWS Lambda?
Để tóm tắt cách hoạt động của AWS Lambda, VTI Cloud tổng hợp thành 02 công đoạn chính:
-
Đầu tiên, bạn tạo một function và thêm thông tin cơ bản vào dịch vụ, chẳng hạn như ngôn ngữ lập trình được sử dụng trong function.
-
Sau đó, bạn viết code của mình trên trình soạn thảo lambda hoặc upload source code trong một tệp zip. Khi code lambda được tải lên, dịch vụ sẽ xử lý tất cả việc mở rộng dung lượng, vá lỗi và quản trị cơ sở hạ tầng.
Cùng tìm hiểu sâu hơn nào…
Bước 1: Cách tạo một AWS Lambda Function
VTI Cloud sẽ ví dụ tạo một trò chơi đơn giản bằng cách sử dụng lambda function trong Node.js cho bài viết này.
-
Đi tới bảng AWS Management Console, và trong thanh tìm kiếm, gõ Lambda, nhấp vào dịch vụ Lambda.
- Cửa sổ Function sẽ được mở, chọn Create Function.
- Bạn sẽ nhận được các tùy chọn khác nhau để tạo một function với phần giải thích của chúng. Vì tôi đang tạo nó từ đầu, tôi sẽ chọn Author from Scratch.
-
Sau đó, bạn cần điền một số thông tin cần thiết cho lambda function này. Nhập tên chức năng và chọn phiên bản Node.js mà bạn muốn sử dụng cho chức năng này.
Có 04 phương pháp khi tạo function:
-
Author from scratch – Bắt đầu từ một câu lệnh đơn giản như
print('Hello, world!').
-
Use a blueprint – Cho phép bạn xây dựng một lambda function bằng cách sử dụng “blueprint”. Blueprint trong ngữ cảnh này có nghĩa là một đoạn mã đã được viết sẵn (chỉ dành cho NodeJs và Python) cho các trường hợp sử dụng phổ biến, chẳng hạn như ghi log các bản cập nhật được thực hiện cho bảng DynamoDB hoặc kích hoạt một chức năng khi một thứ gì đó được upload lên S3 bucket.
-
Container image – Sử dụng container image có sẵn để deploy function, sử dụng phương thức này để tận dụng các container image từ dự án trước để tiết kiệm thời gian tạo mới.
-
Browse serverless app repository – Cho phép bạn triển khai toàn bộ ứng dụng mẫu từ AWS Serverless Application Repository. Các package này có thể được cung cấp bởi AWS hoặc bởi cộng đồng.
Lưu ý: AWS Lambda không phải là một dịch vụ global!
Điều này có nghĩa là bạn phải thay đổi region về nơi bạn muốn triển khai Lambda function (tùy theo yêu cầu dự án).
- Bạn cũng cần chọn một vai trò thực thi (execution role). VTI Cloud sẽ chọn chọn tạo tùy chọn role mới (bài viết tạo role để người mới nắm được). Sau đó, bấm vào Create Function.
- Lưu ý là tùy theo nhu cầu tạo function trong VPC vụ thể mà có thể tùy chỉnh trong phần Advanced Settings
-
Bạn sẽ nhận được thông báo thành công rằng chú thích đã được tạo. Nhấp vào cửa sổ Designer để thu nhỏ nó.
Bước 2: Upload code lên AWS Lambda Function
-
Bên dưới là cửa sổ Function code. Tại đây sẽ là nơi bạn upload code của mình, có thể code thẳng vô cửa sổ này (gọi là AWS internal code editor), hoặc upload dạng file zip.
- Ở đây VTI Cloud đang ví dụ code của trò chơi “Đổ xí ngầu” hay “Xúc xắc”.
-
Bây giờ hãy nhấp vào nút Test ở góc trên cùng bên phải. Bạn sẽ nhận được một cửa sổ bật lên để cấu hình test event, nhập tên event và nhấp vào Create.
- Bấm Test để chạy thử code > Kết quả ra “5”.
- Kéo lên phía trên sẽ có thông tin cụ thể về execution test này. Các thông tin chi tiết như request-id, duration, billed duration, resources configured… với log output có sẵn.
-
Trong tab Monitoring sẽ track lại được log và các thông số tài nguyên của dịch vụ AWS Lambda đã sử dụng, có thêm cả Logs Insights tạo ra bởi dịch vụ Amazon CloudWatch.
Bạn có thể xem lại bài viết cơ bản về dịch vụ Amazon CloudWatch tại đây: Định nghĩa cơ bản về Amazon CloudWatch | VTI CLOUD
-
Nếu bạn vào bên trong log do CloudWatch tạo, bạn có thể xem chi tiết những gì đã xảy ra khi chạy lambda function, được CloudWatch theo dõi.
Cách cấu hình AWS Lambda với dịch vụ khác của AWS
Để chạy code trong AWS Lambda, bạn cần kích hoạt lambda function với một dịch vụ AWS bên ngoài, dịch vụ này có thể gọi lambda function. Ví dụ, dịch vụ có thể là một S3 bucket.
-
Trong vòng vài mili-giây, lambda sẽ sẵn sàng tự động kích hoạt chức năng của bạn khi một sự kiện xảy ra. AWS Lambda chạy code của bạn khi sự kiện kích hoạt được gọi. dịch vụ cung cấp quản lý và giám sát các máy chủ cho bạn.
-
Nếu function của bạn yêu cầu nhiều sức mạnh xử lý, dịch vụ sẽ chọn loại phiên bản có nhiều sức mạnh xử lý hơn và RAM, hoặc nếu code lambda của bạn chỉ thực thi trong hai giây, dịch vụ sẽ chọn phiên bản thấp nhất có thể, giúp tiết kiệm tiền và thời gian của bạn.
Ở bài viết này, VTI Cloud sẽ hướng dẫn cách thêm API Gateway trigger với Lambda function.
-
Tương tự như cách tạo function đã hướng dẫn ở trên, tại đây VTI Cloud tạo một function có tên
trigger-with-api-gateway
để demo. -
Nhấp chuột vào
Add trigger
chọn API Gateway và tạo mới API.
-
Bạn có thể lựa chọn giữa HTTP API và REST API. Sau đó điền thông tin theo mặc định. Trong phần additional settings có thể chọn thêm các tùy chọn bổ sung.
-
Enable CORS in HTTP API: Configuring CORS for an HTTP API – Amazon API Gateway
-
Enable CORS in REST API: Enabling CORS for a REST API resource – Amazon API Gateway
-
- Sau khi hoàn tất, nhấp chuột vào Add
>> API Endpoint sẽ có giá trị theo form sau: https://RANDOM_STUFF.execute-api.REGION-NAME.amazonaws.com/default/MY_FUNCTION_NAME
Vậy là xong! Thật đơn giản phải không?
Kết luận
Với một developer, việc tiết kiệm thời gian để quản trị và vận hành hệ thống cơ sở hạ tầng đảm bảo cho ứng dụng của bạn có thể scale, sẵn sàng cao quả thật rất quý báu. Dịch vụ serverless AWS Lambda giúp cho các developer chỉ cần tập trung phát triển ứng dụng mà không cần phải quan tâm tới hạ tầng chạy code của họ!
Về VTI Cloud
VTI Cloud là Đối tác cấp cao (Advanced Consulting Partner) của AWS, với đội ngũ hơn 50+ kỹ sư về giải pháp được chứng nhận bởi AWS. Với mong muốn hỗ trợ khách hàng trong hành trình chuyển đổi số và dịch chuyển lên đám mây AWS, VTI Cloud tự hào là đơn vị tiên phong trong việc tư vấn giải pháp, phát triển phần mềm và triển khai hạ tầng AWS cho khách hàng tại Việt Nam và Nhật Bản.
Xây dựng các kiến trúc an toàn, hiệu suất cao, linh hoạt, và tối ưu chi phí cho khách hàng là nhiệm vụ hàng đầu của VTI Cloud trong sứ mệnh công nghệ hóa doanh nghiệp.