本文介绍如何在 Agent 执行引擎部署代码沙箱应用,提供安全、隔离的代码执行环境,支持 Python、R、JavaScript、TypeScript、Java、Bash 等多种编程语言,适用于数据处理、科学计算、图表生成、Vibe Coding 等安全代码运行场景。
说明:
该功能目前仅支持在香港地域、广州地域、新加坡使用。
前置依赖
主账号服务授权(如果您已授权,请跳过该步骤)
您需要为 Serverless Framework、CODING DevOps、云函数创建服务角色并授权。具体操作如下:
为预设策略授权:按界面提示,单击“同意授权”:

为非预设策略授权:
1.1 单击“前往关联”为角色绑定策略。

1.2 进入访问管理 > 角色控制台,单击对应的角色名称 CODING_QCSRole。

1.3 单击关联策略,搜索并选择策略 “QcloudSCFFullAccess”。

1.4 单击确定完成策略绑定。

子账号服务授权(如果您已授权,请跳过该步骤)
1. 创建自定义策略
1.1 登录主账号并进入访问管理控制台。
1.2 在策略页面单击新建自定义策略,选择按策略语法创建。
1.3 选择空白模板,并单击下一步。

1.4 修改策略名称,并将创建 Agent 需要的最小策略内容输入到策略内容框。如下图所示:

策略名称:例如
scf-agent。策略内容:
{"statement": [{"action": ["tcr:DescribeInstances","tcr:ValidateUserPersonal","tcr:CreateUserPersonal","tcr:DescribeRepositoryOwnerPersonal","tcr:DescribeRepositoryFilterPersonal","tcr:DescribeImagePersonal","sls:GetInstance","sls:ListInstances","scf:ListFunctions","scf:ListTriggers","scf:ListVersionByFunction","scf:ListAliases","scf:ListCustomDomains","scf:GetFunction","scf:GetAccount","scf:GetFunctionEventInvokeConfig","scf:GetFunctionTotalNum","scf:UpdateFunctionCode","cam:GetRole","cam:ListAttachedRolePolicies","cls:DescribeTopics","cls:DescribeLogsets","cfs:DescribeCfsFileSystems","vpc:DescribeVpcs","vpc:DescribeSubnets","coding:*"],"effect": "allow","resource": "*"}],"version": "2.0"}
附:策略的相关 action 说明
云产品名称 | 接口名(策略 action) | 接口描述 | 备注 |
sls | GetInstance | 应用详情 | - |
sls | ListInstances | 查询应用列表 | - |
scf | ListFunctions | 查询函数列表 | - |
| ListTriggers | 函数详情-查询函数 url | - |
| ListCustomDomains | 应用详情-查询自定义域名 | - |
| ListVersionByFunction | 函数详情-查询版本列表 | - |
| ListAliases | 函数详情-查询别名 | - |
| GetFunction | 函数详情 | - |
| GetAccount | 函数详情-查询用户配置 | - |
| GetFunctionEventInvokeConfig | 函数详情-查询异步事件配置 | - |
| GetFunctionTotalNum | 函数列表-统计各个地域的函数个数 | - |
| UpdateFunctionCode | 函数详情-更新镜像配置 | - |
cam | GetRole | 创建应用-角色校验 | - |
cam | ListAttachedRolePolicies | 创建应用-角色策略授权 | - |
coding | * | 创建应用-调用所有 coding 接口 | coding 产品只定义 coding:*的 action,所以 coding 的所有接口只能添加 coding:* 的策略。 |
cls | DescribeTopics | 应用详情-查询日志主题 | - |
cls | DescribeLogsets | 应用详情-查询日志集 | - |
cfs | DescribeCfsFileSystems | 应用详情-查询 cfs 列表 | - |
vpc | DescribeVpcs | 应用详情-查询 vpc | - |
vpc | DescribeSubnets | 应用详情-查询子网 | - |
tcr | DescribeInstances | 开启镜像加速时需要初始化 TCR 调用该接口 | - |
| ValidateUserPersonal | 校验是否初始化 TCR 个人实例 | - |
| CreateUserPersonal | 初始化个人实例密码 | - |
| DescribeRepositoryOwnerPersonal | 查询个人实例列表 | - |
| DescribeRepositoryFilterPersonal | 获取满足输入搜索条件的个人版镜像仓库 | - |
| DescribeImagePersonal | 用于获取个人版镜像仓库 tag 列表 | - |
2. 给子账号关联对应策略授权
2.1 自定义策略成功后,搜索对应策略,单击关联用户/组/角色。

2.2 勾选目前子账号的用户,单击确定,将子账号关联到对应策略上。

3. 确认策略关联成功
3.1 进入用户列表页面,单击子账号,进入用户详情页。

3.2 确认子账号已经授权 scf-agent 策略。

容器镜像准备
如果您通过容器镜像部署,您需要先准备好 WebServer 类型的容器镜像,并上传到容器镜像仓库。
1.1 镜像要求:需要搭建 HTTP Server,监听 0.0.0.0:9000 或 *:9000。HTTP Server 需在30秒内启动完毕。如未完成,则可能会导致健康检查超时,出现以下错误:
The request timed out in 30000ms.Please confirm your http server have enabled listening on port 9000.
如果您希望通过代码方式部署应用,可以参考 自定义创建 Web 函数,并配置 基于会话并发模式。
快速上手
创建代码沙箱
1. 登录 Serverless 控制台,单击左侧导航栏的 Agent。
2. 在 Agent 应用引擎 页面上,选中 沙箱工具,单击 创建应用,进入应用创建流程。

