ይህ መመሪያ ከJavaScript ወይም TypeScript sandbox ያሄዳል። የተገለለ የFirecracker microVM ያስነሳሉ፣ በሶስት ቋንቋዎች ኮድ ያሂዳሉ፣ ፋይሎችን ያስተላልፋሉ እና የረጅም ስራን ውጤት ይከታተላሉ። እያንዳንዱ ደረጃ አጭር የኮድ ቁራጭ ነው።
Node.js 18+ (ወይም Deno፣ ወይም Bun) እና የEQVPS መለያ ያስፈልግዎታል።
1. ቶከን ያግኙ
SDK በተራ የመለያ ቶከን ያረጋግጣል። ከዳሽቦርድ፣ ከAPI ወይም ከMCP አገልጋይ እንዴት እንደሚያገኙት በመለያዎን ማገናኘት ገጽ ላይ ተገልጿል።
export EQVPS_API_KEY="your-token"
ቀሪ ሒሳብ የሌለው አዲስ መለያ መጀመሪያ sandbox ሲፈጥር $1 የsandbox ክሬዲት ያገኛል። ይህ ለዚህ መመሪያ ብዙ ጊዜ ይበቃል።
2. SDKን ይጫኑ
npm i @eqvps/sdk
ምሳሌዎቹ የES ሞጁሎችን እና የላይኛው ደረጃ awaitን ይጠቀማሉ። እንደ .mjs ፋይሎች ያስቀምጧቸው፣ ወይም እንደ .ts አስቀምጠው በnpx tsx ያሂዷቸው።
3. sandbox ያስነሱ እና ኮድ ያሂዱ
import { Sandbox } from "@eqvps/sdk";
await Sandbox.with({ tariff: "small" }, async (sb) => {
console.log(sb.id);
const r = await sb.run("import platform; print(platform.python_version())");
console.log(r.exit_code, r.stdout);
});
ውጤቱ የsandbox መለያ (sb_ እና ተጨማሪ 24 ቁምፊዎች)፣ ከዚያም 0 3.12.x ነው። callbackኡ ሲያልቅ Sandbox.with sandboxን ይሰርዛል፣ ስህተት ቢጥልም።
ነባሪው ቋንቋ Python ነው። ሌሎቹ ሁለቱ አንድ አማራጭ ብቻ ይርቃሉ፦
await Sandbox.with({}, async (sb) => {
const js = await sb.run("console.log(process.version)", { language: "node" });
const sh = await sb.run("uname -r && nproc", { language: "bash" });
console.log(js.stdout, sh.stdout);
});
የሚወድቅ ስክሪፕት ምንም አይጥልም። r.okን ይፈትሹ፤ exit_code 0 ሲሆን እና ትዕዛዙ የጊዜ ገደቡ ላይ ካልደረሰ true ነው።
4. የshell ትዕዛዞች እና ጥቅሎች
exec የshell ሕብረቁምፊ ወይም የargv ድርድር ይቀበላል። sandbox የኢንተርኔት ግንኙነት ስላለው በnpm እና pip መጫን ይሰራል፦
await Sandbox.with({ tariff: "small" }, async (sb) => {
await sb.exec("mkdir -p /root/app && cd /root/app && npm init -y && npm i lodash", { timeout: 55 });
const r = await sb.exec(["node", "-e", "console.log(require('/root/app/node_modules/lodash').VERSION)"]);
console.log(r.stdout);
});
የተመሳሰለ ጥሪ ቢበዛ 55 ሰከንድ ይቆያል። ከዚህ የሚረዝም ማንኛውም ነገር ወደ ጀርባ ተግባር ይሄዳል (ደረጃ 6)።
5. ፋይሎች
await Sandbox.with({}, async (sb) => {
await sb.upload("/root/input.json", JSON.stringify({ values: [3, 5, 8] }));
await sb.run("import json; d = json.load(open('/root/input.json')); open('/root/out.txt', 'w').write(str(sum(d['values'])))");
console.log(await sb.downloadText("/root/out.txt")); // 16
});
upload ሕብረቁምፊ ወይም Uint8Array ይቀበላል። download Uint8Array፣ downloadText ደግሞ ሕብረቁምፊ ይመልሳል። አንድ ዝውውር በ5 MB የተገደበ ነው።
6. የቀጥታ ውጤት ያላቸው ረጅም ስራዎች
await Sandbox.with({ tariff: "standard" }, async (sb) => {
const task = await sb.exec("for i in 1 2 3 4 5; do echo step $i; sleep 20; done", { background: true });
const res = await task.wait({ onOutput: (out) => process.stdout.write(out) });
console.log(res.state, res.exit_code); // done 0
});
ተግባሩ ወዲያውኑ ይመለሳል እና የ55 ሰከንድ ገደብ የለውም። wait በነባሪ በየ2 ሰከንዱ ይፈትሻል (pollIntervalMs ይህን ይቀይራል)። task.kill() ያቆመዋል፤ sb.task(id) ከሌላ ሂደት እንደገና ይገናኛል።
ስህተቶች
import { Sandbox, InsufficientBalanceError, RateLimitError } from "@eqvps/sdk";
try {
await Sandbox.with({}, async (sb) => console.log((await sb.run("print(1)")).stdout));
} catch (e) {
if (e instanceof InsufficientBalanceError) console.log("Top up the balance");
else if (e instanceof RateLimitError) console.log("Busy, retry in", e.retryAfter);
else throw e;
}
አገልጋዩ Retry-After ሲልክ SDK 429 እና 503ን እስከ ሶስት ጊዜ በራሱ ደግሞ ይሞክራል። በጣም የተለመደው 429 የሚመጣው በአንድ መለያ ላይ ከሁለት በላይ ትዕዛዞችን በአንድ ጊዜ ሲያሄዱ ነው። ሁሉም ክፍሎች በየSDK ማጣቀሻ ውስጥ ናቸው።
የዚህ መመሪያ ወጪ
እያንዳንዱ ምሳሌ ጥቂት ሰከንዶች ቆይቶ በዝቅተኛው 60 ሰከንድ ተከፍሎበታል፦ በsmall $0.00055፣ በstandard $0.0011። የደረጃ 6 ስራ በstandard 100 ሰከንድ ገደማ ሮጦ $0.002 ገደማ ወጣ። ሁሉም በአንድ ላይ ከአንድ ሳንቲም በጣም ያነሰ ነው። ሙሉ የዋጋ ዝርዝሩ በየsandbox ገደቦች እና ክፍያ ውስጥ ነው።
ቀጣይ ደረጃዎች
- ተመሳሳዩ በPython፦ በ5 ደቂቃ ውስጥ ለsandbox የPython SDK።
- ሞዴል ያገናኙ እና የራሱን ኮድ እንዲያሄድ ይተዉት፦ በsandbox ውስጥ የመጀመሪያው የወኪል ተግባርዎ።
- ታሪፎች እና የ$1 ሙከራ፦ የsandbox ገጽ።
አስተያየቶች
እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።