−25%

Windows รายปี ถึง 31 ต.ค. ดูแพ็กเกจ

EQVPS
เริ่มต้นใช้งาน

Python SDK สำหรับแซนด์บ็อกซ์ใน 5 นาที: จาก pip install eqvps ถึงการรันครั้งแรก

ติดตั้ง Python SDK ของ EQVPS เปิดแซนด์บ็อกซ์ Firecracker รันโค้ด ติดตั้งแพ็กเกจ ย้ายไฟล์ และรันงานยาวในเบื้องหลัง หกขั้นตอนพร้อมทุกคำสั่ง และค่าใช้จ่ายทั้งหมดไม่ถึงหนึ่งเซนต์

คู่มือนี้พาคุณจากศูนย์ไปจนมีแซนด์บ็อกซ์ที่ใช้งานได้ด้วย 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

ขั้นต่อไป

คำถามที่พบบ่อย

ต้องใช้บัตรเครดิตเพื่อทดลองไหม

ไม่ต้อง บัญชีใหม่จะได้เครดิตแซนด์บ็อกซ์ $1 เมื่อสร้างแซนด์บ็อกซ์ครั้งแรกโดยยอดคงเหลือไม่พอ คู่มือนี้ทั้งหมดใช้ไปน้อยกว่าหนึ่งเซนต์มาก หลังจากนั้นคุณเติมยอดคงเหลือด้วยคริปโต

ติดตั้งแพ็กเกจด้วย pip ในแซนด์บ็อกซ์ได้ไหม

ได้ แซนด์บ็อกซ์เชื่อมต่ออินเทอร์เน็ตขาออกได้ และ pip ติดตั้งลงระบบโดยไม่ต้องใช้ virtualenv แพ็กเกจหนักอย่าง torch ต้องใช้ดิสก์และหน่วยความจำมากขึ้น จึงควรเลือกแพ็กเกจ plus หรือใหญ่กว่า

ทำไมคำสั่งของฉันหยุดหลัง 30 วินาที

timeout เริ่มต้นของ run และ exec คือ 30 วินาที และการเรียกแบบ synchronous นานสุดได้ 55 วินาที งานที่นานกว่านั้นให้รันด้วย background=True ซึ่งไม่มีขีดจำกัดนี้

ถ้าสคริปต์ของฉันพัง แซนด์บ็อกซ์จะถูกลบไหม

ถ้าใช้บล็อก with ใช่ แซนด์บ็อกซ์ถูกลบเมื่อบล็อกจบ แม้หลังเกิด exception ถ้าไม่ใช้ แซนด์บ็อกซ์ชั่วคราวจะถูกลบหลังไม่มีกิจกรรม 5 นาที และคุณต้องจ่ายค่าช่วงนั้นด้วย

ความคิดเห็น

ยังไม่มีความคิดเห็น เป็นคนแรกสิ

แสดงความคิดเห็น

ความคิดเห็นจะถูกตรวจสอบก่อนแสดง