এই গাইড আপনাকে শূন্য থেকে Python-এ চলমান একটি স্যান্ডবক্স পর্যন্ত নিয়ে যাবে। আপনি একটি বিচ্ছিন্ন Firecracker microVM চালু করবেন, তাতে কোড চালাবেন, একটি প্যাকেজ ইনস্টল করবেন, একটি ফাইল ভেতরে পাঠিয়ে আবার বের করবেন এবং লম্বা কোনো কাজ ব্যাকগ্রাউন্ডে চালাবেন। প্রতিটি ধাপ মাত্র কয়েক লাইন, শুধু পেস্ট করলেই হবে।
আপনার লাগবে Python 3.8 বা নতুন এবং একটি EQVPS অ্যাকাউন্ট। SDK-এর কোনো ডিপেন্ডেন্সি নেই।
১. টোকেন নিন
স্যান্ডবক্সের খরচ অ্যাকাউন্টের ব্যালেন্স থেকে কাটা হয়, তাই SDK-এর অ্যাকাউন্ট টোকেন দরকার। অ্যাকাউন্ট সংযোগ পাতায় টোকেন পাওয়ার তিনটি উপায় আছে: ড্যাশবোর্ড, API বা MCP সার্ভার। তারপর এটি এনভায়রনমেন্টে রাখুন:
export EQVPS_API_KEY="your-token"
এখনো ব্যালেন্স নেই? সমস্যা নেই। নতুন অ্যাকাউন্ট যথেষ্ট ব্যালেন্স ছাড়া প্রথমবার স্যান্ডবক্স তৈরি করলে ১৪ দিন মেয়াদি $1 স্যান্ডবক্স ক্রেডিট পায়।
২. SDK ইনস্টল করুন
pip install eqvps
৩. স্যান্ডবক্স চালু করুন এবং কোড চালান
এটি hello.py নামে সেভ করে চালান:
from eqvps import Sandbox
with Sandbox.create(tariff="small") as sb:
print(sb.id)
r = sb.run("import platform; print(platform.python_version())")
print(r.exit_code, r.stdout)
আপনি স্যান্ডবক্সের id (sb_ আর আরও ২৪টি অক্ষর) দেখবেন, তারপর 0 3.12.x। স্যান্ডবক্স প্রায় এক সেকেন্ডে চালু হয়েছে, কোড চালিয়েছে, আর with ব্লক শেষ হতেই মুছে গেছে।
ফলাফল নিয়ে যা জানা দরকার:
- এক্সিট কোড 0 হলে এবং কমান্ড টাইমআউটে না পৌঁছালে
r.oktrue হয়; - শূন্য নয় এমন এক্সিট কোড exception নয়, তাই
r.okনিজে পরীক্ষা করুন; stdoutওstderrপ্রতিটি 1 MiB পর্যন্ত সীমিত, আর আউটপুট কাটা পড়েছে কি না তাr.truncatedজানায়।
৪. প্যাকেজ ইনস্টল করুন এবং shell কমান্ড চালান
স্যান্ডবক্সের ভেতরে আপনি Python, Node.js, git ও curl থাকা একটি ছোট Linux সিস্টেমের root। exec যেকোনো shell কমান্ড চালায়:
from eqvps import Sandbox
with Sandbox.create(tariff="small") as sb:
sb.exec("pip install --quiet requests", timeout=55)
r = sb.run("import requests; print(requests.get('https://example.com').status_code)")
print(r.stdout) # 200
ডিফল্ট টাইমআউট ৩০ সেকেন্ড, আর একটি সিনক্রোনাস কল সর্বোচ্চ ৫৫ সেকেন্ড চলে। বড় ইনস্টলেশন ব্যাকগ্রাউন্ড টাস্কে চালান (ধাপ ৬)।
৫. ফাইল ভেতরে-বাইরে পাঠান
from eqvps import Sandbox
with Sandbox.create() as sb:
sb.upload("/root/data.csv", "a,b\n1,2\n3,4\n")
sb.run("""
import csv
rows = list(csv.DictReader(open('/root/data.csv')))
open('/root/sum.txt', 'w').write(str(sum(int(r['b']) for r in rows)))
""")
print(sb.download_text("/root/sum.txt")) # 6
পাথ অবশ্যই পূর্ণাঙ্গ (absolute) হতে হবে। একবারের ট্রান্সফার 5 MB পর্যন্ত; download বাইট ফেরত দেয়, download_text স্ট্রিং।
৬. লম্বা কাজ ব্যাকগ্রাউন্ডে চালান
background=True দিলে অপেক্ষার বদলে সঙ্গে সঙ্গে একটি টাস্ক পাবেন। এতে ৫৫ সেকেন্ডের সীমা নেই:
from eqvps import Sandbox
with Sandbox.create(tariff="standard") as sb:
task = sb.exec("for i in 1 2 3 4 5; do echo step $i; sleep 20; done", background=True)
result = task.wait(on_output=lambda out, err: print(out, end=""))
print(result.state, result.exit_code) # done 0
task.wait() প্রতি ২ সেকেন্ডে খোঁজ নেয় এবং নতুন আউটপুট আসামাত্র দেখায়। আপনি নিজেও task.logs() ডাকতে পারেন, বা থামাতে task.kill()। টাস্ক চলতে থাকলে নিষ্ক্রিয়তার কারণে স্যান্ডবক্স মুছে যায় না।
খরচ কত হলো
ওপরের প্রতিটি with ব্লক কয়েক সেকেন্ড ছিল এবং সর্বনিম্ন ৬০ সেকেন্ড হিসেবে বিল হয়েছে। small-এ প্রতি ব্লক $0.00055, তাই পাঁচটি উদাহরণ মিলিয়ে প্রায় এক সেন্টের তিন ভাগের এক ভাগ। সব ট্যারিফের দাম, স্থায়ী মোড ও খরচের সীমা আছে স্যান্ডবক্সের সীমা ও বিলিং-এ।
কিছু ভুল হলে
API-এর ত্রুটিগুলো এমন exception যা ধরা যায়:
from eqvps import Sandbox, InsufficientBalanceError, RateLimitError
try:
with Sandbox.create() as sb:
print(sb.run("print(1)").stdout)
except InsufficientBalanceError:
print("Top up the balance")
except RateLimitError as e:
print("Too many at once, retry in", e.retry_after)
সার্ভার কতক্ষণ অপেক্ষা করতে হবে জানালে SDK নিজেই 429 ও 503 উত্তর তিনবার পর্যন্ত আবার চেষ্টা করে। ১১টি ত্রুটি ক্লাসের সবগুলো আছে SDK রেফারেন্স-এ।
এরপর কী
- একই ধাপ JavaScript-এ: ৫ মিনিটে স্যান্ডবক্সের TypeScript SDK।
- AI মডেলকে কোড লিখতে দিন এবং এখানে চালান: স্যান্ডবক্সে আপনার প্রথম এজেন্ট টাস্ক।
- ট্যারিফ, ট্রায়াল ক্রেডিট আর স্যান্ডবক্সের ভেতরে কী আছে: স্যান্ডবক্স পাতা।
মন্তব্য
এখনো কোনো মন্তব্য নেই। প্রথম হোন।