E2B 官方目前只提供 Python 和 TypeScript SDK。为了方便 Java 和 Go 开发者接入云沙箱,阿里云函数计算团队在以下仓库维护了兼容 E2B 数据面协议的 SDK:
Java SDK:aliyun-fc/e2b-java-sdk
Go SDK:aliyun-fc/e2b-go-sdk
本文先说明两个 SDK 共用的连接配置,再分别提供 Java 和 Go 快速入门。具体接口、参数名称和默认值以对应仓库的源码和类型定义为准。
前置条件与通用连接配置
已拥有阿里云账号,并具备函数计算相关操作权限。
已在函数计算控制台创建 API Key。
已确认目标地域支持云沙箱,并且本机网络可访问该地域的服务端点。
通过环境变量传入 API Key、API URL 和域名,不要在代码中硬编码:
export E2B_API_KEY="<your-api-key>"
export E2B_API_URL="https://api.<region>.e2b.fc.aliyuncs.com"
export E2B_DOMAIN="<region>.e2b.fc.aliyuncs.com"将 <region> 替换为云沙箱所在地域。当前支持 cn-beijing、cn-shanghai、cn-hangzhou、cn-shenzhen、cn-hongkong、ap-southeast-1、us-east-1 和 us-west-1。API URL、域名、模板和 Sandbox 必须属于同一地域。
Java SDK
可用状态与安装方式
Java SDK 目前以源码形式提供。版本 2.1.0 尚未发布到 Maven Central 或其他公共 Maven 仓库,需要先克隆仓库并安装到本地 Maven 仓库:
git clone https://github.com/aliyun-fc/e2b-java-sdk.git
cd e2b-java-sdk
mvn clean install -DskipTestsMaven 项目添加以下依赖:
<dependency>
<groupId>com.alibaba.serverless</groupId>
<artifactId>e2b-java-sdk</artifactId>
<version>2.1.0</version>
</dependency>Gradle 项目需要先启用本地 Maven 仓库,再添加依赖:
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
implementation 'com.alibaba.serverless:e2b-java-sdk:2.1.0'
}SDK 要求 Java 8 或更高版本,主要包如下:
| 包 | 说明 |
dev.e2b.sdk | Sandbox 入口类。 |
dev.e2b.sdk.client | ConnectionConfig 等连接配置。 |
dev.e2b.sdk.model | CommandResult 等数据模型。 |
创建并运行 Sandbox
import dev.e2b.sdk.Sandbox;
import dev.e2b.sdk.client.ConnectionConfig;
import dev.e2b.sdk.model.CommandResult;
public class Quickstart {
public static void main(String[] args) throws Exception {
ConnectionConfig config = ConnectionConfig.builder()
.apiKey(System.getenv("E2B_API_KEY"))
.apiUrl(System.getenv("E2B_API_URL"))
.domain(System.getenv("E2B_DOMAIN"))
.build();
try (Sandbox sandbox = Sandbox.create("code-interpreter-v1", config)) {
CommandResult result = sandbox.getCommands().run(
"python3 -c \"print('hello from sandbox')\""
);
System.out.println(result.getStdout().trim());
}
}
}Sandbox 实现了 AutoCloseable。退出 try 块时会调用 kill() 并释放 Sandbox。如需更细粒度的生命周期控制,请显式设置 Sandbox 超时时间,并在任务完成后调用 sandbox.kill()。
Go SDK
可用状态与安装方式
Go SDK 目前以源码形式提供,要求 Go 1.22 或更高版本。其 go.mod 仍声明旧模块路径 github.com/e2b-dev/e2b-go-sdk,但该路径已无法获取。请将 SDK 克隆到 Go 项目的同级目录,并将旧模块路径替换为本地目录。
以下命令假设 Go 项目位于 myapp/:
# 在包含 myapp/ 的目录中执行。
git clone https://github.com/aliyun-fc/e2b-go-sdk.git
cd myapp
go mod init myapp # 如果已有 go.mod,请跳过此命令。
go mod edit -replace=github.com/e2b-dev/e2b-go-sdk=../e2b-go-sdk导入时继续使用旧模块路径,使其与 SDK 当前的 go.mod 声明一致:
import e2b "github.com/e2b-dev/e2b-go-sdk"创建并运行 Sandbox
将以下示例保存为 main.go:
package main
import (
"context"
"fmt"
"log"
"os"
"strings"
"time"
e2b "github.com/e2b-dev/e2b-go-sdk"
)
func main() {
ctx := context.Background()
client, err := e2b.NewClient(
e2b.WithAPIKey(os.Getenv("E2B_API_KEY")),
e2b.WithAPIURL(os.Getenv("E2B_API_URL")),
e2b.WithDomain(os.Getenv("E2B_DOMAIN")),
)
if err != nil {
log.Fatal(err)
}
sandbox, err := client.CreateSandbox(
ctx,
e2b.WithTemplate("code-interpreter-v1"),
e2b.WithTimeout(900),
)
if err != nil {
log.Fatal(err)
}
defer sandbox.Kill(context.Background())
result, err := sandbox.Commands.Run(
ctx,
"python3 -c \"print('hello from sandbox')\"",
e2b.WithCommandTimeout(60*time.Second),
)
if err != nil {
log.Fatal(err)
}
fmt.Println(strings.TrimSpace(result.Stdout))
}解析本地替换并运行示例:
go mod tidy
go run .defer sandbox.Kill(...) 会在函数退出时释放 Sandbox。生产代码应显式设置超时时间,并在任务完成后释放 Sandbox。
相关文档
两个 SDK 均实现 E2B 数据面协议,但接口和默认值与 Python、TypeScript SDK 不完全相同。接入前请查看对应 SDK 仓库的版本说明。
完整能力边界参见 E2B SDK 兼容 API 清单。