Implementasi REST API dengan FastAPI, Lambda dan API Gateway
Implementing REST API with FastAPI, Lambda and API Gateway
Pendahuluan
Artikel ini ditulis dalam Bahasa Melayu bagi memudahkan pemahaman dalam masa yang sama mengekalkan beberapa perkataan Inggeris yang digunakan secara global.
Penulis telah terpanggil untuk menulis artikel ini dalam proses membuat REST API deployment menggunakan servis AWS beberapa minggu lepas disebabkan hampir tiada atau kurang lengkap artikel yang menerangkan bagaimana cara untuk membuat deployment menggunakan trio - FastAPI, Lambda beserta API Gateway. Segala komen dan kritikan amatlah dihargai daripada para pembaca.
Dalam tutorial ini, penulis hanya memfokuskan langkah-langkah sahaja tanpa pergi terlalu detail kepada servis berkenaan.
Metodologi
FastAPI
Langkah-langkah
Cipta virtual environment, aktifkan kemudian install pakej FastAPI dan Mangum.
Tulis kod menggunakan pakej FastAPI. Dibawah penulis sertakan contoh kod asas yang akan digunakan.
# main.py
import os
from fastapi import FastAPI
from mangum import Mangum
stage = os.environ.get("STAGE", None)
app = FastAPI(title="My Cat API",
root_path="/{stage}/" if stage else "/"),
openapi_url = "/pet/openapi.json",
docs_url = "/pet/docs"
)
router = APIRouter(prefix="/pet")
@router.get("/")
async def get_root():
return {
"author": "Ammar Azman",
"status": "succeed!"
}
@router.get("/meow")
async def hungry():
return {
"sound":"meow!"
}
app.include_router(router)
lambda_handler = Mangum(app)
Keterangan kod
Environment diperlukan kerana dalam API Gateway terdapat bahagian Stage (yang wajib di-setup!) yang akan menjadikan path API kita mempunyai prefix
/dev
(berfungsi sebagai proxy). Kod di lokal tetap akan berfungsi (kerana tiada.env
) dengan menggunakan logik diatas.Prefix untuk setiap path ditambah menggunakan class
APIRouter
, oleh kerana dalam konfigurasi API Gateway, kita perlu cipta Resource (nama perlu sama, iaitu/pet
) supaya API Gateway dapat hit path tersebut. Disebabkan itu juga, string untukopenapi_url
dandocs_url
juga perlu diubahsuai dengan menambah/pet
dihadapan bagi membolehkan kita melihat dokumentasi API.Mangum digunakan supaya kesemua API boleh diwrap menjadi lambda function, yang juga akan dipanggil semasa konfigurasi AWS Lambda.
Jalankan command dibawah dan uji API anda -
uvicorn main:app --reload
- Uji kesemua API dengan membuat request. Jika okay, sambung ke proses seterusnya.
AWS Lambda
Nota: Sebelum anda setup Lambda, penulis menganggap bahawa anda telah mendapatkan segala permission untuk mencipta fungsi Lambda di AWS Lambda dan API Gateway.
Langkah-langkah
Cipta fungsi Lambda baharu. Katakan nama fungsi adalah,
my_cat_lambda
.Pilih runtime versi Python yang merujuk kepada versi Python yang anda gunakan. (wajib sama!)
Setelah selesai, pergi kepada Configuration tab >> Edit.
Tambah Key - "STAGE" dan Value - "dev" dalam Environment Variable.
Kemudian, pada Code tab, ubah handler kepada app.main.lambda_handler.
Selesai ubah, muat naik fail zip yang mempunyai kod dan semua pakej ke S3, dan pass URL object tersebut. (pastikan kod berada dalam fail - bererti dalam format modul. Dalam tutorial ini, kod berada dalam direktori
/app
)Tekan pautan yang diberikan Lambda.
Pastikan untuk tambah
/pet
diakhir URL (disebabkn prefix dalam router).Anda akan lihat output dibawah pada skrin
{ "author": "Ammar Azman", "status": "succeed!" }
Tambah lagi
/docs
pada hujung URL untuk melihat API docs. Pautan tersebut akan gagal. Akan tetapi, ini telah dijangka disebabkan terdapat "dev" dalam environment.
Nota: Anda boleh automate proses (CI/CD) muat naik setiap kali mengemaskini kod baru dengan menggunakan Git Action.
API Gateway
Langkah-langkah
Pada muka AWS Lambda, tekan Add trigger.
Pilih API Gateway dan new api.
Pilih REST API.
Tekan Add.
Pada search bar, cari servis API Gateway dan klik.
Cari nama fungsi Lambda anda (
my_cat_lambda
) dan klik. Anda akan dibawa ke muka dimana terdapat API Gateway untuk fungsi Lambda anda.Pada Resource tab, klik Create Resource.
Setkan Resource path kepada
/
dan Resource name kepada nama prefix dalam kod (pet
). Klik tanda pada CORS juga. Kemudian klik Create resource.Langkah 8 akan diulang semula dengan Resource path kepada
/pet
dan Resource name kepada{proxy+}
.Setelah selesai, cipta Method untuk
/pet
dan{proxy+}
dengan methodANY
.Kemudian, klik Deploy API dan pilih stage
dev
jika sudah dicipta pada Stage, atau jika belum, cipta satu Stage bernamadev
.Klik Deploy API.
Pergi semula kepada muka AWS Lambda anda, dan klik Configuration >> Trigger.
Klik URL yang diberikan API Gateway dan boleh cuba request.
Jika berjaya, tahniah, anda telah berjaya deploy API anda!
Konklusi
Langkah diatas mungkin akan obsolete pada masa akan datang. Namun penulis berharap tutorial ini dapat memudahkan anda yang merancang untuk deploy API anda menggunakan servis AWS.
Sebarang komen penambah-baikan amatlah dialukan. Jika tutorial ini membantu, kongsikan pada rakan-rakan anda. Sampai jumpa lagi.