Agent 时代的 Serverless 入口:veFaaS CLI 实战
英文标题:Agent 时代的 Serverless 入口:veFaaS CLI 实战
火山引擎 veFaaS CLI 面向开发者与 AI Agent,封装函数沙箱全生命周期操作,三步安装,适配 CI/CD 与自动化,搭配 IDE 插件,突破控制台限制,实现人机协同开发。
19.2 KB
26.4 KB
26.5 KB
24.8 KB
45.7 KB
40.7 KB
40.7 KB
82.6 KB
38.3 KB
32.8 KB
44.8 KB
19.3 KB
13.6 KB
13.6 KB
42.8 KB
29.6 KB
24.2 KB
47.8 KB
中文
如果你了解过火山引擎函数服务 veFaaS,就知道它就像一个“随叫随到”的代码运行环境 —— 既支持免运维、弹性计费地部署 Python/Golang/Node.js 等代码包,也支持通过自定义镜像搞定更复杂的环境依赖。
但今天我们要聊的不是“怎么用”,而是 AI Agent 来了之后,用法变了 。
Agent 的运行特点很直接:秒级拉起一个干净沙箱,跑代码、搜网页、调工具,然后销毁。veFaaS 的云沙箱能力恰好与这一模式天然匹配 —— 弹性伸缩与按需计费,对应的是 Agent 任务高频创建、短生命周期、用完即焚的运行节奏。在可信沙箱内,Agent 可以安全地完成各类工具调用,无需担心资源残留或环境冲突,每一次执行都是一次干净的“即用即走”。
问题在于调用方式——
过去,开发者管理函数服务主要依赖 Web 控制台或脚本。但当 AI Agent 介入开发、部署和运维流程时,传统控制台的交互方式并不友好:一个任务往往需要横跨多个页面,操作路径冗长且伴随学习成本,难以被 Agent 高效调用。
传统方式 vs Agent CLI
针对这个问题,火山引擎推出 veFaaS CLI ,它的解决思路是将函数与沙箱的部署、管理等操作封装为一套稳定、可复用的命令集。这套命令集不区分操作主体 —— 无论是开发者、AI Agent 还是 CI/CD 流水线,都能通过同一套命令完成 Serverless 服务的一站式生命周期管理。
它提供以下核心能力:
- 一键部署:
vefaas inspect自动检测项目类型,vefaas deploy一行实现从本地到线上服务的部署 - 运行可观测:
vefaas fn logs / invoke / revisions / instances上线后持续可见 - 配置管理:
vefaas fn config / scale / env / strategy管理函数配置、资源规格 - 文档即查:
vefaas doc search / doc api / doc sdk不离开终端 - 沙箱配置:
vefaas sandbox create / instance create / webshell创建沙箱、拉起实例、调试 - CI/CD 原生支持: 结构化输出、非交互模式,适配主流流水线
上手 veFaaS CLI,只需三步
第一步:安装 CLI
npx @volcengine/vefaas-cli@latest install
vefaas
或者和你的 Agent 对话:帮我通过 npx @volcengine/vefaas-cli@latest install 安装 vefaas cli 和对应技能
第二步:登录账号
安装完成后,登录方式分两种场景:
- 日常开发可以直接在浏览器登录火山引擎账号,通过 SSO 完成授权,随后执行部署、日志查询、文档检索等操作:
vefaas login --sso
vefaas whoami
2. 在脚本或 CI/CD 环境里,也可以通过 AK/SK 或 STS 等方式完成登录认证:
export VOLC_ACCESS_KEY_ID="<AK>"
export VOLC_SECRET_ACCESS_KEY="<SK>"
vefaas login --check
第三步:开始使用
登录之后,可以直接和 Agent 对话,了解 veFaaS CLI 的能力范围:看一下 veFaaS CLI 能做什么,帮我简短总结一下。
我看的是本机 vefaas 的 CLI help。它主要能做这些:
应用部署:init / link / deploy / domains / app,把本地项目部署成 veFaaS 应用,查看访问地址、发布记录、部署日志。
函数管理:fn list/create/info/release/rollback/logs/invoke/pull/push,管理函数、版本、实例、日志、调用测试、代码拉取推送。
沙箱管理:sandbox,管理沙箱应用、实例、镜像、发布、回滚、日志、WebShell。
配置与环境变量:config / env,改内存、CPU、超时、端口、启动命令、构建命令、环境变量等。
网关和触发器:gateway / trigger,管理 APIG 网关、路由,以及 Timer/Kafka/RocketMQ/BMQ/TLS 等触发器。
排查与底层能力:doctor / whoami / overview / resource / api,诊断本地和鉴权问题、看资源概览,必要时直接调用 veFaaS OpenAPI。
一句话:它是 veFaaS 的终端控制台,覆盖从本地初始化、部署上线,到函数/沙箱运维、日志诊断和 OpenAPI 调用。
在实际使用中,用户无需关心控制台或 API 中某个功能对应哪个页面、哪个字段;Agent 可以通过 CLI 的分层命令、帮助指令与示例自由探索。更多典型场景,可以查看官方文档:www.volcengine.com/docs/6662/2…
从代码上线,veFaaS CLI 实战
下面,我们结合一个城市明信片的 Agent 全栈项目,完整走一遍 veFaaS CLI 在 Serverless 不同生命周期中的用法。
第一站 · 城市明信片
Passing City 是一个城市明信片生成器。用户选一座城市,填上停留时间、心情和画面风格,它就能生成一张有图、有字、还能翻到背面的明信片。
它的产品入口像一个写信台,包含城市、停留时间、心情、画面风格。
选一座城市,写下此刻的心情,收回一张城市明信片
点击生成后,这些输入变成一张卡片 —— 正面是一幅城市图,背面是一段小短文,附几条适合慢慢走的路线。一个能生成、能翻看、能分享的 AI 小应用。
正在生成:
通过 Seedream 生成明信片
生成结果:
泉州午后巷陌,一张图配上
标题、背面短文和几条小路线
第二站 · 代码在做什么
从代码结构看,城市明信片是一个前后端分离的项目。Web 侧负责表单、状态和明信片正反面的展示;Server 侧通过 Express 处理路由、组织 prompt、调用模型并返回结构化结果。
Express 暴露 /api/postcard 等供 App 使用的路由:
router.post("/api/postcard", asyncRoute(async (req, res) => {
const input = postcardInputSchema.parse(req.body)
const postcard = await createPostcard(config, input, "same_mood", requestBaseUrl(req))
res.json(postcard)
}))
模型调用链路是:先生成 imagePrompt,再调用火山方舟 API 执行 Seedream 图像生成模型。
const imagePrompt = buildImagePrompt(input);
const imageUrl = await generateArkImageUrl(config, imagePrompt);
asyncfunctiongenerateArkImageUrl(config, prompt) {
const endpoint = `${config.arkBaseUrl}/images/generations`;
const response = await fetch(endpoint, {
method: "POST",
headers: {
authorization: `Bearer ${config.arkApiKey}`,
"content-type": "application/json",
},
body: JSON.stringify({
model: config.arkImageModel,
prompt,
size: "2K",
response_format: "url",
extra_body: { watermark: false },
}),
});
return (await response.json()).data?.[0]?.url;
}
第三站 · 部署到云上
对于前后端分离的项目,可直接通过 CLI 部署全栈服务到函数上。Inspect 会探测代码的技术栈:API Server 是 Express Web 服务,Web 是 Vite 静态站点。
$ vefaas inspect -o json
{
"installCommand": "npm install",
"buildCommand": "npm run build",
"startCommand": "npm run start",
"port": 3000,
"runtime": "native-node20/v1",
"framework": "express",
"isStatic": false
}
$ vefaas inspect -o json
{
"installCommand": "npm install",
"buildCommand": "npm run build",
"outputPath": "dist",
"startCommand": "caddy run --config DefaultCaddyFile --adapter caddyfile",
"port": 8000,
"runtime": "native-node20/v1",
"framework": "vite",
"isStatic": true
}
发布时按职责分开部署:Server 负责模型调用和后端逻辑,ARK_API_KEY 通过环境变量注入。执行部署拿到 API 域名后,再构建 Web 端:
cd apps/api
vefaas link --newApp city-postcard-api --gatewayName <gateway> -y
vefaas env set ARK_API_KEY <secret> -y
vefaas deploy -y
vefaas domains -o json
cd ../web
VITE_API_BASE_URL=https://<api-domain> \
vefaas deploy --newApp city-postcard-web --gatewayName <gateway> -y
从本地项目到线上运行:veFaaS CLI 部署流程
上线后,应用能享受 Serverless 的按量计费与动态扩缩容能力:低流量时减少空闲资源成本,高流量时自动扩展实例,应对访问峰值。同时,这不是一次性的部署 —— 后续有代码或配置变更时,也可以继续通过 CLI 完成新版本发布、按流量比例灰度、快速回滚等操作,让项目从本地走向线上稳定运行。
在实际生产中,前端项目可通过 CDN 与 TOS 实现静态资源加速访问和可控的流量成本,比如通过火山 IGA (www.volcengine.com/docs/6559/2…) 部署静态站点,函数托管静态服务更适合原型和概念验证。
对于后端服务,则可以充分使用 Serverless 的弹性能力,对于有状态的数据库需求,也可以配合火山 Supabase (www.volcengine.com/docs/87275/…) 使用。
第四站 · 持续维护
应用上线后,真正承载代码、版本、实例和运行日志的是函数。通过函数 ID,一条命令就能完成控制台级别的运维操作:
排查时,先确认函数发布状态和当前版本:
vefaas fn info --id <function-id> -o json
vefaas fn revision list --id <function-id> -o table
再做一次请求测试,并拿到实例与日志:
vefaas fn invoke --id <function-id> --method GET --path / -o json
vefaas fn instances --id <function-id> -o table
vefaas fn logs --id <function-id> --instance <instance-name> --lines 50
如果还需要现场,则可以进入实例 webshell 进行分析:
vefaas fn webshell --id <function-id> --instance <instance-name> --connect
cat <file>
ps aux
curl -fsS http://127.0.0.1:<port>/
第五站 · 互动展间
普通明信片可以通过生图模型直接生成结果。但当一张明信片要变成可翻页、可点开路线、能独立运行的幻灯片时,产品需要把一段代码逻辑放进隔离环境运行,再把预览结果代理回主应用。这道边界,正是沙箱的价值。
服务端的实际流程并不复杂:
- Web 请求
POST /api/workshop/jobs - 服务调用
CreateSandbox创建隔离实例 - 服务执行 Agent 逻辑,通过幻灯片技能生成代码,并通过沙箱接口写入文件
- Sandbox 内启动一个轻量服务
- 服务代理展示 Sandbox 内的预览页
幻灯片:通过图片和输入
生成可交互的在线网站
Sandbox 产物:
隔离环境里运行交互页
Agent 需要先确认 CreateSandbox 属于云沙箱实例接口,入参需要 FunctionId,返回值里会拿到 SandboxId。后端代码再用这个实例继续写文件、启动服务,并把代理预览地址返回给前端。
由于沙箱涉及到 CreateSandbox 等 OpenAPI 调用,因此需要使用火山 SDK 调用函数服务,有一定的上手成本。现在则可以交给 vefaas doc sdk,查询 OpenAPI 参数和 SDK 使用,直接编写如下的业务逻辑:
const sandbox = await vefaas.CreateSandbox({
FunctionId: sandboxAppId,
Timeout: 60,
})
const sandboxId = sandbox.SandboxId
沙箱 ID 对应一个唯一的访问地址,可通过域名访问沙箱服务。对于开箱即用的 AIO Sandbox 模板,创建实例后可通过/v1/shell/exec执行 shell 命令:
await fetch(`${aioBaseUrl}/v1/shell/exec`, {
method: "POST",
headers: {
"content-type": "application/json",
"x-faas-instance-name": sandboxId,
},
body: JSON.stringify({ command: "node server.mjs", timeout: 60 }),
});
整个过程中,Agent 背后的 CLI 查询链路是:
vefaas doc search CreateSandbox
vefaas doc api CreateSandbox
vefaas api CreateSandbox
veFaaS CLI 提供了面向官方文档、API 和 SDK 的查询入口。Agent 可以直接检索相关文档,查看 API 参数与 SDK 调用方式,再结合当前任务生成更可靠的执行方案。
如果还没有沙箱应用,可以先访问火山引擎 veFaaS 控制台 console.volcengine.com/vefaas,点击「云… > 沙箱应用」,进入 All-in-One Sandbox 模板快速创建或体验一套可用环境。
All-in-One Sandbox 提供单一容器镜像,集成浏览器、终端、文件系统、VS Code、Jupyter 和 MCP 服务器。可作为工具沙箱或 Agent 执行环境快速集成使用。
veFaaS 可快速创建基于 AIO 镜像的沙箱应用,并完成集成。关于 AIO 项目本身和配套的 SDK,更多信息可参考 sandbox.agent-infra.com/
不止 Agent:IDE 插件与持续交付
我们聊了这么多 Agent 场景,但 veFaaS CLI 的价值远不止于此。
命令行对自动化和 CI 天然友好,不过在日常开发中,很多开发者仍然习惯在 IDE 里完成整个编码、调试、发布流程。
veFaaS 同时提供了 veFaaS Code Deployer 插件,支持 VS Code 和 JetBrains 系列 IDE。安装后就能查看函数列表、绑定函数、下载代码,改完直接上传部署 —— 不需要离开编辑器,也不需要手动拼接命令参数。
IDE 函数插件
如果你更习惯命令行,CLI 覆盖了从项目识别到日志排障的完整链路;如果你更习惯 IDE,插件把同样的能力放进了侧边栏。两条路径共享同一套后端能力,可按场景自由选择。
在流水线中使用
在团队协作中,应用发布往往不只发生在开发者本地。代码合并、版本发布、部署验证,都可以放进流水线中执行。
如果自己编写脚本,通常要处理构建、多个 API 调用、边界处理等细节。项目和环境一多,这些脚本不利于维护和复用,同时成本相对较高。
而 veFaaS CLI 支持非交互模式和结构化输出,天然适合 GitHub Actions、GitLab CI 等流水线环境:
vefaas deploy --funcId "$FUNCTION_ID" -o json --yes
vefaas domains -o json
vefaas fn logs --id "$FUNCTION_ID" --lines 50
代码合并到指定分支后,流水线自动触发部署,发布后查询函数状态判断是否成功。结构化输出也方便下游任务处理 —— 把访问地址写入构建产物,或在失败时自动收集日志。
以一个最小 FastAPI 项目为例,仓库里只需要应用代码、依赖、启动脚本和工作流配置。
from fastapi import FastAPI
app = FastAPI(openapi_url=None, docs_url=None, redoc_url=None)
@app.get("/")
defindex_handler():
return"Hello FastAPI From FaaS native python3!"
@app.get("/v1/ping")
asyncdefping_handler():
return"Ping healthcheck"
合并到 main 后自动部署,可以新增 .github/workflows/deploy.yml:
name:DeploytoveFaaS
on:
push:
branches: [main]
jobs:
deploy:
runs-on:ubuntu-latest
steps:
-uses:actions/checkout@v4
-uses:actions/setup-node@v4
with:
node-version:"20"
-name:InstallveFaaSCLI
run:npmi-g@volcengine/vefaas-cli@latest
-name:Deploy
env:
VOLC_ACCESS_KEY_ID:${{secrets.VOLC_ACCESS_KEY_ID}}
VOLC_SECRET_ACCESS_KEY:${{secrets.VOLC_SECRET_ACCESS_KEY}}
FUNCTION_ID:${{secrets.FUNCTION_ID}}
run:|
vefaas deploy --funcId "$FUNCTION_ID" -o json --yes
vefaas domains -o json
触发 GitHub Action 后,流水线会下载 CLI、读取 secrets、执行部署命令。
通过 Github Actions 或 GitLab CI 可快速在用户现有工作流中集成函数管理功能。同时火山引擎也提供 持续交付服务。可通过函数服务提供预置能力,可视化集成代码包、镜像发布流水线。详情可参考 www.volcengine.com/docs/6461/1…
结语
从本地代码到线上服务,从函数部署到沙箱调试 —— veFaaS CLI 正在将函数服务的能力抽象为一套标准化的工作流,既适配人的操作习惯,也兼容 Agent 的调用方式。
- 对于开发者,它是一个命令行工具。
- 对于 AI Agent,它是一组可理解、可执行、可校验结果的云端能力接口。
这正是 veFaaS CLI 的设计初衷:让函数服务不局限于控制台,而是可以被终端、流水线和 Agent 自然调用,真正融入开发和运维的每一个环节。
如果你对 veFaaS CLI 感兴趣,或在使用中有任何疑问和建议,欢迎交流反馈。
继续了解
veFaaS CLI 使用指南:github.com/vefaas-dev/…
veFaaS Code Deployer 插件:marketplace.visualstudio.com/items?itemN…
English / 原文
如果你了解过火山引擎函数服务 veFaaS,就知道它就像一个“随叫随到”的代码运行环境 —— 既支持免运维、弹性计费地部署 Python/Golang/Node.js 等代码包,也支持通过自定义镜像搞定更复杂的环境依赖。
但今天我们要聊的不是“怎么用”,而是 AI Agent 来了之后,用法变了 。
Agent 的运行特点很直接:秒级拉起一个干净沙箱,跑代码、搜网页、调工具,然后销毁。veFaaS 的云沙箱能力恰好与这一模式天然匹配 —— 弹性伸缩与按需计费,对应的是 Agent 任务高频创建、短生命周期、用完即焚的运行节奏。在可信沙箱内,Agent 可以安全地完成各类工具调用,无需担心资源残留或环境冲突,每一次执行都是一次干净的“即用即走”。
问题在于调用方式——
过去,开发者管理函数服务主要依赖 Web 控制台或脚本。但当 AI Agent 介入开发、部署和运维流程时,传统控制台的交互方式并不友好:一个任务往往需要横跨多个页面,操作路径冗长且伴随学习成本,难以被 Agent 高效调用。
传统方式 vs Agent CLI
针对这个问题,火山引擎推出 veFaaS CLI ,它的解决思路是将函数与沙箱的部署、管理等操作封装为一套稳定、可复用的命令集。这套命令集不区分操作主体 —— 无论是开发者、AI Agent 还是 CI/CD 流水线,都能通过同一套命令完成 Serverless 服务的一站式生命周期管理。
它提供以下核心能力:
- 一键部署:
vefaas inspect自动检测项目类型,vefaas deploy一行实现从本地到线上服务的部署 - 运行可观测:
vefaas fn logs / invoke / revisions / instances上线后持续可见 - 配置管理:
vefaas fn config / scale / env / strategy管理函数配置、资源规格 - 文档即查:
vefaas doc search / doc api / doc sdk不离开终端 - 沙箱配置:
vefaas sandbox create / instance create / webshell创建沙箱、拉起实例、调试 - CI/CD 原生支持: 结构化输出、非交互模式,适配主流流水线
上手 veFaaS CLI,只需三步
第一步:安装 CLI
npx @volcengine/vefaas-cli@latest install
vefaas
或者和你的 Agent 对话:帮我通过 npx @volcengine/vefaas-cli@latest install 安装 vefaas cli 和对应技能
第二步:登录账号
安装完成后,登录方式分两种场景:
- 日常开发可以直接在浏览器登录火山引擎账号,通过 SSO 完成授权,随后执行部署、日志查询、文档检索等操作:
vefaas login --sso
vefaas whoami
2. 在脚本或 CI/CD 环境里,也可以通过 AK/SK 或 STS 等方式完成登录认证:
export VOLC_ACCESS_KEY_ID="<AK>"
export VOLC_SECRET_ACCESS_KEY="<SK>"
vefaas login --check
第三步:开始使用
登录之后,可以直接和 Agent 对话,了解 veFaaS CLI 的能力范围:看一下 veFaaS CLI 能做什么,帮我简短总结一下。
我看的是本机 vefaas 的 CLI help。它主要能做这些:
应用部署:init / link / deploy / domains / app,把本地项目部署成 veFaaS 应用,查看访问地址、发布记录、部署日志。
函数管理:fn list/create/info/release/rollback/logs/invoke/pull/push,管理函数、版本、实例、日志、调用测试、代码拉取推送。
沙箱管理:sandbox,管理沙箱应用、实例、镜像、发布、回滚、日志、WebShell。
配置与环境变量:config / env,改内存、CPU、超时、端口、启动命令、构建命令、环境变量等。
网关和触发器:gateway / trigger,管理 APIG 网关、路由,以及 Timer/Kafka/RocketMQ/BMQ/TLS 等触发器。
排查与底层能力:doctor / whoami / overview / resource / api,诊断本地和鉴权问题、看资源概览,必要时直接调用 veFaaS OpenAPI。
一句话:它是 veFaaS 的终端控制台,覆盖从本地初始化、部署上线,到函数/沙箱运维、日志诊断和 OpenAPI 调用。
在实际使用中,用户无需关心控制台或 API 中某个功能对应哪个页面、哪个字段;Agent 可以通过 CLI 的分层命令、帮助指令与示例自由探索。更多典型场景,可以查看官方文档:www.volcengine.com/docs/6662/2…
从代码上线,veFaaS CLI 实战
下面,我们结合一个城市明信片的 Agent 全栈项目,完整走一遍 veFaaS CLI 在 Serverless 不同生命周期中的用法。
第一站 · 城市明信片
Passing City 是一个城市明信片生成器。用户选一座城市,填上停留时间、心情和画面风格,它就能生成一张有图、有字、还能翻到背面的明信片。
它的产品入口像一个写信台,包含城市、停留时间、心情、画面风格。
选一座城市,写下此刻的心情,收回一张城市明信片
点击生成后,这些输入变成一张卡片 —— 正面是一幅城市图,背面是一段小短文,附几条适合慢慢走的路线。一个能生成、能翻看、能分享的 AI 小应用。
正在生成:
通过 Seedream 生成明信片
生成结果:
泉州午后巷陌,一张图配上
标题、背面短文和几条小路线
第二站 · 代码在做什么
从代码结构看,城市明信片是一个前后端分离的项目。Web 侧负责表单、状态和明信片正反面的展示;Server 侧通过 Express 处理路由、组织 prompt、调用模型并返回结构化结果。
Express 暴露 /api/postcard 等供 App 使用的路由:
router.post("/api/postcard", asyncRoute(async (req, res) => {
const input = postcardInputSchema.parse(req.body)
const postcard = await createPostcard(config, input, "same_mood", requestBaseUrl(req))
res.json(postcard)
}))
模型调用链路是:先生成 imagePrompt,再调用火山方舟 API 执行 Seedream 图像生成模型。
const imagePrompt = buildImagePrompt(input);
const imageUrl = await generateArkImageUrl(config, imagePrompt);
asyncfunctiongenerateArkImageUrl(config, prompt) {
const endpoint = `${config.arkBaseUrl}/images/generations`;
const response = await fetch(endpoint, {
method: "POST",
headers: {
authorization: `Bearer ${config.arkApiKey}`,
"content-type": "application/json",
},
body: JSON.stringify({
model: config.arkImageModel,
prompt,
size: "2K",
response_format: "url",
extra_body: { watermark: false },
}),
});
return (await response.json()).data?.[0]?.url;
}
第三站 · 部署到云上
对于前后端分离的项目,可直接通过 CLI 部署全栈服务到函数上。Inspect 会探测代码的技术栈:API Server 是 Express Web 服务,Web 是 Vite 静态站点。
$ vefaas inspect -o json
{
"installCommand": "npm install",
"buildCommand": "npm run build",
"startCommand": "npm run start",
"port": 3000,
"runtime": "native-node20/v1",
"framework": "express",
"isStatic": false
}
$ vefaas inspect -o json
{
"installCommand": "npm install",
"buildCommand": "npm run build",
"outputPath": "dist",
"startCommand": "caddy run --config DefaultCaddyFile --adapter caddyfile",
"port": 8000,
"runtime": "native-node20/v1",
"framework": "vite",
"isStatic": true
}
发布时按职责分开部署:Server 负责模型调用和后端逻辑,ARK_API_KEY 通过环境变量注入。执行部署拿到 API 域名后,再构建 Web 端:
cd apps/api
vefaas link --newApp city-postcard-api --gatewayName <gateway> -y
vefaas env set ARK_API_KEY <secret> -y
vefaas deploy -y
vefaas domains -o json
cd ../web
VITE_API_BASE_URL=https://<api-domain> \
vefaas deploy --newApp city-postcard-web --gatewayName <gateway> -y
从本地项目到线上运行:veFaaS CLI 部署流程
上线后,应用能享受 Serverless 的按量计费与动态扩缩容能力:低流量时减少空闲资源成本,高流量时自动扩展实例,应对访问峰值。同时,这不是一次性的部署 —— 后续有代码或配置变更时,也可以继续通过 CLI 完成新版本发布、按流量比例灰度、快速回滚等操作,让项目从本地走向线上稳定运行。
在实际生产中,前端项目可通过 CDN 与 TOS 实现静态资源加速访问和可控的流量成本,比如通过火山 IGA (www.volcengine.com/docs/6559/2…) 部署静态站点,函数托管静态服务更适合原型和概念验证。
对于后端服务,则可以充分使用 Serverless 的弹性能力,对于有状态的数据库需求,也可以配合火山 Supabase (www.volcengine.com/docs/87275/…) 使用。
第四站 · 持续维护
应用上线后,真正承载代码、版本、实例和运行日志的是函数。通过函数 ID,一条命令就能完成控制台级别的运维操作:
排查时,先确认函数发布状态和当前版本:
vefaas fn info --id <function-id> -o json
vefaas fn revision list --id <function-id> -o table
再做一次请求测试,并拿到实例与日志:
vefaas fn invoke --id <function-id> --method GET --path / -o json
vefaas fn instances --id <function-id> -o table
vefaas fn logs --id <function-id> --instance <instance-name> --lines 50
如果还需要现场,则可以进入实例 webshell 进行分析:
vefaas fn webshell --id <function-id> --instance <instance-name> --connect
cat <file>
ps aux
curl -fsS http://127.0.0.1:<port>/
第五站 · 互动展间
普通明信片可以通过生图模型直接生成结果。但当一张明信片要变成可翻页、可点开路线、能独立运行的幻灯片时,产品需要把一段代码逻辑放进隔离环境运行,再把预览结果代理回主应用。这道边界,正是沙箱的价值。
服务端的实际流程并不复杂:
- Web 请求
POST /api/workshop/jobs - 服务调用
CreateSandbox创建隔离实例 - 服务执行 Agent 逻辑,通过幻灯片技能生成代码,并通过沙箱接口写入文件
- Sandbox 内启动一个轻量服务
- 服务代理展示 Sandbox 内的预览页
幻灯片:通过图片和输入
生成可交互的在线网站
Sandbox 产物:
隔离环境里运行交互页
Agent 需要先确认 CreateSandbox 属于云沙箱实例接口,入参需要 FunctionId,返回值里会拿到 SandboxId。后端代码再用这个实例继续写文件、启动服务,并把代理预览地址返回给前端。
由于沙箱涉及到 CreateSandbox 等 OpenAPI 调用,因此需要使用火山 SDK 调用函数服务,有一定的上手成本。现在则可以交给 vefaas doc sdk,查询 OpenAPI 参数和 SDK 使用,直接编写如下的业务逻辑:
const sandbox = await vefaas.CreateSandbox({
FunctionId: sandboxAppId,
Timeout: 60,
})
const sandboxId = sandbox.SandboxId
沙箱 ID 对应一个唯一的访问地址,可通过域名访问沙箱服务。对于开箱即用的 AIO Sandbox 模板,创建实例后可通过/v1/shell/exec执行 shell 命令:
await fetch(`${aioBaseUrl}/v1/shell/exec`, {
method: "POST",
headers: {
"content-type": "application/json",
"x-faas-instance-name": sandboxId,
},
body: JSON.stringify({ command: "node server.mjs", timeout: 60 }),
});
整个过程中,Agent 背后的 CLI 查询链路是:
vefaas doc search CreateSandbox
vefaas doc api CreateSandbox
vefaas api CreateSandbox
veFaaS CLI 提供了面向官方文档、API 和 SDK 的查询入口。Agent 可以直接检索相关文档,查看 API 参数与 SDK 调用方式,再结合当前任务生成更可靠的执行方案。
如果还没有沙箱应用,可以先访问火山引擎 veFaaS 控制台 console.volcengine.com/vefaas,点击「云… > 沙箱应用」,进入 All-in-One Sandbox 模板快速创建或体验一套可用环境。
All-in-One Sandbox 提供单一容器镜像,集成浏览器、终端、文件系统、VS Code、Jupyter 和 MCP 服务器。可作为工具沙箱或 Agent 执行环境快速集成使用。
veFaaS 可快速创建基于 AIO 镜像的沙箱应用,并完成集成。关于 AIO 项目本身和配套的 SDK,更多信息可参考 sandbox.agent-infra.com/
不止 Agent:IDE 插件与持续交付
我们聊了这么多 Agent 场景,但 veFaaS CLI 的价值远不止于此。
命令行对自动化和 CI 天然友好,不过在日常开发中,很多开发者仍然习惯在 IDE 里完成整个编码、调试、发布流程。
veFaaS 同时提供了 veFaaS Code Deployer 插件,支持 VS Code 和 JetBrains 系列 IDE。安装后就能查看函数列表、绑定函数、下载代码,改完直接上传部署 —— 不需要离开编辑器,也不需要手动拼接命令参数。
IDE 函数插件
如果你更习惯命令行,CLI 覆盖了从项目识别到日志排障的完整链路;如果你更习惯 IDE,插件把同样的能力放进了侧边栏。两条路径共享同一套后端能力,可按场景自由选择。
在流水线中使用
在团队协作中,应用发布往往不只发生在开发者本地。代码合并、版本发布、部署验证,都可以放进流水线中执行。
如果自己编写脚本,通常要处理构建、多个 API 调用、边界处理等细节。项目和环境一多,这些脚本不利于维护和复用,同时成本相对较高。
而 veFaaS CLI 支持非交互模式和结构化输出,天然适合 GitHub Actions、GitLab CI 等流水线环境:
vefaas deploy --funcId "$FUNCTION_ID" -o json --yes
vefaas domains -o json
vefaas fn logs --id "$FUNCTION_ID" --lines 50
代码合并到指定分支后,流水线自动触发部署,发布后查询函数状态判断是否成功。结构化输出也方便下游任务处理 —— 把访问地址写入构建产物,或在失败时自动收集日志。
以一个最小 FastAPI 项目为例,仓库里只需要应用代码、依赖、启动脚本和工作流配置。
from fastapi import FastAPI
app = FastAPI(openapi_url=None, docs_url=None, redoc_url=None)
@app.get("/")
defindex_handler():
return"Hello FastAPI From FaaS native python3!"
@app.get("/v1/ping")
asyncdefping_handler():
return"Ping healthcheck"
合并到 main 后自动部署,可以新增 .github/workflows/deploy.yml:
name:DeploytoveFaaS
on:
push:
branches: [main]
jobs:
deploy:
runs-on:ubuntu-latest
steps:
-uses:actions/checkout@v4
-uses:actions/setup-node@v4
with:
node-version:"20"
-name:InstallveFaaSCLI
run:npmi-g@volcengine/vefaas-cli@latest
-name:Deploy
env:
VOLC_ACCESS_KEY_ID:${{secrets.VOLC_ACCESS_KEY_ID}}
VOLC_SECRET_ACCESS_KEY:${{secrets.VOLC_SECRET_ACCESS_KEY}}
FUNCTION_ID:${{secrets.FUNCTION_ID}}
run:|
vefaas deploy --funcId "$FUNCTION_ID" -o json --yes
vefaas domains -o json
触发 GitHub Action 后,流水线会下载 CLI、读取 secrets、执行部署命令。
通过 Github Actions 或 GitLab CI 可快速在用户现有工作流中集成函数管理功能。同时火山引擎也提供 持续交付服务。可通过函数服务提供预置能力,可视化集成代码包、镜像发布流水线。详情可参考 www.volcengine.com/docs/6461/1…
结语
从本地代码到线上服务,从函数部署到沙箱调试 —— veFaaS CLI 正在将函数服务的能力抽象为一套标准化的工作流,既适配人的操作习惯,也兼容 Agent 的调用方式。
- 对于开发者,它是一个命令行工具。
- 对于 AI Agent,它是一组可理解、可执行、可校验结果的云端能力接口。
这正是 veFaaS CLI 的设计初衷:让函数服务不局限于控制台,而是可以被终端、流水线和 Agent 自然调用,真正融入开发和运维的每一个环节。
如果你对 veFaaS CLI 感兴趣,或在使用中有任何疑问和建议,欢迎交流反馈。
继续了解
veFaaS CLI 使用指南:github.com/vefaas-dev/…
veFaaS Code Deployer 插件:marketplace.visualstudio.com/items?itemN…