本文介绍如何使用
agr 创建弹性部署(Deployment),并分别通过本地代理和生产数据面访问已部署的应用。完成本文后,您将获得一个可接收请求的弹性部署,并能验证本地调试路径和生产数据面访问路径。您也可以参考 Deployment Cookbook 快速入门与示例代码来快速上手。目标与结果
创建一个与已有沙箱工具关联的弹性部署。
查询弹性部署详情,确认沙箱工具、伸缩配置和生命周期配置符合预期。
通过本地代理验证本地调试访问。
通过生产数据面验证带短期 Token 的访问。
按生命周期策略清理弹性部署,必要时清理保留的
PAUSED 沙箱实例和沙箱工具。前提条件
开始前,请确认:
已安装并初始化
agr,且 agr status 和 agr doctor 检查通过。当前身份具备创建、查询和删除弹性部署,以及调用
AcquireDeploymentToken 的权限。已创建了一个常驻型的自定义沙箱工具。
已确认沙箱工具中应用监听的 HTTP 端口。下文以
8080 为例。已安装
curl。设置示例变量:
export AGR_REGION='ap-shanghai'export AGR_DOMAIN='tencentags.com'export TOOL_ID='sdt-replace-me'export DEPLOYMENT_NAME='deployment-quickstart'
说明:
示例中的
TOOL_ID、DEPLOYMENT_TOKEN 等值需替换为实际返回值。步骤概览
1. 创建弹性部署。
2. 查询弹性部署。
3. 通过本地代理访问。
4. 通过生产数据面访问。
5. 清理资源。
执行步骤
步骤 1:创建弹性部署
下面的配置允许从零实例按需启动,最多扩展到 10 个实例;实例空闲 5 分钟后停止并释放。
参数 | 示例值 | 说明 |
MinInstanceCount | 0 | 允许从零实例按需启动。 |
MaxInstanceCount | 10 | 最多扩展到的实例数。 |
MaxInstanceRequestConcurrency | 100 | 单实例最大请求并发数。 |
IdleTimeoutSeconds | 300 | 实例空闲 300 秒(5 分钟)后触发空闲处理。 |
IdleAction | STOP | 空闲后停止实例并释放。 |
agr deployment create \\--region "${AGR_REGION}" \\--deployment-name "${DEPLOYMENT_NAME}" \\--tool-id "${TOOL_ID}" \\--scaling-configuration '{"MinInstanceCount": 0,"MaxInstanceCount": 10,"MaxInstanceRequestConcurrency": 100}' \\--lifecycle-configuration '{"IdleTimeoutSeconds": 300,"IdleAction": "STOP"}'
从 CLI 响应中复制
DeploymentId,再设置后续步骤使用的环境变量:export DEPLOYMENT_ID='dpl-replace-me'
创建成功后弹性部署为
ACTIVE,表示入口可以接收请求,但不保证沙箱实例已经完成启动。首次请求可能包含按需启动延迟。步骤 2:查询弹性部署
agr deployment get "${DEPLOYMENT_ID}" --region "${AGR_REGION}"agr deployment list --region "${AGR_REGION}"
确认详情中的沙箱工具、伸缩配置和生命周期配置符合预期。
查看受管沙箱实例的 Metadata
如需查看由弹性部署创建或管理的沙箱实例,可按沙箱工具查询沙箱实例,并输出 JSON:
agr instance list \\--tool-id "${TOOL_ID}" \\--region "${AGR_REGION}" \\-o json
在返回的
Data.Items[].Metadata 中,弹性部署会投影以下平台字段:Metadata 名称 | 说明 |
tencentags.com/managed-by | 沙箱实例当前由弹性部署管理时,值为 deployment;解除管理关系时会移除。 |
tencentags.com/deployment-id | 建立 Metadata 投影的弹性部署 ID;解除管理关系后可能保留,用于展示历史来源。 |
tencentags.com/affinity-id | 首次会话亲和成功后写入的完整 Affinity ID;未启用或尚未建立亲和时不存在。 |
说明:
同一沙箱工具也可能被用于直接创建独立沙箱实例,因此查询结果不一定都归当前弹性部署管理。
步骤 3:通过本地代理访问
deployment proxy 适合本地调试。下面把本机 127.0.0.1:18080 转发到弹性部署的 8080 端口:agr deployment proxy "${DEPLOYMENT_ID}" 18080:8080 \\--region "${AGR_REGION}"
该命令会占用当前终端。在另一个终端发起请求:
curl --fail-with-body --silent --show-error \\http://127.0.0.1:18080/
验证完成后,回到代理终端按
Ctrl+C。警告:
本地代理默认只监听
127.0.0.1,仅适合本地调试,请勿把本地调试代理作为生产入口。步骤 4:通过生产数据面访问
生产客户端应先调用
AcquireDeploymentToken:agr api call AcquireDeploymentToken \\--region "${AGR_REGION}" \\--request '{"DeploymentId": "'"${DEPLOYMENT_ID}"'"}' \\--output json
从响应的
Data.Response.Response.Token 复制 Token:export DEPLOYMENT_TOKEN='replace-with-short-lived-token'
然后访问端口对应的数据面域名:
curl --fail-with-body --silent --show-error \\--header "X-Access-Token: ${DEPLOYMENT_TOKEN}" \\"https://8080-${DEPLOYMENT_ID}.${AGR_REGION}.agents.${AGR_DOMAIN}/"
警告:
Token 是短期凭证。请勿把它写入代码仓库、日志或长期配置;过期后重新调用
AcquireDeploymentToken。结果验证
本地代理的
curl 请求应返回沙箱工具中应用在 8080 端口的响应。生产数据面的
curl 请求应返回沙箱工具中应用在 8080 端口的响应。agr deployment get 和 agr deployment list 返回的详情中,沙箱工具、伸缩配置和生命周期配置符合预期。资源清理
先删除弹性部署并等待异步删除完成:
agr deployment delete "${DEPLOYMENT_ID}" \\--region "${AGR_REGION}" \\--wait
删除弹性部署时,平台会按照进入
DELETING 状态时固定的 IdleAction 处理其管理的沙箱实例:STOP:自动停止并释放沙箱实例,无需手动删除。PAUSE:暂停并保留沙箱实例;这些 PAUSED 沙箱实例需要手动删除。本示例使用
STOP,因此弹性部署删除完成后,无需手动删除其管理的沙箱实例。如果您将 IdleAction 改为 PAUSE,并且这个沙箱工具是专门为本教程创建的,请先确认没有其他业务使用它,再列出仍关联到沙箱工具的沙箱实例:agr instance list --tool-id "${TOOL_ID}" \\--region "${AGR_REGION}"
仅对仍保留的
PAUSED 沙箱实例逐个执行删除:export INSTANCE_ID='replace-with-instance-id'agr instance delete "${INSTANCE_ID}" \\--region "${AGR_REGION}" \\--yes \\--wait
确认不存在仍需保留的沙箱实例后,再删除不再使用的沙箱工具:
agr tool delete "${TOOL_ID}" \\--region "${AGR_REGION}" \\--yes \\--wait