Serverless Development & Cloud

Serverless Architecture: Deploying Python Flask APIs on Vercel Infrastructure

সাধারণত ফ্রন্টএন্ড ডেভেলপারদের কাছে **Vercel** একটি অত্যন্ত পরিচিত নাম Next.js বা React অ্যাপ হোস্ট করার জন্য। তবে আপনি কি জানেন, কোনো প্রকার ২৪/৭ রানিং সার্ভার ব্যাকএন্ড বা অতিরিক্ত খরচ ছাড়াই আপনার পাইথনের **Flask REST API**-কে সম্পূর্ণ সার্ভারলেস (Serverless Functions) মেকানিজমে ভার্সেলের গ্লোবাল এজ নেটওয়ার্কে ডেপ্লয় করা সম্ভব?

সার্ভারলেস আর্কিটেকচারের সবচেয়ে বড় সুবিধা হলো, যখন কোনো রিকোয়েস্ট আসবে কেবল তখনই আপনার এপিআই রান করবে এবং কাজ শেষে স্লিপ মোডে চলে যাবে। এতে কোনো রিসোর্স অপচয় হয় না। এই গাইডে আমরা একটি রিয়াল-ওয়ার্ল্ড ক্লাউড ডেপ্লয়মেন্ট কনফিগারেশন দেখবো।

১. এপিআই রাউটার স্ট্রাকচার তৈরি (`api/index.py`)

ভার্সেলে পাইথন রান করানোর জন্য মেইন প্রজেক্ট ফোল্ডারের ভেতর অবশ্যই api নামে একটি সাব-ফোল্ডার করতে হবে এবং তার ভেতর ফাইলটির নাম দিতে হবে index.py:

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/api/v1/status', methods=['GET'])
def get_system_status():
    payload = {
        "status": "operational",
        "gateway": "Vercel Serverless Edge",
        "security_check": "passed",
        "developer": "Md. Abdullah"
    }
    return jsonify(payload), 200

# সার্ভারলেস রানটাইমের জন্য মেইন ব্লকে অ্যাপ ডিফাইন করা
if __name__ == '__main__':
    app.run(debug=True)

ধাপ ২: সার্ভারলেস রাউটিং রুলস কনফিগারেশন (`vercel.json`)

আপনার প্রোজেক্টের রুট ডিরেক্টরিতে (মেইন ফোল্ডারে) এই কনফিগারেশন ফাইলটি তৈরি করুন। এটি ভার্সেল কম্পাইলারকে পাইথন রানটাইম বিল্ড করতে এবং সমস্ত রিকোয়েস্ট আপনার ফ্লাস্ক অ্যাপে রিডাইরেক্ট করতে নির্দেশ দেয়:

{
  "rewrites": [
    { "source": "/(.*)", "destination": "/api/index" }
  ],
  "functions": {
    "api/*.py": {
      "runtime": "vercel-python@3.9"
    }
  }
}

ধাপ ৩: ডিপেন্ডেন্সি ফাইল (`requirements.txt`)

রুট ডিরেক্টরিতে নিচের ফাইলটি যুক্ত করুন যাতে রানটাইম ইঞ্জিন ফ্লাস্ক ফ্রেমওয়ার্ক ইনস্টল করে নেয়:

Flask==3.0.2

ধাপ ৪: গিটহাবের মাধ্যমে ওয়ান-ক্লিক ডেপ্লয়মেন্ট

আপনার পুরো ডিরেক্টরি স্ট্রাকচারটি দেখতে এমন হবে:

  • api/index.py
  • vercel.json
  • requirements.txt

এখন এই পুরো প্রোজেক্টটি আপনার GitHub রিপোজিটরিতে পুশ করুন। এরপর Vercel Dashboard-এ গিয়ে "Import Project" অপশন থেকে আপনার গিটহাবের এই রিপোজিটরি সিলেক্ট করে দিন। কোনো এক্সট্রা সেটিংস ছাড়াই Vercel স্বয়ংক্রিয়ভাবে পাইথন ক্লাউড লজিক বিল্ড করে আপনাকে একটি লাইভ .vercel.app সাবডোমেইন ইউআরএল দিয়ে দেবে!

ক্রিটিক্যাল আর্কিটেকচার নোট: মনে রাখবেন, সার্ভারলেস ফাংশনে কোনো গ্লোবাল ভ্যারিয়েবল বা লোকাল ফাইলে ডেটা ইন-মেমোরি সেভ (যেমন- লোকাল অ্যারেতে ডেটা পুশ করা) করে রাখা যায় না। কারণ প্রতিবার রিকোয়েস্ট শেষে কন্টেইনারটি ধ্বংস হয়ে যায়। তাই স্থায়ীভাবে ডেটা রাখতে আপনার এপিআই-এর সাথে MongoDB Atlas কিংবা কোনো ক্লাউড ডাটাবেজ ব্যাকএন্ড লিঙ্ক করতে হবে।