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 เพื่อประสิทธิภาพที่ดีที่สุด