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

การพัฒนาแบบไร้เซิร์ฟเวอร์ด้วย AWS Lambda และ Redis Enterprise Cloud

ในบล็อกโพสต์นี้ คุณจะได้เรียนรู้วิธีผสานรวม AWS Lambda และ Redis Enterprise Cloud เมื่อใช้ตัวอย่างแอปพลิเคชันฐานข้อมูลภาพยนตร์ คุณจะค้นพบวิธีสร้างและปรับใช้ฟังก์ชัน Lambda สองฟังก์ชัน ฟังก์ชันหนึ่งใน Node.js และ Python ฟังก์ชัน Lambda ทั้งสองนี้ใช้เพื่อโต้ตอบกับฐานข้อมูล Redis เพื่อแทรก อัปเดต ลบ และสืบค้น แอปพลิเคชันใช้ RediSearch API ที่มีฟังก์ชันการค้นหาและการค้นหาที่หลากหลาย Serverless โดยใช้ AWS Lambda เข้ากับแนวโน้มที่เพิ่มขึ้นต่อสถาปัตยกรรมไมโครเซอร์วิส เนื่องจากช่วยให้นักพัฒนาลดขอบเขตของ "บริการ" ของธุรกิจลงในโปรเจ็กต์ขนาดเล็กที่สามารถนำไปใช้ได้โดยใช้ภาษาการเขียนโปรแกรมที่พวกเขาเลือก หากต้องการเรียนรู้เพิ่มเติม ให้ดูวิดีโอด้านล่างและอ่านภาพรวมคร่าวๆ ของ AWS Lambda และเจาะลึกวิธีสร้างแอปพลิเคชันโดยใช้ Redis Enterprise Cloud และ Lambda:

ภาพรวมอย่างรวดเร็วของ AWS Lambda

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

สามารถเรียกใช้ AWS Lambda ได้โดยใช้วิธีการต่างๆ มากมาย:โดยตรงจากคอนโซล AWS โดยใช้เหตุการณ์จากบริการอื่นๆ ของ AWS เช่น SNS, SQS หรือ Kinesis หรือแม้แต่จากเหตุการณ์ AWS Console, CloudWatch หรือ S3 ในแอปพลิเคชันฐานข้อมูลภาพยนตร์ตัวอย่างของเรา ฟังก์ชัน Lambda จะถูกเรียกใช้โดยใช้ปลายทาง HTTP REST ซึ่งทำได้โดยใช้ AWS API Gateway (คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับการเรียกใช้ฟังก์ชัน AWS Lambda ได้ในเอกสารประกอบ)

กระบวนการดำเนินการ AWS Lambda HTTP

โดยเฉพาะอย่างยิ่ง คำขอผ่าน HTTP จะถูกส่งไปยังเครื่องมือการจัดการ API Gateway ของ AWS ซึ่งแยกวิเคราะห์เนื้อหา ส่วนหัว และพารามิเตอร์ จากนั้นทริกเกอร์ฟังก์ชัน Lambda ด้วยเพย์โหลดนี้:

การพัฒนาแบบไร้เซิร์ฟเวอร์ด้วย AWS Lambda และ Redis Enterprise Cloud

ในฐานะนักพัฒนา คุณเพียงแค่เขียนโค้ดเพื่อแสดงตำแหน่งข้อมูล REST และกำหนดค่าการปรับใช้เพื่อแสดงภายใน AWS API Gateway (เราจะพูดถึงเรื่องนี้เพิ่มเติมในหัวข้อถัดไปซึ่งครอบคลุมตัวอย่างแอปพลิเคชันฐานข้อมูลภาพยนตร์ของเรา)

การจัดการสถานะและข้อมูลในแอปพลิเคชันแบบไร้เซิร์ฟเวอร์

AWS Lambda เป็นสภาพแวดล้อมที่ไร้สัญชาติ ในหลาย ๆ แอปพลิเคชัน คุณยังคงต้องการแบ่งปันสถานะระหว่างบริการหรือการโทร และ Redis สามารถช่วยได้ สำหรับการจัดการสถานะอย่างง่าย นักพัฒนาของ AWS มักใช้ ElastiCache แต่แอปพลิเคชันจำนวนมากต้องการมากกว่าการจัดการสถานะ พวกเขายังต้องการความคงอยู่ ข้อมูลที่สมบูรณ์ ประสิทธิภาพสูง และโมเดลการสืบค้น Redis Enterprise Cloud ให้บริการที่มีการจัดการเต็มรูปแบบบน AWS (รองรับ Google Cloud และ Microsoft Azure ด้วย)

