deep-dive-on-aws-lambda-vti-cloud

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ý.

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.

deep-dive-on-aws-lambda-vti-cloud

Để 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.

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:

  • 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í 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.

aws lambda processing data

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.

Tham khảo: GitHub – aws-samples/lambda-refarch-streamprocessing: Serverless Reference Architecture for Real-time Stream Processing

real time processing data with aws lambda

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.

lambda pricing

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?

aws lambda features

Cách hoạt động của AWS Lambda được chia thành 02 công đoạn chính:

  1. Đầ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.
  2. 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

Ví dụ tạo một trò chơi đơn giản bằng cách sử dụng lambda function trong Node.js

  • Đ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.
aws lambda in management console
  • Cửa sổ Function sẽ được mở, chọn Create Function.
create function aws lambda
  • 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.
create function 1
  • 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).

region for aws lambda
  • Bạn cũng cần chọn một vai trò thực thi (execution role). Sau đó, bấm vào Create Function.
create role aws lambda
  • 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
advanced setting create function
  • 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ó.
successfully create function lambda

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.
upload from zip or s3
  • Ở đây đang là ví dụ code của trò chơi “Đổ xí ngầu” hay “Xúc xắc”.
function code windows
  • 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.
configure test event
  • Bấm Test để chạy thử code > Kết quả ra “5”.
test event
  • 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.
execution details
  • 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.
monitor aws lambda function
cloudwatch logs insight
  • 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.
cloudwatch logs insights aws lambda function

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.
aws lambda trigger api gateway
  • Tương tự như cách tạo function đã hướng dẫn ở trên, tại đây ta 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.
aws lambda trigger api gateway 1
aws lambda trigger api gateway 2
aws lambda trigger api gateway 2.1
  • Sau khi hoàn tất, nhấp chuột vào Add
aws lambda trigger api gateway 3

>> 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ọ!