Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Redis

Quản lý State trong AWS Lambda với Redis REST: Hướng dẫn Thực tế

AWS Lambda tiên phong không gian serverless. Nhiều developer tin serverless là tương lai phát triển. Nó mang lại mô hình pay-per-use thực sự, giải phóng bạn khỏi việc maintain và scale hạ tầng backend. Nhưng cũng đi kèm thách thức. Một trong đó là tính stateless. Bạn cần lưu state ở external data store. Rất tiếc, hầu hết data store phổ biến đều connection-based. Như đã giải thích trong bài viết này, quản lý connections có thể đau đầu trong serverless. Đó là lý do chúng tôi phát triển high-performance REST API trên Upstash Redis. Bài viết này sẽ implement một stateful API cơ bản (page counter) trên AWS Lambda và Upstash Redis dùng REST API.

Xem demo trực tiếp: https://3jyz1n07o8.execute-api.us-east-1.amazonaws.com/count

Xem mã nguồn: GitHub

Thiết lập Project

Chúng ta dùng Serverless Framework để deploy ứng dụng.

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ã nguồn

Cài đặt fetch qua npm install node-fetch. Tạo database từ Upstash Console. Click nút REST API, copy URL và token. Cập nhật handler.js:

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 API endpoint vào serverless.yml:

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à Deploy

Chạy local:

serverless invoke local -f hello

Deploy:

serverless deploy

Lệnh sẽ output URL để kiểm tra trên browser.

Lưu ý quan trọng

  • Để hiệu suất tốt nhất, database và AWS Lambda function nên cùng region.
  • Nhờ REST API, không cần quản lý database connections và không cần Redis client.
  • Không chia sẻ API token công khai. Nếu rò rỉ, có thể revoke bằng cách reset password database.
  • Muốn chạy nhiều command trong một function, dùng Pipeline API cho hiệu suất tốt nhất.