Giới thiệu AWS Lambda trong học thi chứng chỉ AWS? Dịch vụ tinh tú nhất trong hệ sinh thái AWS

AWS Lambda là một dịch vụ thuộc dạng con cưng của AWS, được AWS promote rất nhiều trong các bài thi chứng chỉ AWS. Ko phải tự nhiên AWS promote Lambda trong nhiều ngữ cảnh xây dựng phần mềm . Ở bài này chúng ta hãy cùng tìm hiểu AWS Lambda là gì ? Sự lợi hại của AWS Lambda trong các bài toán tích hợp và xây dựng server-less application.

Đây có lẽ là dịch vụ khiến iGà thấy yêu thích nhất, phải dùng từ amazing cho nó và khi refactor hay rearchitect một ứng dụng nào đây là dịch vụ mà iGà nghĩ tới đầu tiên. Có rất nhiều trò hay ho các bạn có thể làm được với Lambda.

AWS Lambda là gì?

AWS Lambda là dịch vụ cho phép bạn xây dựng các ứng dụng phi máy chủ (server-less application), bạn sẽ ko phải hao tổn chi phí và thời gian để quản trị các hạ tầng máy chủ.

Quay về quá khứ, các bạn muốn lập trình phải đặt source code mình lên một hạ tầng máy chủ nào đó để code đó kết nối đến database rồi hiển thị thông tin trên trình duyệt / giao diện nào đó. Cách này khá đau khổ khi bạn phải vừa lo về coding, vừa phải lo triển khai môi trường gồm hệ điều hành OS, cài đặt các thư viện bổ trợ, hay vận hành các biến môi trường. Thỉnh thoảng code chạy, thỉnh thoảng code ko chạy, do sự bất ổn của máy chủ bạn sử dụng.

Ở thế giới server-less, bạn không cần máy chủ, bạn cứ viết code bằng ngôn ngữ thân thuộc với bạn. Bạn có thể viết bằng Python, Go, Java, NodeJS hay thậm chí C# mà không cần phải lo về vấn đề môi trường chạy code đó là gì. Bạn cũng ko phải trả tiền với các code không chạy, bạn chỉ phải trả tiền dựa trên thời gian xử lý khi code của bạn được chạy (trigger) – Pay for compute time that you consume.

Với AWS Lambda, bạn ko tốn kém cho việc quản trị (zero administration), ban ko phải ác mộng vì sợ hãi nâng cấp các bản patch, vá các lỗ hổng của hệ điều hành hay thư viện sử dụng. Tất cả thời gian của bạn giờ đây là tập trung vào lập trình và sáng tạo innovation.

Một lợi ích khác khi sử dụng AWS Lambda đó là ngoài việc bạn chỉ cần upload source code của bạn lên lambda để chạy thì bạn cũng ko cần phải lo lắng về vấn đề HA (High Availability).

Đối với iGà, Lambda như một cánh tay rôbot giúp iGà có thể kết nối bất cứ dịch vụ nào và được trigger (gọi hàm) tự động từ các dịch vụ khác của AWS. Xây dựng sản phẩm trên AWS mà ko biết sử dụng Lambda là một điều rất thiếu xót.

Những hàm và code được viết trong Lambda cũng có thể được trigger gọi từ những ứng dụng bên ngoài ví dụ một website, hay một mobile app.

2/ Bí mật nằm sau thuật ngữ Server-less computing

Về mặt sử dụng của chúng ta, chúng ta sẽ ko phải quản trị hạ tầng máy chủ hay các bản vá, thư viện lập trình… nhưng bản chất bên dưới AWS vẫn có một hạ tầng tính toán nằm bên dưới được quản trị bởi AWS. Một pool tính toán siêu lớn có thể chạy hàng ngàn concurrent execution tại một thời điểm (mặc định Lambda hỗ trợ 1000 concurrent execution và có thể mở rộng theo yêu cầu, thường mất khoảng 01 tuần để gia tăng soft limit này).

3/ Khác biệt gì giữa EC2 và Lambda?

EC2 cũng là một dịch vụ rất thân thuộc với các bạn làm lập trình, với ec2 bạn có thể cài đặt triển khai một máy chủ từ đầu, độ tùy biến sẽ cao. Bạn có thể lựa chon  OS (Operating System – hay còn goi là hệ điều hành), bạn có thể tùy biến chọn phiên bản cài đặt các hệ quản trị CSDL hay thư viện phụ thuộc theo nhu cầu đặc thù… thông thường sử dụng EC2 trong các ngữ cảnh bạn đã có ứng dụng ở mặt đất on-premise và giờ muốn lift and shift to cloud. Sự linh hoạt đồng nghiệp với việc bạn phải bỏ nhiều thời gian hơn để quản trị hạ tầng ec2 cũng như các phụ thuộc phần mềm dịch vụ chạy trên EC2. Một số công cụ thường kết hợp với hướng này là AWS Elastic Beanstalk là một dịch vụ triển khai và mở rộng các web application dễ dàng quản trị các ec2.

