AWS Lambda là gì?

Thu HaTr

1.png
Gần đây, Lambda đã trở nên phổ biến nhờ AWS, nhưng nhiều người vẫn sử dụng Lambda và serverless thay thế cho nhau. Bài đăng này sẽ giúp mọi người hiểu rõ hơn về AWS Lambda, bao gồm cách nó liên kết với kiến trúc serverless, cách tạo ra và khi nào thì sử dụng nó.

Hiểu về serverless

Để hiểu AWS Lambda là gì, trước tiên cần phải hiểu kiến trúc serverless là gì. Các ứng dụng serverless nói chung là các ứng dụng không có yêu cầu cung cấp bất kỳ máy chủ nào để chạy. Khi chạy một ứng dụng không có máy chủ, sẽ không cần phải lo lắng về việc thiết lập hệ điều hành, sửa lỗi hoặc nhân rộng các máy chủ mà cần phải xem xét khi chạy ứng dụng trên máy chủ thực.
Các ứng dụng hoặc nền tảng không có máy chủ có bốn đặc điểm:
  1. Không quản lý máy chủ
  2. Mở rộng quy mô linh hoạt
  3. Không có dung lượng trống
  4. Tính sẵn sàng cao
Các ứng dụng không có máy chủ có một số thành phần và lớp:
  • Tính toán
  • API
  • Lưu trữ
  • Nhắn tin liên tiến trình
  • Orchestration
Là một cloud provider, AWS cung cấp các dịch vụ có thể được sử dụng cho từng thành phần tạo nên kiến trúc không có máy chủ. Đây là cách thức AWS Lambda hoạt động.

Mô tả AWS Lambda
Dịch vụ AWS Lambda là dịch vụ tính toán không cần máy chủ quy mô cao, miễn phí dựa trên các chức năng. Nó chỉ được sử dụng cho lớp tính toán của một ứng dụng không có máy chủ. Mục đích của AWS Lambda là xây dựng các ứng dụng hướng event có thể được kích hoạt bởi một số event trong AWS.

Trong trường hợp có nhiều event đồng thời, Lambda chỉ cần quay nhiều bản sao của hàm để xử lý các event. Nói cách khác, Lambda có thể được mô tả như một loại chức năng như một dịch vụ (function as a service-FaaS). Ba thành phần bao gồm AWS Lambda là:
  • Một chức năng. Đây là code thực tế thực hiện nhiệm vụ.
  • Một cấu hình. Điều này xác định cách thức thực hiện chức năng của bạn.
  • Một nguồn event source (tùy chọn). Đây là event kích hoạt chức năng. Có thể kích hoạt với một số dịch vụ AWS hoặc dịch vụ của bên thứ ba.
Khi chỉ định một event source, chức năng sẽ được gọi khi một event từ nguồn đó xảy ra. Hãy xem qua biểu đổ bên dưới:
Hình 1
2.png
Chạy một chức năng Lambda
Khi định cấu hình hàm lambda, cần chỉ định runtime environment mà muốn chạy code trong đó. Tùy thuộc vào ngôn ngữ sử dụng, mỗi môi trường cung cấp một bộ nhị phân riêng có sẵn để sử dụng trong code. Cũng được phép đóng gói bất kỳ thư viện hoặc tệp nhị phân nào mong muốn miễn là có thể sử dụng chúng trong runtime environment. Tất cả các môi trường được dựa trên Amazon Linux AMI.

Các runtime environment hiện có là:
  • nodeJS
  • Python
  • Go
  • Java
  • Ruby
  • .Net
  • C#
Khi chạy chức năng lambda, chỉ cần tập trung vào code vì AWS quản lý dung lượng và tất cả các bản cập nhật. AWS Lambda có thể được gọi một cách đồng bộ bằng cách sử dụng ResponseRequest InvocationType và không đồng bộ bằng cách sử dụng EventInvocationType.

