E2B 官方目前只提供 Python 和 TypeScript SDK。為了方便 Java 和 Go 開發人員接入雲沙箱,阿里雲Function Compute團隊在以下倉庫維護了相容 E2B 資料面協議的 SDK:
Java SDK:aliyun-fc/e2b-java-sdk
Go SDK:aliyun-fc/e2b-go-sdk
本文先說明兩個 SDK 共用的串連配置,再分別提供 Java 和 Go 快速入門。具體介面、參數名稱和預設值以對應倉庫的源碼和類型定義為準。
前置條件與通用串連配置
已擁有阿里雲帳號,並具備Function Compute相關操作許可權。
已在Function Compute控制台建立 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 清單。