แอปพลิเคชันตัวอย่างฐานข้อมูลภาพยนตร์ Redis

ตอนนี้เราพร้อมที่จะดูตัวอย่างแอปพลิเคชันฐานข้อมูลภาพยนตร์เพื่อดูขั้นตอนสำคัญในการสร้างแอปพลิเคชันโดยใช้ Redis Enterprise Cloud และ AWS Lambda

แอปพลิเคชันใช้ชุดข้อมูลที่ได้รับการบันทึกไว้ในบทแนะนำการเริ่มต้นใช้งาน RediSearch ซึ่งประกอบด้วยแคตตาล็อกภาพยนตร์ที่สร้างจาก Redis Hashes ดังแสดงในแผนภูมิด้านล่าง ส่วนหน้าถูกสร้างขึ้นโดยใช้ Vue.js ซึ่งเรียกปลายทาง REST ไปที่:

  • แสดงรายการ จัดเรียง และกรองภาพยนตร์
  • แก้ไขภาพยนตร์และเพิ่ม/ลบความคิดเห็น
  • ค้นหาภาพยนตร์โดยใช้การค้นหาข้อความแบบเต็มและการค้นหาแบบเหลี่ยมเพชรพลอย
การพัฒนาแบบไร้เซิร์ฟเวอร์ด้วย AWS Lambda และ Redis Enterprise Cloud การพัฒนาแบบไร้เซิร์ฟเวอร์ด้วย AWS Lambda และ Redis Enterprise Cloud

ดังที่กล่าวไว้ข้างต้น แอปพลิเคชันใช้ประโยชน์จาก AWS API Gateway, AWS Lambda และ Redis Enterprise Cloud สำหรับที่เก็บข้อมูล นอกจากนี้ บริการ Python ยังใช้บริการ AWS Key Management Service เพื่อจัดเก็บและเข้ารหัสรหัสผ่านฐานข้อมูล Redis

ติดตั้งและเรียกใช้แอปพลิเคชันสาธิต

ในการเริ่มต้น คุณจะต้องมีข้อกำหนดเบื้องต้นบางประการ:

  • การตั้งค่าบัญชี AWS ข้อมูลประจำตัว พร้อมติดตั้ง CLI แล้ว
  • บัญชีและฐานข้อมูล Redis Enterprise Cloud โดยเปิดใช้งานโมดูล RediSearch
  • Git
  • Node.js
  • หลาม
  • อินเทอร์เฟซบรรทัดคำสั่ง Redis (CLI)

เมื่อคุณประกอบทุกอย่างเรียบร้อยแล้ว มาดูขั้นตอนการติดตั้งและรันแอปพลิเคชันตัวอย่างกัน

ขั้นตอนที่ 1:รับข้อมูลฐานข้อมูล Redis Enterprise Cloud

หากคุณยังไม่ได้สร้างฐานข้อมูลบน Redis Enterprise Cloud โปรดดำเนินการโดยใช้ข้อมูลในคู่มือเริ่มต้นใช้งาน Redis Modules

เมื่อคุณเชื่อมต่อกับ Redis Enterprise Cloud คุณสามารถค้นหาข้อมูลการเชื่อมต่อฐานข้อมูลในเว็บคอนโซล อย่าลืมเพิ่มโมดูล “RediSearch 2” ลงในฐานข้อมูล

การพัฒนาแบบไร้เซิร์ฟเวอร์ด้วย AWS Lambda และ Redis Enterprise Cloud

คุณจะต้องใช้คุณสมบัติต่อไปนี้เพื่อเชื่อมต่อฟังก์ชัน Lambda กับฐานข้อมูล Redis ของคุณ:

  • REDIS_HOST:redis-18541.xxx.xxxx.xxx.cloud.redis.com
  • REDIS_PORT:18541
  • REDIS_PASSWORD :<รหัสผ่านที่แสดงบนหน้าจอ

ขั้นตอนที่ 2:รับโครงการจาก GitHub

โคลนที่เก็บไปยังสภาวะแวดล้อมภายในเครื่องของคุณ และย้ายไปยังไดเร็กทอรีโครงการ

> git clone https://github.com/redis-developer/aws-redis-cloud-demo.git

> cd aws-redis-cloud-demo

โครงสร้างไดเรกทอรีโครงการแสดงอยู่ที่นี่:

