E2B SDK(Java 与 Go)

更新时间:
复制 MD 格式

E2B 官方目前只提供 Python 和 TypeScript SDK。为了方便 Java 和 Go 开发者接入云沙箱,阿里云函数计算团队在以下仓库维护了兼容 E2B 数据面协议的 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-beijingcn-shanghaicn-hangzhoucn-shenzhencn-hongkongap-southeast-1us-east-1us-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 -DskipTests

Maven 项目添加以下依赖:

<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.sdkSandbox 入口类。
dev.e2b.sdk.clientConnectionConfig 等连接配置。
dev.e2b.sdk.modelCommandResult 等数据模型。

创建并运行 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 清单