คำสั่งเพื่อสร้าง Python REST API ด้วย Serverless และ Lambda

คำสั่งเพื่อสร้าง Python REST API ด้วย Serverless และ Lambda

สร้างไดเร็กทอรีใหม่ ตามด้วยสร้าง package.json ไฟล์:

$ mkdir my-flask-application && cd my-flask-application
$ npm init -f

หลังจาก inatall เรียบร้อยแล้ว ให้ไป inatall plugin อีก 2 ตัวที่จำเป็น ตัวแรกคือ serverless-wsgi plugin ตัวนี้ใช้เพื่อเป็นตัวสื่อสารกับ API Gateway ในรูปแบบ WSGI ที่ Flask คาดหวัง นอกจากนี้เรายังจะใช้ปลั๊กอิน serverless-python-requirements เพื่อจัดการแพ็คเกจ Python ของเรา

$ npm install --save-dev serverless-wsgi serverless-python-requirements

Note: ถ้าหากต้องการดูราบละเอียดเพิ่มเติมของ serverless-python-requirements สามารถดูได้ที่นี่

เมื่อติดตั้งไลบรารี่เสร็จแล้ว, ต่อไปจะเขียน Flask application สร้างไฟล์ app.py ตาม code ข้างล่างนี้

# app.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

จาก code จะเป็น application ง่ายๆ ที่เมื่อมี request เข้ามาที่ path / มันจะ returns "Hello World!"

ในการทำให้ application นี้ใช้งานได้ ให้ไปสร้างไฟล์ serverless.yml ที่ working directory

# serverless.yml

service: serverless-flask

plugins:
  - serverless-python-requirements
  - serverless-wsgi

custom:
  wsgi:
    app: app.app
    packRequirements: false
  pythonRequirements:
    dockerizePip: non-linux

provider:
  name: aws
  runtime: python3.6
  stage: dev
  region: us-east-1

functions:
  app:
    handler: wsgi.handler
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'
หมายเหตุ: เวอร์ชันก่อนหน้านี้ตั้งค่า dockerizePip: true แทน dockerizePip: non-linux คุณจะต้องใช้ serverless-python-requirements v3.0.5 หรือสูงกว่าสำหรับตัวเลือกนี้

สิ่งสุดท้ายที่เราต้องทำคือจัดการแพ็คเกจ Python ของเรา ตัว serverless-python-requirements plugin จะมองหา requirements.txt ไฟล์ ใน working directory และ ติดตั้งลงใน deployment แพ็คเกจของเรา

การสร้างไฟล์ requirements.txt เริ่มจากสร้าง virtual environment และ activate environment

$ conda create -n w36env python=3.6
$ conda activate w36env
หมายเหตุ: จากตัวอย่างนี้ จะใช้ Anaconda สามารถดูข้อมูลเพิ่มเติมได้ที่ conda.io หรือ anaconda.com

หลังจาก activate environment แล้วให้ install Flask package และ package ตามที่ต้องการใช้งาน

(w36env) $ pip install flask
(w36env) $ pip freeze > requirements.txt

เมื่อเรียบร้อยแล้วให้ ทดลอง deploy function ของคุณ ด้วยคำสั่ง

$ sls deploy
หมายเหตุ: คุณจำเป็นต้องติดตั้ง AWS CLI, กำหนดค่าconfigและกำหนดค่าcredentials เพื่อใช้ในการเชื่อต่อเข้ากับ AWS Lambda สามารถดูข้อมูเพิ่มเติมได้ที่ amazon docs

ถ้าทุกอย่างถูกต้อง Serverless จะ deploy function ของคุณไปที่ Lambda ที่ console จะแสดง endpoints ที่ Section: Service Information คุณสามารถทดลองเข้าใช้งานได้จาก browser

ในขั้นตอนต่อจากนี้คุณสามารถพัฒนาส่วนอื่นๆ ได้ตามที่ต้องการ ถ้าการต้องการรันใน Local ต่อไปสามารถทดลองรันโดยใช้คำสั่ง

$ sls wsgi serve
 * Running on http://localhost:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 109-942-480

ข้อมูลจาก: ที่นี่