Các khái niệm về hàm Lambda
Để hiểu rõ hơn về cách thức hoạt động của chức năng lambda, có những khái niệm chính cần hiểu.
3.png
Event source
Mặc dù AWS Lambda có thể được kích hoạt bằng Invoke API, cách kích hoạt lambda được đề xuất là thông qua các event sources từ trong AWS.
Có hai mô hình gọi được hỗ trợ:
  1. Push được kích hoạt bởi các event khác như cổng API, đối tượng mới trong S3 hoặc Amazon Alexa.
  2. Pull nơi hàm lambda đi và thăm dò nguồn event cho các đối tượng mới. Ví dụ về các event sources như vậy là DynamoDB hoặc Amazon Kinesis.
Cấu hình Lambda
Có một vài cài đặt cấu hình có thể được sử dụng với các chức năng lambda:
  • Memory dial không chỉ điều khiển bộ nhớ mà còn ảnh hưởng đến lượng CPU và tài nguyên mạng được phân bổ cho chức năng.
  • Version/Aliases được sử dụng để hoàn nguyên chức năng trở lại các phiên bản cũ hơn. Đây cũng là chìa khóa trong việc thực hiện chiến lược triển khai như blue/green hoặc tách sản xuất khỏi các môi trường thấp hơn.
  • IAM Role cho phép chức năng lambda tương tác với các dịch vụ AWS và API khác.
  • Quyền của hàm Lambda xác định event source mô hình push nào được phép gọi hàm lambda.
  • Cấu hình mạng cho kết nối ra. Có hai sự lựa chọn:
    • Defaul cho phép kết nối internet nhưng không có kết nối với tài nguyên riêng trong các dịch vụ VPC
    • VPC cho phép chức năng được cung cấp bên trong VPC và sử dụng ENI. Sau đó, có thể đính kèm những thứ như bảo mật như bất kỳ ENI nào khác.
  • Environment variables cho các giá trị inject động được sử dụng bởi code. Ý tưởng tách code này khỏi cấu hình là một trong những phương pháp ứng dụng 12 yếu tố xung quanh các ứng dụng gốc trên cloud.
  • Dead letter queue là nơi gửi tất cả các event gọi thất bại. Đây có thể là chủ đề SNS hoặc SQS
  • Timeouts là thời gian cho phép mà một chức năng được phép chạy trước khi hết thời gian.
Tạo một Lambda AWS
Có một vài cách để tạo hàm lambda trong AWS, nhưng cách phổ biến nhất là với bàn điều khiển nhưng phương pháp này chỉ nên được sử dụng nếu thử nghiệm trong dev. Đối với sản xuất, cách tốt nhất là tự động hóa việc triển khai lambda.

Có một số công cụ của bên thứ ba để thiết lập tự động hóa, như Terraform, nhưng vì ở đây đang nói cụ thể về dịch vụ AWS, AWS khuyên nên sử dụng Mô hình ứng dụng Serverless (SAM) cho phương pháp này. SAM được xây dựng khá nhiều trên AWS CloudFormation và template trông giống như CloudFormation template bình thường ngoại trừ nó có một khối biến đổi nói rằng template đó được mong muốn sẽ là SAM template trái ngược với mẫu CloudFormation thông thường. Có thể xem một số template ví dụ trong AWSlabs.

Các trường hợp sử dụng AWS Lambda
Có thể sử dụng AWS Lambda trong nhiều tình huống, bao gồm nhưng không giới hạn ở:
  • Chuyển nhật ký trong đó chức năng lambda được gọi mỗi khi có event nhật ký mới trong CloudWatch để chuyển nhật ký vào các công cụ như Elaticsearch và Kibana.
  • Trang web nơi có thể gọi chức năng Lambda qua HTTP bằng cách sử dụng Cổng API của Amazon làm HTTP endpoint.
  • Các ứng dụng di động nơi có thể tạo chức năng Lambda để xử lý các event do ứng dụng tùy chỉnh.
Nguồn:
 
Top