Cách configure private API gateway với Lambda function trong AWS SAM (Serverless Application Model)

Tram Ho

Trong quá trình làm việc, hay gặp vấn đề nên notes ra đây luôn tránh quên

Lambda function là gì

Lambda function là một service rất hay của AWS mới xuất hiện trong vài năm gần đây. Nó cho phép người dùng đưa chương trình của mình lên và chạy mà không cần phải cài đặt môi trường như EC2.
Tuy nhiên Lambda function không thể tự chạy một mình, nó cần có sự kiện kích hoạt, có thể là gọi thông qua API, hoặc thông qua dạng Jobs từ AWS CloudWatch.
Và nó không phải tất cả cho một hệ thống mà chỉ là một phần của hệ thống. Nó thường được với vai trò là business logic, nhận thông tin, lấy thông tin từ module khác, trả lại kết quả hoặc ghi dữ liệu vào Database (DynamoDB hay S3)
Một ưu điểm của Lambda function là cách tính chi phí, thay vì một chi phí cho server như E2, thì nó chỉ tính phí dựa trên thời gian function được gọi. Rât tiết kiệm phải không.
Tài liệu về Lambda function

API Gateway là gì

Đúng như nghĩa đen, API Gateway cung cấp phương thức để bên ngoài có thể giao tiếp với tài nguyên hệ thống, như api, hay s3. Với nhiều options setting, có thể giới hạn theo quyền được tạo sẵn, key hay giới hạn IP address
Tài liệu về API Gateway

SAM là gì

SAM là một dịch vụ của AWS giúp triển khai, cài đặt và câú hình tự động các dịch vụ, module của hệ thống lên môi trường AWS, thông qua file config là template.yaml.
Rất tiện lợi trong quá trình phát triển, test và deploy với sự thiết lập thông số khác nhau cho mỗi môi trường.
Tài liệu về AWS SAM

Cấu hình chung các dịch vụ này với nhau

Dưới đây là nội dung mẫu của file yaml điển hình.

Những điểm cần chú ý

Thiết lập API gateway là private

Giới hạn vpce

Trỏ tới API này khi định nghĩa Lambda function

Với định nghĩa như trên, chúng ta đã định nghĩa được cùng lúc

  1. API gateway
  2. Lambda function
  3. … có thể cấu hình cả S3, DynamoDB …

Cách triển khai SAM lên môi trường AWS thông qua cli

Chú ý: các bạn cần cài đặt sẵn

Tham khảo cài đặt ở đây

  1. aws cli
  2. sam cli
  3. cấu hình profile bên trong 2 file ./aws/config và ./aws/credentials

Build và triển khai (deploy)

Bàn về cách định nghĩa API trong template

Có hai cách để định nghĩa một api:

  • Định nghĩa độc lập (như ví dụ trên)
  • Định nghĩa bên trong thuộc tính events của Function
    Trong trường hợp này, nếu muốn thiết lập API là private thì phải định nghĩa trong Global Section
    (Vì khi này, thuộc tính EndpointConfiguration không được hỗ trợ)
    Hãy tham khảo ví dụ dưới

Các bạn có thể thấy, thay vì dùng property: RestApiId: để trỏ tới API được định nghĩa sẵn, chúng ta mô tả API này ngay trong Function. Cũng khá tiện nhỉ ?

Lời cuối

Vậy là bạn đã hoàn thành việc cấu hình và triển khai các dịch vụ có liên kết với nhau lên AWS rồi đấy.
Giờ là lúc xác nhận xem chúng có triển khai đúng không bằng các vào AWS Manage console, xem trong
CloudFormation, Lambda function, API Gateway.

Ở các bài viết sau, mình sẽ hướng dẫn cách gọi API Gateway này từ command line, từ chương trình, cũng như các test riêng biệt Lambda function, API Gateway trên chính AWS Manage Console nhé.

Thân ái!

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo