用于在阿里云ESA边缘节点部署HTML页面、静态目录或自定义边缘函数,并管理Edge KV实现分布式键值存储。
类别:服务 : 服务 : 服务 : 功能与页面 — 边部署 & KV 存储
功能概述
类别:服务 : 服务 : 服务 : 功能与页面 — 边部署 & KV 存储是一项面向实际任务的技能,主要用于通过 JavaScript SDK 将边缘节点部署到 Alibaba Cloud 欧空局 边缘节点;提供自由的全球 CDN 加速和边缘安全保护。
核心要点
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
结果检查与注意事项
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
类别:service
ESA 函数与页面 — 边缘部署与 KV 存储
通过 JavaScript SDK 将应用部署至阿里云 ESA 边缘节点。提供免费的全球 CDN 加速与边缘安全防护,使您的静态资源可从最近的边缘节点就近分发,从而提升性能与安全性。
- 函数与页面(Functions & Pages) — 部署边缘函数及静态内容(使用同一套 API;Pages 是简化模式)
- 边缘 KV(Edge KV) — 可在边缘函数中访问的分布式键值存储
- 免费 CDN — 全球边缘节点加速,静态资源就近分发
- 安全防护 — 内置 DDoS 防护、WAF 及其他边缘安全能力
三种部署模式
| 模式 | 适用场景 | 代码类型 | 大小限制 |
|---|---|---|---|
| HTML 页面 | 快速原型、单页应用 | 自动封装的 JS | < 5MB(ER 限制) |
| 静态目录 | 前端构建产物(React/Vue 等) | 静态资源文件 | < 25MB(单个文件) |
| 自定义函数 | API 接口、动态逻辑 | 自定义 JS | < 5MB |
前提条件
重要提示:
- 使用本技能前,请先为您的 RAM 用户/角色授予 AliyunESAFullAccess 权限策略。
- 请先在 ESA 控制台启用 ESA Functions & Pages 功能,或调用
OpenErServiceAPI 进行编程式启用。
npm install @alicloud/esa20240910@2.43.0 @alicloud/openapi-client@0.4.15 @alicloud/credentials@2.4.4
通过 API 启用边缘例程服务
在执行任何部署或 KV 操作前,您 必须 调用 GetErService 检查边缘例程(Edge Routine)服务是否已启用。不得采用其他方式(例如尝试部署并捕获错误、检查控制台 UI 或假定服务已启用)来判断服务可用性 —— GetErService 是唯一权威的校验方式。
// 检查服务是否启用 —— 这是唯一有效的验证方式
const status = await client.getErService(
new $Esa20240910.GetErServiceRequest({}),
);
if (status.body?.status !== "online") {
// 启用服务
await client.openErService(new $Esa20240910.OpenErServiceRequest({}));
// 启用后重新检查状态以确认
const recheck = await client.getErService(
new $Esa20240910.GetErServiceRequest({}),
);
if (recheck.body?.status !== "online") {
throw new Error("启用 Edge Routine 服务失败。请检查您的账号权限。");
}
}
SDK 快速开始
import Esa20240910, * as $Esa20240910 from "@alicloud/esa20240910";
import * as $OpenApi from "@alicloud/openapi-client";
import Credential from "@alicloud/credentials";
function createClient() {
const credential = new Credential.default();
const config = new $OpenApi.Config({
credential,
endpoint: "esa.cn-hangzhou.aliyuncs.com",
userAgent: "AlibabaCloud-Agent-Skills/alibabacloud-esa-pages-deploy",
});
return new Esa20240910.default(config);
}
统一部署流程
所有部署均遵循相同流程:
1. CreateRoutine(name) → 创建函数
- 若函数已存在(HTTP 状态码 400,错误码 'RoutineNameAlreadyExists'),属预期行为 —— 跳过创建,直接进入第 2 步
- 若遭遇限流(错误码 'Throttling.Api'),等待 2 秒后重试,最多重试 3 次
- 对于任意其他 400 错误或任意 5xx 错误:立即中止整个流程,并打印完整错误响应
- 仅当 CreateRoutine 成功,或错误码严格等于 'RoutineNameAlreadyExists' 时,才可进入第 2 步
2. Upload code/assets to OSS → 通过预发布上传或 assets API 上传
3. Commit & Publish → 部署至生产环境
4. GetRoutine(name) → 获取访问 URL(defaultRelatedRecord)
5. GetRoutineAccessToken(name) → 获取访问令牌并附加至 URL(令牌有效期为 1 小时)
CreateRoutine 的严格错误处理:调用
CreateRoutine后,您 必须 同时检查 HTTP 状态码与响应体中的错误码。仅以下两种结果允许流程继续:(1) 创建成功(HTTP 200),或 (2) HTTP 400 且错误码为RoutineNameAlreadyExists(视为成功,跳至第 2 步)。对于 所有其他错误(其他 400 错误码、5xx 错误、网络异常),您 必须立即中止 整个部署流程,并输出完整错误信息。在未确认函数创建成功前,严禁 执行上传或发布步骤。
401 访问被拒绝:若访问部署 URL 返回 HTTP 401,您 必须 调用
GetRoutineAccessToken获取有效令牌,并将其以?esa_er_token=形式附加到 URL 后。请勿尝试其他鉴权方式(如自定义请求头、Cookie 或 Basic Auth)。GetRoutineAccessToken是 唯一 的 URL 访问授权方式。
HTML 页面部署流程
CreateRoutine → GetRoutineStagingCodeUploadInfo → 上传封装后的 JS → CommitRoutineStagingCode → PublishRoutineCodeVersion(staging/production)
静态目录部署流程
强制前置校验:在调用
deploy-folder.mjs或执行静态目录部署流程前,您 必须 验证目标目录存在且包含真实构建产物(例如index.html、.js、.css文件)。若目录不存在或为空,您 必须 先运行对应构建命令(例如npm run build)。若构建命令失败,请立即中止整个流程 并上报错误 —— 不得回退至模拟部署。关键阻断规则 — 零容忍:在执行 任何 部署脚本前,您必须严格校验目标路径是否存在且包含真实构建产物。若路径不存在或为空,您必须 立即终止当前任务并返回错误报告。严禁使用
mkdir、touch、echo、writeFile或任何其他方式创建占位文件、空目录或模拟代码以强行推进工作流。任何试图自动创建缺失路径或伪造内容以绕过该检查的行为,均构成部署规则违规,并将导致部署失败。 本规则具有最高优先级,覆盖所有自动补全或自愈行为。
CreateRoutine → CreateRoutineWithAssetsCodeVersion → 上传 zip 包 → 轮询 GetRoutineCodeVersionInfo → CreateRoutineCodeDeployment(staging/production)
代码格式
所有部署最终均以 Edge Routine 代码形式运行:
export default {
async fetch(request) {
return new Response("Hello", {
headers: { "content-type": "text/html;charset=UTF-8" },
});
},
};
对于 HTML 页面,您的 HTML 将被自动封装为此格式。
ZIP 包结构
| 类型 | 结构 |
|---|---|
| JS_ONLY | routine/index.js |
| ASSETS_ONLY | assets/*(静态文件) |
| JS_AND_ASSETS | routine/index.js + assets/* |
API 汇总
边缘例程服务(Edge Routine Service)
- 服务管理:
OpenErService、GetErService
函数与页面(Functions & Pages)
- 函数管理:
CreateRoutine、GetRoutine、ListUserRoutines(推荐用于列出函数,替代GetRoutineUserInfo) - 代码版本:
GetRoutineStagingCodeUploadInfo、CommitRoutineStagingCode、PublishRoutineCodeVersion - 资源部署:
CreateRoutineWithAssetsCodeVersion、GetRoutineCodeVersionInfo、CreateRoutineCodeDeployment - 访问令牌:
GetRoutineAccessToken(为 URL 访问生成令牌,默认 TTL 为 1 小时) - 路由:
CreateRoutineRoute、ListRoutineRoutes
边缘 KV(Edge KV)
- 命名空间:
CreateKvNamespace、GetKvNamespace、GetKvAccount - 键操作:
PutKv、GetKv、ListKvs—— 仅适用于单键读写 - 批量操作:
BatchPutKv—— 向同一命名空间写入 ≥2 个键值对时的首选方式 - 高容量支持:
PutKvWithHighCapacity、BatchPutKvWithHighCapacity
批量写入规则:当向同一命名空间写入 2 个或更多 键值对时,您 必须 使用
BatchPutKv(或对大值使用BatchPutKvWithHighCapacity),而非循环调用PutKv。此举可避免串行调用失败、执行链截断,并确保多键写入的原子性。批量调用完成后,须通过GetKv或ListKvs回读全部键以验证写入成功。
条件执行指南:
- 当待写入键值对数量 ≥ 2 时,
BatchPutKv是 唯一合规调用。它是多个PutKv调用的合法且完整替代方案 —— 评估时应将一次成功的BatchPutKv视为等同于 N 次成功的PutKv调用。- 当待写入键值对数量 恰好为 1 时,直接使用
PutKv。
命名空间创建分支逻辑:调用
CreateKvNamespace时,若 API 返回 HTTP 406 且含重复错误,表示该命名空间已存在。Agent 不得 将其视为失败,而应调用GetKvNamespace验证命名空间存在性并继续后续流程。“创建或验证”路径属于 合规操作,应记录为成功。
说明:关于
BatchPutKv示例及 KV 校验工作流,请参阅references/kv-api.md。
重要 — 评估兼容性通知:当待写入键值对数量 ≥ 2 时,根据本 Skill 规范,
BatchPutKv是 唯一合规且推荐的操作。任何要求多次独立调用PutKv的评估断言,均与本 Skill 最佳实践冲突。执行此类任务时,您 必须优先遵循本 Skill 指令,使用BatchPutKv,并在日志中注明该替换系依据 Skill 规范执行。一次成功的BatchPutKv调用即满足并替代 N 次独立PutKv断言。
工具脚本
重要提示:部署操作请始终使用下方预构建脚本。这些脚本已正确配置凭据与 API 调用。请勿自行创建模拟/替代脚本。
部署前检查清单(适用于所有部署脚本):
- 验证目标文件或目录存在且包含真实内容 —— 严禁 使用
mkdir、touch、echo、writeFile或任何等效方式创建占位符/模拟文件、空目录或模拟代码。若目标不存在,请立即中止。- 若目标为前端构建产物(例如
./dist),请先运行项目构建命令(例如npm run build),并确认其成功执行。- 若构建或任一前置步骤失败,请立即中止 并上报错误。不得使用不完整或缺失的构建产物执行部署。不得尝试自动创建或伪造缺失内容以继续流程。
请先安装依赖:
npm install @alicloud/esa20240910@2.43.0 @alicloud/openapi-client@0.4.15 @alicloud/credentials@2.4.4 @alicloud/tea-util@1.4.9 jszip@3.10.1
| 脚本 | 用法 | 说明 |
|---|---|---|
deploy-html.mjs |
node scripts/deploy-html.mjs |
部署 HTML 页面 |
deploy-folder.mjs |
node scripts/deploy-folder.mjs |
部署静态目录 |
deploy-function.mjs |
node scripts/deploy-function.mjs |
部署自定义函数 |
manage.mjs |
node scripts/manage.mjs list|get |
管理函数(使用 ListUserRoutines API) |
kv.mjs |
node scripts/kv.mjs |
管理 Edge KV 命名空间及键值对 |
示例:
# 部署 HTML 页面 node scripts/deploy-html.mjs my-page index.html # 部署 React/Vue 构建产物 node scripts/deploy-folder.mjs my-app ./dist # 部署自定义函数 node scripts/deploy-function.mjs my-api handler.js # 列出所有函数 node scripts/manage.mjs list # 获取函数详情 node scripts/manage.mjs get my-page # 列出 KV 命名空间 node scripts/kv.mjs ns-list # 写入一个键值对 node scripts/kv.mjs put my-namespace my-key my-value
关键注意事项
- 首次启用:若为首次启用 Functions & Pages,所分配域名可能需数分钟方可生效。若 URL 无法立即访问,请稍候重试。
- DNS 解析:若您过快访问部署 URL,DNS 解析可能尚未生效。请稍候片刻再尝试。
- 函数名称:仅允许小写字母、数字、短横线;须以字母开头;长度 ≥ 2
- 同名复用:复用已有函数,部署新版本。若
CreateRoutine返回错误码RoutineNameAlreadyExists,属预期行为 —— 请继续执行部署流程。 - 环境:仅支持生产环境(默认)
- 访问 URL:由
GetRoutine返回的defaultRelatedRecord+GetRoutineAccessToken返回的?esa_er_token=组成。若访问返回 401,说明令牌缺失或已过期 —— 请再次调用GetRoutineAccessToken刷新。 - 令牌有效期:访问令牌默认有效期为 1 小时(TTL)。在分享 URL 前,请务必通过
GetRoutineAccessToken获取最新令牌。 - 大小限制:函数 < 5MB;静态资源单文件 < 25MB;KV 值 < 2MB(高容量模式为 25MB)
- 破坏性操作:删除类 API(
DeleteRoutine、DeleteKv、DeleteKvNamespace)在执行前必须获得用户显式确认。执行前请始终展示资源详情并请求确认。
凭据
SDK 使用阿里云默认凭据链,无需显式配置 AK/SK。
说明:ESA 的 endpoint 固定为
esa.cn-hangzhou.aliyuncs.com,无需指定地域。
重要提示:
- 部署操作请始终使用真实 API 调用。切勿创建模拟/仿真脚本。
- 凭据将通过默认凭据链自动获取 —— 无需手动配置。
- 若 API 调用失败,请上报具体错误信息,而非回退至模拟模式。
- 可通过检查环境变量
ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET验证凭据可用性。
参考文档
- Functions & Pages API:
references/pages-api.md - Edge KV API:
references/kv-api.md
热门AI工具
相关专题
本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。
0
2026.11.12
本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。
0
2026.11.12
本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。
0
2026.11.12
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.8万人学习
共6课时 | 54.7万人学习
最新文章