3. 在基础配置版块,填写以下配置:
应用类型:选择代码执行沙箱。
应用名称:应用的唯一标识,不可重复,创建后不可修改。命名规范:只能包含字母、数字、下划线、连字符,以字母开头,以数字或字母结尾,2~60个字符。
地域:选择资源归属于某个地域。

4. 在网络配置版块,配置函数网络访问权限:
公网访问:默认未启用,如果需要访问公网资源,则需要启用。
私有网络:启用后,应用可以访问同一个私有网络下的资源。

5. 在日志配置版块:默认启用日志投递,可将函数运行日志实时投递到指定位置。详情请参见 日志投递配置。

6. 在隔离、并发配置版块:配置实例安全隔离和单实例并发模式。

实例安全隔离:
如果启用,保证一个沙箱独占一个实例,沙箱销毁时,实例也销毁。
如果不启用,多个沙箱可能共享一个实例。
配置基于会话单实例并发模式,该配置主要用于标记客户端请求以哪种方式携带沙箱 ID、配置沙箱生命周期、底层实例支持的沙箱并发数和请求,其中本应用中“会话”的配置对应的是“沙箱”的配置。具体配置项说明如下:
配置项 | 说明 | 示例 |
会话 Key 来源 | 标记客户端请求以哪种方式携带沙箱 ID,系统根据此标记来决定要调度到某个沙箱上。可选项:Http Header、Cookie、Query String,三选一。不同选项支持场景说明如下: Http Header 通过 HTTP 请求头传递客户端会话标识,后台确保相同标识的请求被路由到同一个沙箱。适用于 WebSocket 协议、gRPC 协议、HTTP 协议。支持客户端自定义沙箱 ID,也支持服务端生成。 Cookie 将携带相同 Cookie 信息的请求路由到同一个沙箱。支持客户端生成沙箱 ID,也支持服务端生成。 Query String 将携带相同 Query String 信息的请求路由到同一个沙箱,需要客户端生成沙箱 ID。 | Http Header |
会话 Key 名称 | Key 用途及命名规则 用途:沙箱的唯一标识名称。 命名要求:必须以字母开头;非首字母可包含数字、字母、下划线(_)、中划线(-);长度限制5-40 个字符(含边界值)。 Key 对应 Value(沙箱 ID )生成逻辑及字符要求: 生成逻辑: 来源为 Http Header、Cookie:支持客户端在首次调用时自主生成 Value;若客户端未生成,系统将自动生成。 来源为 QueryString:首次 Value 需由客户端生成。 字符要求:含数字、字母、下划线(_)、中划线(-)长度限制128个字节。 | x-sandbox-id |
会话最长生命周期 | 从沙箱创建、使用到最终销毁的全过程,单位秒。超过生命周期后,服务端将自动销毁沙箱。最长可设置7天,默认21600秒。 | 21600秒 |
会话最长空闲时间 | 用户在一段时间内没有进行任何操作,导致沙箱进入空闲状态,单位秒。最长不得超过会话最长生命周期,默认1800秒。超过最长空闲(Idle)时间后,服务端将按照“会话空闲超时处理策略”处理沙箱。 | 1800秒 |
会话空闲超时处理策略 | 如果您开启了“实例安全隔离”,会话空闲超时处理策略可选自动销毁或者自动暂停。 如果您没有开启“实例安全隔离”,会话空闲超时处理策略默认自动销毁。 | 自动销毁 |
单实例最大并发会话数 | 单实例在同一时间内支持的最大沙箱数,默认值为20,最大支持100。 | 20 |
单实例最大并发请求数 | 单实例在同一时间内支持的最大请求数,默认为10,最大支持100。 | 10 |
7. 单击提交,启动应用的部署。
8. 应用部署完成后,单击应用名称,进入应用详情页面,可以获得访问地址。


使用代码沙箱执行代码
您可以参考以下示例执行代码,请将{$url}替换成沙箱应用访问地址。
curl --location '{$url}/execute' \\--header 'Content-Type: application/json' \\--data '{"code": "print(\\"hello world!\\")","language":"python"}'
输出结果:
{"type": "number_of_executions", "execution_count": 1}{"type": "stdout", "text": "hello world!\\n", "timestamp": "2025-11-10T08:34:56.997882+00:00"}{"type": "end_of_execution"}
import requestsimport uuiddef execute_code(base_url: str,sandbox_id: str,code: str, language: str = "python"):payload = {"code": code,"language": language}headers = {"Content-Type": "application/json","x-sandbox-id": sandbox_id}print("🚀 开始执行代码")response = requests.post(f"{base_url}/execute",json=payload,headers=headers,stream=False)print(f"📄 执行结果:{response.text}")def main():sandbox_id = str(uuid.uuid4())base_url = "{$url}"print(f"🌐 沙箱地址:{base_url}, 沙箱ID: {sandbox_id}")# 示例代码exampl_code = "print('hello world!')"execute_code(base_url,sandbox_id,exampl_code,"python")print("✅ 代码执行完成")if __name__ == "__main__":main()
执行上述 Python 文件,输出结果:
🌐 沙箱地址:https://******.ap-chongqing.tencentscf.com, 沙箱ID: 94834fbf-2926-463a-8da2-f283e4843640🚀 开始执行代码📄 执行结果:{"type": "number_of_executions", "execution_count": 3}{"type": "stdout", "text": "hello world!\\n", "timestamp": "2025-11-10T08:38:00.875663+00:00"}{"type": "end_of_execution"}✅ 代码执行完成