aws-redis-cloud-demo
├── README.md
├── front-end                   => Vue.js project
│   ├── .env.development        => to set the Lambda URLs in dev mode
│   ├── .env.production         => to set the Lambda URLs in production mode    
│   ├── ...
│   └── vue.config.js
│   └── ...
├── movie-comments-microservice => The Python, comments service
│   ├── .chalice
│   │   └── config.json         => Lambda & Service configuration  
│   ├── app.py
│   ├── chalicelib              => Contains application code and lib
│   │   └── ….
│   ├── readme.md
│   └── requirements.txt
└── movies-list-microservice    => The Node.js, movie service
    ├── import_movies.redis     => Dataset file
    ├── ...
    ├── serverless.yml          => Lambda & Service configuration
    ├── src
    │   └── ...
    └── ...

ขั้นตอนที่ 3:นำเข้าชุดข้อมูลฐานข้อมูลภาพยนตร์ลงในแอปพลิเคชันของคุณ

ไฟล์ aws-redis-cloud-demo/movies-list-microservice/import_movies.redis มีคำสั่ง Redis ทั้งหมดเพื่อแทรกภาพยนตร์ลงในฐานข้อมูล คำสั่งที่ใช้คือ:

  • HSET สำหรับภาพยนตร์แต่ละเรื่อง
  • FT.CREATE เพื่อสร้างดัชนี RediSearch

ในการนำเข้าชุดข้อมูล ให้เปิดเทอร์มินัลแล้วเรียกใช้คำสั่งต่อไปนี้:

> export REDISCLI_AUTH=<YOUR_DB_PASSWORD>
> redis-cli -h redis-18541.xxx.xxxx.xxx.cloud.redis.com \
        -p 18541 < movies-list-microservice/import_movies.redis

ขั้นตอนที่ 4:กำหนดค่าแอปพลิเคชันเพื่อใช้อินสแตนซ์ Redis Enterprise Cloud

ก่อนทดสอบแอปพลิเคชัน คุณต้องกำหนดค่าบริการ Node.js และ Python ด้วยอินสแตนซ์ฐานข้อมูล Redis Enterprise Cloud ของคุณ เปิดไฟล์เหล่านี้:

  • ./movies-list-microservice/serverless.yml
  • ./movie-comments-microservice/.chalice/config.json

จากนั้นตั้งค่าโฮสต์ พอร์ต และรหัสผ่าน Redis:(REDIS_HOST, REDIS_PORT, REDIS_PASSWORD )

ขั้นตอนที่ 5: สร้างและเรียกใช้ไมโครเซอร์วิสภาพยนตร์ (Node.js)

ทำตามขั้นตอนที่แสดงไว้ที่นี่เพื่อสร้างและเรียกใช้โครงการ (คุณสามารถค้นหาข้อมูลทั้งหมดได้ในไฟล์ Readme ของโครงการ)

  1. ติดตั้งเฟรมเวิร์กแบบไร้เซิร์ฟเวอร์
> npm install -g serverless

2. ไปที่ไดเร็กทอรีภาพยนตร์-รายการ-ไมโครเซอร์วิส

> cd movies-list-microservice

3. ติดตั้งการพึ่งพา

> npm install

4. เรียกใช้ฟังก์ชัน Lambda ในเครื่อง

> npm start

5. ทดสอบบริการโดยเปิดเบราว์เซอร์เรียกใช้บริการ REST:https://localhost:3000/api/movies/1

6. ปรับใช้บริการกับ AWS โดยเรียกใช้คำสั่งต่อไปนี้เพื่อปรับใช้ฟังก์ชันกับสภาพแวดล้อม AWS ของคุณ:

> serverless deploy
................................
Serverless: Stack update finished...
Service Information
service: movies-list-microservice
stage: api
region: us-east-1
stack: movies-list-microservice-api
resources: 33
api keys:
  None
endpoints:
  GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/search
  GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/group_by/{field}
  GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id}
  POST - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id}
functions:
  listMovies: movies-list-microservice-api-listMovies
  searchMovies: movies-list-microservice-api-searchMovies
  getMovie: movies-list-microservice-api-getMovie
  saveMovie: movies-list-microservice-api-saveMovie
layers:
  None

7. ทดสอบ API โดยชี้เบราว์เซอร์ของคุณไปที่ https://.execute-api..amazonaws.com/api/movies/1

หมายเหตุ:หากคุณได้รับข้อผิดพลาด ให้ตรวจสอบบันทึกฟังก์ชันใน AWS CloudWatch เพื่อดูว่าเกิดอะไรขึ้น

