Beam 类型脚本/ Java 脚本 SDK
官方TypeScript和JavaScript SDK为Beam发行.
安装
npm install @beamcloud/beam-js
yarn add @beamcloud/beam-js
配置
拨打SDK电话前先设定您的Beam标志和工作空间ID.
import { beamOpts } from "@beamcloud/beam-js";
beamOpts.token = process.env.BEAM_TOKEN!;
beamOpts.workspaceId = process.env.BEAM_WORKSPACE_ID!;
SDK默认目标是"Beam Cloud".
虚拟机
创建持久的 Linux VM, 运行命令, 抓取其根并叉出它 :
import { beamOpts, VM } from "@beamcloud/beam-js";
beamOpts.token = process.env.BEAM_TOKEN!;
const vm = await VM.create({
name: "agent-workspace",
cpu: 1,
memory: "2Gi",
protectedPorts: [7681],
idleTimeout: 300,
idleAction: "pause",
autoResume: true,
});
console.log(vm.publicIpv6); // Persistent IPv6 address, when public networking is enabled.
const command = await vm.exec(["node", "--version"]);
await command.wait();
console.log(await command.stdout.read());
const snapshot = await vm.snapshots.create("ready");
const branch = await snapshot.fork({ name: "experiment", memory: "512Mi" });
await branch.remove();
await snapshot.delete();
await vm.pause();
await vm.close();
// Later: await VM.connect(vm.id); to delete: await vm.remove().
VMs 默认为消化固定的 Ubuntu 24.04, 4 个CPU, 8 个 GiB 内存和一个 50 个 GiB
可写根. 桌面是选入( T)desktop: true,最小值 1 GiB 内存;多克
需求 dockerEnabled: true。创建等待来宾命令。 使用
await vm.wait({ services: true }) sSH、终端和启用的桌面;
多克帮手分别等待守护进程.
一个 VM 对象曝光生命周期、快照/模板、文件、多克、桌面
控制,私人隧道,SSH/SCP,目录同步,提示,日志和公制.
见 VM 引导并完成 API/ 均等映射。 。 。 .
关于带有清理功能的可运行的 JavaScript 工作流程,参见
代理工作空间示例。 。 。 .
沙盒快速启动
创建沙盒,运行代码,流日志,并清洁地终止.
import { beamOpts, Image, Sandbox } from "@beamcloud/beam-js";
beamOpts.token = process.env.BEAM_TOKEN!;
beamOpts.workspaceId = process.env.BEAM_WORKSPACE_ID!;
async function main() {
const sandbox = new Sandbox({
name: "examples",
image: new Image({ pythonPackages: ["requests"] }),
cpu: 1,
memory: 1024,
keepWarmSeconds: 300,
});
const sb = await sandbox.create();
const result = await sb.runCode(`
import requests
print(requests.get("https://api.github.com").status_code)
`);
console.log(result);
const process = await sb.exec(["python3", "-c", "print('hello from Beam')"]);
for await (const line of process.logs) {
console.log(line.trimEnd());
}
await sb.terminate();
}
main().catch((err) => {
console.error(err);
process.exit(1);
});
name 是用于组合沙盒的Beam应用名称。 每个正在运行的沙盒仍然会得到它自己生成的沙盒ID.
显示一个端口
const server = await sb.execShell("python3 -m http.server 8888 --bind 0.0.0.0");
const url = await sb.exposePort(8888);
console.log(url);
await server.kill();
文件系统
await sb.fs.writeText("/tmp/hello.txt", "hello");
console.log(await sb.fs.readText("/tmp/hello.txt"));
await sb.fs.mkdir("/tmp/data");
await sb.fs.uploadFile("./local.txt", "/tmp/data/local.txt");
console.log(await sb.fs.list("/tmp/data"));
await sb.fs.remove("/tmp/data/local.txt");
抓图
const checkpointId = await sb.snapshot();
await sb.terminate();
const restored = await Sandbox.createFromSnapshot(checkpointId);
console.log(restored.sandboxId);
夹克
在图像中安装 Docker 并明确启用管理的守护进程 :
const sandbox = new Sandbox({
name: "docker-actions",
image: Image.fromRegistry("node:20-slim").withDocker(),
dockerEnabled: true,
cpu: 2,
memory: "2Gi",
keepWarmSeconds: 300,
});
const sb = await sandbox.create();
try {
const ready = await sb.exec([
"timeout", "60", "sh", "-c",
"until docker info >/dev/null 2>&1; do sleep 1; done",
]);
if (await ready.wait() !== 0) throw new Error("Docker daemon did not become ready");
const proc = await sb.exec([
"docker", "run", "--rm", "--network=host", "--pid=host",
"alpine:3.20", "echo", "hello",
], { wait: true });
if (await proc.wait() !== 0) throw new Error(await proc.stderr.read());
console.log(await proc.stdout.read());
} finally {
await sb.terminate();
}
withDocker() 支持Ubuntu和Debian图像并安装多克引擎,
CLI, Buildx, (英语), docker compose,则 docker-compose 别名。 其他基础图像
必须提供自己的多克安装。 没有安装主机 Docker 套接字 .
通过 Docker 命令运行 sb.exec 或者说 sb.execShell; 一个单独的 Python 风格
sb.docker 不需要包装。 守护进程同步启动: 等待
docker info 在签发建造或运行集装箱之前成功.
被管理的守护进程使用 VFS 存储,在 runc/g Visor 下没有默认桥.
使用 --network=host --pid=host 用于内容器; 这些共享沙盒的
名字空间,不是工人机器的。 对于编曲,配置每个服务
network_mode: host 财务报告和审定财务报表 pid: host启用 docker compose -f /path/compose.yaml up
财务报告和审定财务报表 down 结束 exec; 编译文件不自动重写.
以 docker build --network=host -t my-image /path/to/context; 否则
粘贴文件 RUN 指令失败 network bridge not found,即使当
指令不访问网络.
卷和云桶
import { CloudBucket, Volume } from "@beamcloud/beam-js";
const volume = new Volume("cache", "/mnt/cache");
const bucket = new CloudBucket("my-bucket", "/mnt/bucket", {
accessKey: "AWS_ACCESS_KEY_ID",
secretKey: "AWS_SECRET_ACCESS_KEY",
region: "us-east-1",
});
const sandbox = new Sandbox({
name: "storage",
volumes: [volume, bucket],
});
发展
将 SDK 指向本地网关:
beamOpts.gatewayUrl = "http://localhost:1993";