คำสั่งเพื่อสร้าง 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
ข้อมูลจาก: ที่นี่