Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

Stateful AWS Lambda พร้อม Redis REST

AWS Lambda เป็นผู้บุกเบิกพื้นที่ไร้เซิร์ฟเวอร์ นักพัฒนาหลายคนคิดว่า Serverless คืออนาคตของการพัฒนา ช่วยให้คุณมีรูปแบบการจ่ายต่อการใช้งานที่แท้จริง ช่วยให้คุณไม่ต้องบำรุงรักษาและปรับขนาดโครงสร้างพื้นฐานแบ็กเอนด์ แต่ก็ยังมาพร้อมกับความท้าทาย หนึ่งในนั้นคือการไร้สัญชาติ คุณต้องรักษาสถานะไว้ในที่เก็บข้อมูลภายนอก น่าเสียดายที่ที่เก็บข้อมูลยอดนิยมส่วนใหญ่ใช้การเชื่อมต่อ แต่ดังที่เราได้อธิบายไว้ในโพสต์นี้ การจัดการการเชื่อมต่ออาจกลายเป็นเรื่องยุ่งยากเมื่อไม่มีเซิร์ฟเวอร์ ด้วยเหตุนี้ เราจึงได้พัฒนา REST API ที่มีประสิทธิภาพสูงบน Upstash Redis ในบล็อกโพสต์นี้ ฉันจะใช้ API สถานะขั้นพื้นฐาน (ตัวนับหน้า) บน AWS Lambda และ Upstash Redis โดยใช้ REST API

ดูการสาธิตสด:https://3jyz1n07o8.execute-api.us-east-1.amazonaws.com/count

ดูรหัส:https://github.com/upstash/examples/tree/master/aws-lambda-redis-rest

การตั้งค่าโครงการ

เราจะใช้เฟรมเวิร์กแบบไร้เซิร์ฟเวอร์เพื่อปรับใช้แอปพลิเคชันของเรา


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.

เดอะโค้ด

ติดตั้งการดึงข้อมูลผ่าน npm install node-fetch . จากนั้นสร้างฐานข้อมูลจากคอนโซล Upstash คลิกปุ่ม REST API และคัดลอก url และโทเค็น อัปเดต 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 };
};

เพิ่มจุดปลาย API ไปยัง 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

เรียกใช้และปรับใช้

คุณสามารถใช้ฟังก์ชันในเครื่อง:

serverless invoke local -f hello

คุณสามารถปรับใช้ด้วย:

serverless deploy

คำสั่งจะแสดง URL ที่คุณสามารถตรวจสอบได้ในเบราว์เซอร์ของคุณ

หมายเหตุ

  • เพื่อประสิทธิภาพสูงสุด ฐานข้อมูลและฟังก์ชัน AWS Lambda ควรอยู่ในภูมิภาคเดียวกัน
  • ต้องขอบคุณ REST API เราจึงไม่จำเป็นต้องจัดการการเชื่อมต่อฐานข้อมูล และเราไม่ต้องการไคลเอนต์ Redis ใดๆ
  • อย่าแชร์โทเค็น API ของคุณต่อสาธารณะ หากรั่วไหลโดยไม่ได้ตั้งใจ คุณสามารถเพิกถอนได้โดยรีเซ็ตรหัสผ่านของฐานข้อมูล
  • หากคุณต้องการเรียกใช้หลายคำสั่งในฟังก์ชันเดียว ให้ใช้ไพพ์ไลน์ API เพื่อประสิทธิภาพที่ดีที่สุด