Sandbox
MicroVM Linux terisolasi untuk kode yang dijalankan skrip dan agen AI Anda. Sandbox menyala dalam sekitar satu detik, menjalankan Python, Node.js, atau bash, dan ditagih per detik dari saldo yang sama dengan server Anda.
Apa itu sandbox
Mesin Linux kecil yang Anda buat lewat API atau MCP, dipakai beberapa detik atau beberapa hari, lalu dihapus. Internet keluar berfungsi (pip install, npm install, git clone). Tidak ada port masuk dan tidak ada SSH: perintah dan file lewat API. Di dalamnya: Python 3.12 dengan pip, Node.js 22 dengan npm, bash, git, dan curl.
Dua mode
Tarif
| Tarif | vCPU | RAM | Disk | Jaringan | Per jam | Persisten, maks. per bulan |
|---|---|---|---|---|---|---|
| micro | 0.25 | 512 MB | 3 GB | 50 Mbit/s | $0.0165 | $9.03 |
| small | 0.5 | 1 GB | 5 GB | 100 Mbit/s | $0.033 | $18.07 |
| standard | 1 | 2 GB | 10 GB | 200 Mbit/s | $0.066 | $36.14 |
| plus | 2 | 4 GB | 15 GB | 300 Mbit/s | $0.132 | $72.27 |
| pro | 4 | 8 GB | 20 GB | 400 Mbit/s | $0.264 | $144.54 |
| max | 8 | 16 GB | 40 GB | 500 Mbit/s | $0.528 | $289.08 |
Anda membayar vCPU dan RAM dari tarif yang dipilih: $0.040 per vCPU-jam dan $0.013 per GiB-jam. Harga terkini tanpa token: GET /sandboxes/tariffs.
Batas yang perlu diketahui
Satu perintah berjalan hingga 55 detik; pekerjaan yang lebih lama berjalan sebagai tugas latar yang hasilnya Anda tanyakan. File hingga 5 MB per permintaan, yang lebih besar (hingga 2 GB) lewat tautan unduh dan unggah sekali pakai. Satu akun bisa menjalankan hingga 20 sandbox dan 2 perintah sekaligus.
Variabel lingkungan
Kirim rahasia dan pengaturan sebagai env. Jika diatur saat membuat, berlaku untuk setiap perintah di sandbox; jika diatur di exec atau run, hanya berlaku untuk panggilan itu dan menimpa nilai sandbox. Hingga 64 variabel, 32 KB per nilai, dan total 64 KB. Nilai disimpan terenkripsi, tidak pernah dikembalikan oleh API, dan tidak ditulis ke log: respons hanya menampilkan nama (env_keys).
API=https://api.eqvps.com/api/v1/eqvps
AUTH="Authorization: Bearer $EQVPS_API_KEY"
# env for the whole sandbox (only the names come back, as env_keys)
SB=$(curl -s -X POST $API/sandboxes -H "$AUTH" -H "Content-Type: application/json" \
-d '{"tariff":"small","env":{"DB_URL":"postgres://user:pass@db/app","MODE":"test"}}' | jq -r .id)
# env for one call, merged over the sandbox env
curl -s -X POST $API/sandboxes/$SB/exec -H "$AUTH" -H "Content-Type: application/json" \
-d '{"command":"echo $MODE $RUN_ID","env":{"RUN_ID":"42"}}'Batas pengeluaran
Secara bawaan sandbox tidak memiliki batas pengeluaran. Anda bisa menetapkan batas harian dan bulanan di dasbor atau dengan PUT /sandboxes/budget. Saat batas tercapai, sandbox baru mendapat 429 budget_exceeded, sandbox sementara yang berjalan dihapus, dan sandbox permanen dijeda dengan disk tetap tersimpan. Semuanya berlanjut saat Anda menaikkan batas atau hari atau bulan baru dimulai (UTC).
# daily cap $5, monthly cap $50 (null = no cap)
curl -s -X PUT $API/sandboxes/budget -H "$AUTH" -H "Content-Type: application/json" \
-d '{"daily_usd":5,"monthly_usd":50}'
# spent today / this month and when the caps reset (UTC)
curl -s $API/sandboxes/budget -H "$AUTH"Mulai cepat: MCP (Claude Code, Cursor, dan klien lain)
Hubungkan server MCP sekali, lalu minta agen dengan kata-kata Anda sendiri. Alat sandbox: create_sandbox, run_code, exec_command, get_task, kill_task, get_upload_url, get_download_url, list_sandboxes, get_sandbox, kill_sandbox, sandbox_pricing.
claude mcp add --transport http eqvps https://mcp.eqvps.com/mcp \
--header "Authorization: Bearer $EQVPS_API_KEY"Buat sandbox kecil, jalankan print(2 + 2) di Python, tunjukkan hasilnya, lalu hapus sandbox-nya.Mulai cepat: REST dari Python dan Node.js
Tidak perlu paket tambahan. Taruh token Anda di variabel lingkungan EQVPS_API_KEY (cara mendapatkannya ada di “Menghubungkan akun”).
# first_sandbox.py — Python 3.8+, standard library only
import json, os, urllib.request
API = "https://api.eqvps.com/api/v1/eqvps"
KEY = os.environ["EQVPS_API_KEY"]
def call(method, path, body=None):
req = urllib.request.Request(API + path, method=method,
data=json.dumps(body).encode() if body is not None else None,
headers={"Authorization": "Bearer " + KEY,
"Content-Type": "application/json", "Accept": "application/json"})
with urllib.request.urlopen(req, timeout=90) as r: # HTTPError on 401/402/…
return json.loads(r.read() or b"{}")
sb = call("POST", "/sandboxes", {"tariff": "small"})
try:
r = call("POST", f"/sandboxes/{sb['id']}/run",
{"language": "python", "code": "print(2 + 2)"})
print(r["exit_code"], r["stdout"]) # 0 4
finally:
call("DELETE", f"/sandboxes/{sb['id']}")// first_sandbox.mjs — Node.js 18+ (built-in fetch), run: node first_sandbox.mjs
const API = "https://api.eqvps.com/api/v1/eqvps";
const KEY = process.env.EQVPS_API_KEY;
async function call(method, path, body) {
const r = await fetch(API + path, {
method,
headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json", Accept: "application/json" },
body: body ? JSON.stringify(body) : undefined,
});
const data = await r.json();
if (!r.ok) throw new Error(`${r.status} ${data.error ?? ""} ${data.message ?? ""}`);
return data;
}
const sb = await call("POST", "/sandboxes", { tariff: "small" });
try {
const r = await call("POST", `/sandboxes/${sb.id}/run`, { language: "node", code: "console.log(2 + 2)" });
console.log(r.exit_code, r.stdout); // 0 4
} finally {
await call("DELETE", `/sandboxes/${sb.id}`);
}SDK untuk Python dan TypeScript
Lebih suka library? Paket Python dan TypeScript melakukan panggilan REST yang sama, mengulang 429 dan 503 sendiri, dan selalu menghapus sandbox saat blok selesai. Instalasi dan contoh:
# pip install -U eqvps https://pypi.org/project/eqvps/ (0.2.0+ for env)
# "eqvps sandbox create" = Sandbox.create() here · create_sandbox in MCP · POST /sandboxes in REST (no CLI)
from eqvps import Sandbox
# EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
with Sandbox.create(tariff="small", env={"DB_URL": "postgres://user:pass@db/app"}) as sb:
r = sb.run("print(2 + 2)")
print(r.stdout, r.exit_code) # "4\n" 0
sb.upload("/root/data.csv", "a,b\n1,2\n")
print(sb.exec("wc -l /root/data.csv").stdout)
print(sb.exec("echo $RUN_ID", env={"RUN_ID": "42"}).stdout) # env for one call
# the sandbox is deleted when the block exits, also on errors// npm i @eqvps/sdk@latest https://www.npmjs.com/package/@eqvps/sdk (0.2.0+ for env)
import { Sandbox } from "@eqvps/sdk";
// EQVPS_API_KEY from the environment; env = secrets for your code, stored encrypted
await Sandbox.with({ tariff: "small", env: { DB_URL: "postgres://user:pass@db/app" } }, async (sb) => {
const r = await sb.run("print(2 + 2)");
console.log(r.stdout, r.exit_code); // "4\n" 0
console.log((await sb.exec("echo $RUN_ID", { env: { RUN_ID: "42" } })).stdout); // env for one call
}); // deleted afterwards, also on errorsMenghubungkan akun: token, konfigurasi, sandbox pertama, saldo →
Komentar
Belum ada komentar. Jadilah yang pertama.