AWS Lambda đi tiên phong trong không gian không máy chủ. Nhiều nhà phát triển nghĩ rằng serverless là tương lai của sự phát triển. Nó cung cấp cho bạn mô hình trả tiền cho mỗi lần sử dụng thực sự, giúp bạn giảm bớt việc bảo trì và mở rộng cơ sở hạ tầng phụ trợ. Nhưng nó cũng đi kèm với những thách thức. Một trong số đó là tính vô trạng của nó. Bạn cần giữ trạng thái trong kho dữ liệu bên ngoài. Thật không may, hầu hết các cửa hàng dữ liệu phổ biến đều dựa trên kết nối. Nhưng như chúng tôi đã giải thích trong bài đăng này, việc quản lý các kết nối có thể trở nên khó khăn trong serverless. Đó là lý do tại sao, chúng tôi đã phát triển API REST hiệu suất cao trên Upstash Redis. Trong bài đăng blog này, tôi sẽ triển khai một api trạng thái rất cơ bản (bộ đếm trang) trên AWS Lambda và Upstash Redis bằng cách sử dụng API REST.
Xem bản demo trực tiếp:https://3jyz1n07o8.execute-api.us-east-1.amazonaws.com/count
Xem mã:https://github.com/upstash/examples/tree/master/aws-lambda-redis-rest
Thiết lập dự án
Chúng tôi sẽ sử dụng khung công tác không máy chủ để triển khai ứng dụng của mình.
git:(master) ✗ serverless
Serverless: No project detected. Do you want to create a new one? Yes
Serverless: What do you want to make? AWS Node.js
Serverless: What do you want to call this project? aws-lambda-redis-rest
Project successfully created in 'aws-lambda-redis-rest' folder.
Mã
Cài đặt tìm nạp qua npm install node-fetch
. Sau đó, tạo cơ sở dữ liệu từ bảng điều khiển Upstash. Nhấp vào nút REST API và sao chép url và mã thông báo. Cập nhật handler.js như bên dưới:
const fetch = require("node-fetch");
module.exports.hello = async (event) => {
const url =
"https://us1-last-panther-33620.upstash.io/incr/counter?_token=AACQgMzYyNGM0OGMtZWQ3MC00OTRlLWFmOGEtODc3ZWQxYWQyZGJjZjgyOTlkM2JhNWIxE3OTJlNmE2NGVjNGM=";
let data = await fetch(url);
let result = await data.text();
return { statusCode: 200, body: result };
};
Thêm điểm cuối API vào serverless.yml như sau:
service: aws-lambda-redis-rest
frameworkVersion: '2'
provider:
name: aws
runtime: nodejs12.x
lambdaHashingVersion: 20201221
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: /count
method: get
Chạy và Triển khai
Bạn có thể thực hiện các chức năng cục bộ:
serverless invoke local -f hello
Bạn có thể triển khai với:
serverless deploy
Lệnh sẽ xuất ra url mà bạn có thể kiểm tra trong trình duyệt của mình.
Ghi chú
- Để có hiệu suất tốt nhất, cơ sở dữ liệu và chức năng AWS Lambda của bạn phải ở cùng một khu vực.
- Nhờ có REST API, chúng tôi không cần quản lý các kết nối cơ sở dữ liệu và chúng tôi không cần bất kỳ ứng dụng Redis nào.
- Không chia sẻ công khai mã thông báo API của bạn. Nếu bị rò rỉ do nhầm lẫn, bạn có thể thu hồi bằng cách đặt lại mật khẩu cơ sở dữ liệu của mình.
- Nếu bạn muốn chạy nhiều lệnh trong một chức năng, hãy sử dụng API đường ống để có hiệu suất tốt nhất.