เจาะลึกโค้ด:

  • ไฟล์ package.json มีการขึ้นต่อกันที่ใช้โดยโปรเจ็กต์ Node.js นี้ โครงการนี้ค่อนข้างง่าย และใช้การพึ่งพาต่อไปนี้:
    • เครื่องหมาย redis และ redis-redisearch ไลบรารีใช้เพื่อเชื่อมต่อกับ Redis และคำสั่ง RediSearch ที่เปิดเผย
    • The aws-แลมบ์ดา ไลบรารีใช้เพื่อเรียกใช้ฟังก์ชัน AWS Lambda ทั้งหมดเพื่อปรับใช้แอปพลิเคชันโหนดกับสภาพแวดล้อม AWS ของคุณ
  • serverless.yml file กำหนดฟังก์ชันแบบไร้เซิร์ฟเวอร์ที่จับคู่การกระทำ HTTP กับฟังก์ชัน JavaScript ที่จะถูกเรียก (กำหนดใน handler.ts ) และมีตัวแปรสภาพแวดล้อม (ส่วนใหญ่เป็นสตริงการเชื่อมต่อ Redis ในการสาธิตนี้)
  • ตัวจัดการ ตัวจัดการ file คือคลาสที่จับเหตุการณ์ที่มาจาก AWS Gateway และเรียกไลบรารีแอปพลิเคชัน SearchService ซึ่งทำการเรียกไปยังฐานข้อมูล Redis ทั้งหมด
  • ไฟล์ SearchService.ts มีวิธีการทั้งหมดในการโต้ตอบกับฐานข้อมูล Redis และใช้ Redis และ RediSearch API:client.ft_search()client.aggregate() , client.hmset() , และอื่น ๆ. (คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับคำสั่ง Redis และ RediSearch ได้ที่ Redis University และบทแนะนำการเริ่มต้นใช้งาน RediSearch 2.0 บน GitHub

ขั้นตอนที่ 6: สร้างและเรียกใช้ไมโครเซอร์วิสความคิดเห็น (Python)

นี่คือขั้นตอนในการสร้างและเรียกใช้โครงการ (คุณสามารถค้นหาข้อมูลทั้งหมดได้ในไฟล์ Readme ของโครงการ)

  1. ย้ายไปที่โครงการ Python และสร้างสภาพแวดล้อมเสมือน:
> cd movie-comments-microservice

> python3 -m venv chalice-env

> source chalice-env/bin/activate

2. ติดตั้งการพึ่งพา:

> pip install -r requirements.txt

3. ตั้งค่าสภาพแวดล้อม AWS เรียกใช้คำสั่งต่อไปนี้ และกำหนดค่า ID และความลับของคุณ:

> aws configure

AWS Access Key ID [None]: ****************ABCD
AWS Secret Access Key [None]: ****************abCd
Default region name [None]: us-west-2
Default output format [None]:

4. ใช้บริการ AWS โดยเรียกใช้คำสั่งต่อไปนี้เพื่อปรับใช้ฟังก์ชันกับสภาพแวดล้อม AWS ของคุณ:

> chalice deploy

Reusing existing deployment package.
Updating policy for IAM role: movie-comments-microservice-dev
Creating lambda function: movie-comments-microservice-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:us-east-1:11111111111:function:movie-comments-microservice-dev
  - Rest API URL: https://XXXXXXX.execute-api.us-east-1.amazonaws.com/api/

เจาะลึกโค้ด:

  • ไฟล์ requirements.txt มีการอ้างอิงที่ใช้โดยโปรเจ็กต์ Python นี้ โครงการนี้ค่อนข้างง่าย และใช้การพึ่งพาต่อไปนี้:
    • ถ้วย เป็นเฟรมเวิร์กของ AWS ที่ใช้สร้างแอปพลิเคชันแบบไร้เซิร์ฟเวอร์ใน Python
    • redis และ ค้นหาใหม่ เข้าถึง Redis และใช้ RediSearch API
  • ตัว config.json file กำหนดแอปพลิเคชันแบบไร้เซิร์ฟเวอร์และใช้เพื่อกำหนดตัวแปรสภาพแวดล้อม ในแอปพลิเคชันนี้ ข้อมูลการเชื่อมต่อฐานข้อมูล Redis
  • app.py file เป็นจุดเริ่มต้นแอปพลิเคชันที่กำหนดปลายทาง REST ทั้งหมดโดยใช้เส้นทางต่างๆ แอปพลิเคชันนำเข้าการพึ่งพาต่างๆ โดยเฉพาะ CommentService ที่ใช้โต้ตอบกับ Redis เมื่อคุณต้องการใช้หลายไฟล์ คุณต้องใส่ไฟล์ใน chalicelib โฟลเดอร์
  • ไฟล์ comment_service.py มีการโต้ตอบทั้งหมดกับ Redis เพื่อสร้าง ค้นหา และลบความคิดเห็น จุดที่น่าสนใจสำหรับคุณลักษณะความคิดเห็นคือ search() กระบวนการ. วิธีนี้ใช้เพื่อดึงความคิดเห็นสำหรับภาพยนตร์ที่จัดเรียงตามวันที่สร้างโดยใช้ search_client.search() โทร.

คุณสามารถเลือกเก็บรหัสผ่านฐานข้อมูล Redis ใน บริการจัดการคีย์ของ AWS . คุณสามารถค้นหาขั้นตอนการกำหนดค่าในโครงการ เอกสาร

ขั้นตอนที่ 7:เรียกใช้แอปพลิเคชันส่วนหน้า

  1. ไปที่ไดเร็กทอรีส่วนหน้าและติดตั้งการพึ่งพา:
> cd front-end

> npm install

2. แก้ไข .env.development ไฟล์เพื่อกำหนด URL ของภาพยนตร์และบริการแสดงความคิดเห็น:

VUE_APP_MOVIES_SERVICE=https://<xxx>.execute-api.<reg>.amazonaws.com/api
VUE_APP_COMMENTS_SERVICE=https://<xxx>..execute-api.<reg>.amazonaws.com/api

3. เรียกใช้แอปพลิเคชัน:

> npm run serve

4. เปิดเบราว์เซอร์ของคุณและไปที่ https://localhost:8084

ขณะนี้คุณไปยังส่วนต่างๆ ในแอปพลิเคชัน อัปเดตและค้นหาภาพยนตร์ และเพิ่ม/ลบความคิดเห็นได้

หรือ คุณสามารถใช้ S3 และ CloudFront เพื่อปรับใช้แอปพลิเคชัน Vue ในสภาพแวดล้อม AWS ของคุณและให้บริการแก่ผู้ใช้ของคุณแบบสาธารณะ สิ่งนี้อธิบายไว้ในโครงการ เอกสาร

บทสรุป

การทำงานกับ AWS Lambda และ Redis Enterprise Cloud ช่วยลดความยุ่งยากในการปรับใช้บริการของคุณ เมื่อใช้ Redis Enterprise Cloud กับ RediSearch คุณจะสามารถสืบค้นข้อมูล Redis ได้อย่างง่ายดายโดยใช้ค่า ซึ่งช่วยให้คุณใช้ Redis เป็นฐานข้อมูลหลักของบริการได้

Redis Enterprise Cloud เข้ากันได้กับ Redis ช่วยให้คุณย้ายการปรับใช้ Redis ที่มีอยู่ของคุณได้อย่างง่ายดาย ทั้ง OSS และบริการที่มีการจัดการ คุณเพียงแค่ต้องเปลี่ยนพารามิเตอร์การเชื่อมต่อ (เช่น จุดปลายฐานข้อมูล) มีหลายวิธีในการดำเนินการย้ายข้อมูลสด รวมถึง:

  • การใช้งานสีน้ำเงิน-เขียว
  • การซิงโครไนซ์ Amazon ElastiCache และ Redis Enterprise Cloud โดยใช้ Active Passive Geo-Distribution
  • การใช้เครื่องมือ RIOT แบบโอเพนซอร์สของเราในการย้ายข้อมูลของคุณ

นอกจาก RediSearch แล้ว Redis Enterprise Cloud ยังให้คุณใช้โมเดลข้อมูลอื่นๆ ที่น่าสนใจ เช่น กราฟ, JSON, อนุกรมเวลา และตัวกรอง Bloom และนำเสนอฟีเจอร์ฐานข้อมูลอื่นๆ ที่หลากหลายซึ่งมีความสำคัญในสภาพแวดล้อมการผลิต ซึ่งรวมถึงความพร้อมใช้งานสูง ความสามารถในการปรับขนาด ความคงอยู่ ความปลอดภัย และการกระจายทางภูมิศาสตร์แบบแอคทีฟ-แอ็คทีฟ

ต้องการเรียนรู้เพิ่มเติมหรือไม่? ดูโฮมเพจ AWS re:Invent ของเราและอ่านบทช่วยสอนและโพสต์ในบล็อกเหล่านี้:

  • เริ่มต้นใช้งานโมดูล Redis บน AWS
  • 6 คุณสมบัติหลักที่ต้องพิจารณาเมื่อเลือกผู้ให้บริการ DBaaS
  • วิธีที่ Redis Enterprise Cloud ตอบสนองความต้องการของลูกค้าองค์กรที่เติบโตเต็มที่บน AWS