Lambda ở một thế giới khác, hiện đại hơn khi bạn muốn refactor / rearchitect ứng dụng của các bạn thành một kiến trúc mới hay phát triển sản phẩm mới. Hoặc bạn sử dụng Lambda để trigger các sự kiện từ dịch vụ khác của AWS. Ví dụ: Khi có một user upload file hình ảnh lên S3 thì ta có thể sử dụng sự kiện S3 Trigger Lambda để thực hiện một số thao tác nào đó chẳng hạn như resize hình ảnh…

Với Lambda bạn sẽ không phải:

  1. Capacity provisioningm – Cấp phát tài nguyên
  2.  Monitor fleet health – Theo dõi tình trạng up/down của fleet (hạm đội các tính toán, giả sử EC2).
  3. Apply security patch – Vá lỗi bảo mật
  4. Deploy codes – Triển khai codes
  5. Run Web service – Chạy dịch vụ web
  6. Monitor and Log your codes – Theo dõi và nhật ký code
  7. High Availability – dự phòng thảm họa

4/ Các ngôn ngữ lập trình hỗ trợ bởi Lambda

Tin tốt lành cho hầu hết các lập trình viên là Lambda hỗ trợ hầu hết các ngôn ngữ lập trình cấp cao như sau: Java, Go, PowerShell, Node.js, C#, Python, và Ruby. Ngoài ra Lambda còn hỗ trợ  Runtime API để cho phép add thêm các ngôn ngữ lập trình khác. Nhưng theo iGà thấy hiện tại là quá đủ và đã hỗ trợ các ngôn ngữ phổ biến nhất rồi.

5/ AWS Lambda bảo mật code tôi như thế nào?

Như các bạn biết AWS Lambda cũng có hạ tầng compute bên dưới để xử lý các tính toán, mỗi function trong lambda được lưu trữ trong môi trường cô lập với hàm khác (isolated enviroment), source lưu trữ trong S3 hỗ trợ mã hóa đầu cuối (encryption at rest).

6/ Cách nâng cao hiệu năng của Lambda function

Vì Lambda là server-less và sử dụng hạ tầng compute của AWS, nên mỗi lần chạy function hệ thống sẽ nạp code vào một instance background nào đó, việc này có thể ảnh hưởng hiệu năng nếu tần suất function đó được gọi nhiều lần. Lambda có hỗ trợ tính năng gọi là “reuse function instances” nhằm mục đích function vẫn giữ ở instance cho những lần request tiếp theo thay vì phải copy code mới.

7/ Lambda hỗ trợ Multi-thread hay không?

Câu trả lời là có. Mặc định, 1 function lambda chỉ chạy trên Single Thread (đơn luồng). Bạn có thể tạo thêm luồng miễn là ngôn ngữ bạn viết hỗ trợ bởi Amazon Linux. Tài nguyên cấp cho lambda function sẽ được phân phối đều cho các thread.

8/ Lưu trữ các thông tin nhạy cảm như Password thì sẽ như thế nào?

Vì Lambda là server-less code nên mặc định bạn cần nhập các thông tin nhạy cảm như database connection, credential, password… Việc này khá là tệ với các sản phẩm chạy production.

AWS Lambda cũng hỗ trợ biến môi trường (variable env) nhưng việc này vẫn plain text. Để làm việc này ngon và xịn xò hơn, bạn nên kết hợp với dịch vụ khác của AWS đó là AWS KMS (Key Management Service) để lưu trữ giá trị như là ciphertext trong biến môi trường của bạn.

Để sử dụng việc này bạn cũng cần xử lý phần logic trong Lambda function để giải mã giá trị trên.

9/ Cấp phát tài nguyên cho Lambda như thế nào

Hiện tai Lambda tính tiền theo thời gian tính toán, bạn có thể lựa chọn loại bộ nhớ cho Lambda có thể từ 128MB đến 3GB, mỗi lần tăng là bước nhảy của 64MB. CPU sẽ được cấp phát tương ứng với bộ nhớ.

VD: Nếu bọn chọn kích thước bộ nhớ là 256MB sẽ gấp đôi năng lực xử lý khi bọn chọn RAM là 128MB.

10/ Lambda function có thể chạy tối đa trong bao lâu?

Một số ứng dụng đặc thù cần thời gian xử lý như phân tích dữ liệu hay các vòng lặp lắng nghe sự kiện vô tân thì không nên sử dụng với Lambda. Vì mỗi lambda function có thể hỗ trợ chạy tới 15 phút xử lý (execution time). Bạn cũng có thể set thời gian timeout từ 1s cho đến 15 phút.

11/ Bộ dịch vụ hoàn hảo và phổ thông kết hợp vớ Lambda

Answer: API Gateway, Dynamo, AWS Mobile SDK, RDS, WAF, Cognito…

Lambda có rất nhiều thứ hay ho để làm tùy vào sự sáng tạo của bạn. AWS đã tạo ra một dịch vụ và hệ sinh thái huyền diệu, ở đó Lambda là cầu nối của các vì sao.

Mong nhận được chia sẻ kinh nghiệm sử dụng của cả nhà ở phần comment ạ. iGà cảm ơn cả nhà.

Share to be shared,

iGà

Topics #api gw #dynamo #ec2 #lambda #S3 #serverless #trigger #waf