คู่มือนี้พาคุณจากศูนย์ไปจนมีแซนด์บ็อกซ์ที่ใช้งานได้ด้วย Python คุณจะเปิด microVM ของ Firecracker ที่แยกขาด รันโค้ดในนั้น ติดตั้งแพ็กเกจ ย้ายไฟล์เข้าออก และรันงานที่ใช้เวลานานในเบื้องหลัง แต่ละขั้นตอนมีแค่ไม่กี่บรรทัดให้วางได้ทันที
คุณต้องมี Python 3.8 ขึ้นไปและบัญชี EQVPS SDK ไม่มี dependency ใด ๆ
1. รับโทเค็น
แซนด์บ็อกซ์จ่ายจากยอดคงเหลือของบัญชี SDK จึงต้องใช้โทเค็นบัญชี หน้า เชื่อมต่อบัญชี แสดงสามวิธีในการรับโทเค็น: แดชบอร์ด, API หรือเซิร์ฟเวอร์ MCP จากนั้นใส่ไว้ในตัวแปรสภาพแวดล้อม:
export EQVPS_API_KEY="your-token"
ยังไม่มียอดคงเหลือใช่ไหม ไม่เป็นไร เมื่อบัญชีใหม่สร้างแซนด์บ็อกซ์ครั้งแรกโดยยอดคงเหลือไม่พอ จะได้เครดิตแซนด์บ็อกซ์ $1 ที่ใช้ได้ 14 วัน
2. ติดตั้ง SDK
pip install eqvps
3. เปิดแซนด์บ็อกซ์และรันโค้ด
บันทึกไฟล์นี้เป็น 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_ ตามด้วยอักขระอีก 24 ตัว) แล้วตามด้วย 0 3.12.x แซนด์บ็อกซ์เริ่มทำงานในราว 1 วินาที รันโค้ด และถูกลบเมื่อบล็อก with จบ
สิ่งที่ควรรู้เกี่ยวกับผลลัพธ์:
r.okเป็น true เมื่อ exit code เป็น 0 และคำสั่งไม่ถึง timeout- exit code ที่ไม่ใช่ศูนย์ ไม่ใช่ exception คุณจึงต้องตรวจ
r.okเอง stdoutและstderrจำกัดที่ 1 MiB ต่อช่อง และr.truncatedบอกว่าเอาต์พุตถูกตัดหรือไม่
4. ติดตั้งแพ็กเกจและรันคำสั่ง shell
ในแซนด์บ็อกซ์ คุณเป็น root บนระบบ Linux ขนาดเล็กที่มี Python, Node.js, git และ curl 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
timeout เริ่มต้นคือ 30 วินาที และการเรียกแบบ synchronous ทำงานได้นานสุด 55 วินาที การติดตั้งขนาดใหญ่ควรอยู่ในงานเบื้องหลัง (ขั้นตอนที่ 6)
5. ย้ายไฟล์เข้าและออก
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
พาธต้องเป็นแบบสัมบูรณ์ การโอนแต่ละครั้งจำกัดที่ 5 MB download คืนค่าเป็นไบต์ ส่วน download_text คืนค่าเป็นสตริง
6. รันงานยาวในเบื้องหลัง
ส่ง background=True แล้วคุณจะได้งานกลับมาทันทีโดยไม่ต้องรอ งานนี้ไม่มีขีดจำกัด 55 วินาที:
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() ตรวจทุก 2 วินาทีและพิมพ์เอาต์พุตใหม่ทันทีที่มาถึง คุณยังเรียก task.logs() เองได้ หรือใช้ task.kill() เพื่อหยุดงาน ระหว่างที่งานยังรันอยู่ แซนด์บ็อกซ์จะไม่ถูกลบเพราะไม่มีกิจกรรม
ใช้ไปเท่าไร
บล็อก with แต่ละบล็อกข้างบนมีอายุไม่กี่วินาทีและถูกคิดเงินขั้นต่ำ 60 วินาที บน small เท่ากับ $0.00055 ต่อบล็อก ตัวอย่างทั้งห้ารวมกันจึงราวหนึ่งในสามเซนต์ ราคาของทุกแพ็กเกจ โหมดถาวร และขีดจำกัดการใช้จ่ายอยู่ใน ขีดจำกัดและการคิดเงินของ sandbox
เมื่อมีบางอย่างผิดพลาด
ข้อผิดพลาดจาก 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 ซ้ำเองสูงสุดสามครั้งเมื่อเซิร์ฟเวอร์บอกว่าต้องรอนานเท่าไร คลาสข้อผิดพลาดทั้ง 11 คลาสอยู่ใน คู่มือ SDK
ขั้นต่อไป
- ขั้นตอนเดียวกันด้วย JavaScript: TypeScript SDK สำหรับแซนด์บ็อกซ์ใน 5 นาที
- ให้โมเดล AI เขียนโค้ดแล้วรันที่นี่: งานแรกของเอเจนต์ในแซนด์บ็อกซ์
- แพ็กเกจ เครดิตทดลอง และสิ่งที่อยู่ในแซนด์บ็อกซ์: หน้าแซนด์บ็อกซ์
ความคิดเห็น
ยังไม่มีความคิดเห็น เป็นคนแรกสิ