mcpField
A
alicloud-network-esa

alicloud-network-esa

github.com/cinience云与 DevOps396180 次安装11 周前更新
代码仓库

关于 alicloud-network-esa

通过 Alibaba Cloud 官方 Python SDK 管理 ESA 的技能,面向需要操作边缘站点、函数、存储和流量数据的云服务用户。涵盖部署、DNS 与缓存配置及分析查询。

主要功能

  1. 01部署 HTML 和静态资源
  2. 02管理边缘函数生命周期与路由
  3. 03操作边缘 KV 命名空间和键值
  4. 04管理站点、DNS 记录及缓存规则
  5. 05查询流量趋势和排名

适用场景

  1. 01将静态页面发布到边缘节点
  2. 02维护边缘函数及其路由
  3. 03管理站点 DNS 和缓存配置
  4. 04分析请求、流量及客户端维度

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cinience/alicloud-skills --skill alicloud-network-esa

安装后在 Claude Code 中输入/alicloud-network-esa确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
api_overview.md
cache.md
dns-records.md
endpoints.md
er.md
fields.md
kv.md
pages.md
rule-examples.md
rule-generation-guide.md
rule-match-fields.md
rule-operators.md
sites.md
sources.md
time-series.md
top-data.md
scripts/
check_site_status.py
list_dns_records.py
list_sites.py
query_analytics.py
summary_sites_by_plan.py

详细介绍

Category: service

边缘安全加速(ESA)—— Pages、Edge Routine、KV、站点管理、分析等

使用 Alibaba Cloud OpenAPI(RPC)和官方 Python SDK 管理 ESA 的所有功能。

Alibaba Cloud ESA 提供五项核心能力:

  • Pages — 将 HTML 或静态目录部署到边缘节点(基于 Edge Routine 的快速部署流程)
  • Edge Routine(ER) — 对无服务器边缘函数进行全生命周期管理
  • Edge KV — 分布式边缘键值存储,支持 Namespace/Key/Value 管理
  • 站点管理 — 站点管理、DNS 记录、缓存规则、证书等
  • 分析 — 流量分析、时序趋势、Top-N 排名、带宽统计、请求指标

统一使用 Python SDK 调用 ESA OpenAPI。

前提条件

  • 准备 AccessKey(遵循最小权限原则的 RAM 用户/角色)。
  • 安装 Python SDK:pip install alibabacloud_esa20240910 alibabacloud_tea_openapi alibabacloud_credentials
  • ESA OpenAPI 采用 RPC 风格;建议使用 SDK 或 OpenAPI Explorer,避免手动签名。

SDK 快速入门

from alibabacloud_esa20240910.client import Client as Esa20240910Client
from alibabacloud_esa20240910 import models as esa_models
from alibabacloud_tea_openapi import models as open_api_models


def create_client(region_id: str = "cn-hangzhou") -> Esa20240910Client:
    config = open_api_models.Config(
        region_id=region_id,
        endpoint="esa.cn-hangzhou.aliyuncs.com",
    )
    return Esa20240910Client(config)

Pages——边缘页面部署

Pages 是基于 Edge Routine 的快速部署流程,可将 HTML 或静态目录部署到边缘节点。

HTML 页面部署流程
CreateRoutine → GetRoutineStagingCodeUploadInfo → Upload code to OSS
→ CommitRoutineStagingCode → PublishRoutineCodeVersion(staging)
→ PublishRoutineCodeVersion(production) → GetRoutine(get access URL)
静态目录部署流程
CreateRoutine → CreateRoutineWithAssetsCodeVersion → Package zip and upload to OSS
→ Poll GetRoutineCodeVersionInfo(wait for available)
→ CreateRoutineCodeDeployment(staging) → CreateRoutineCodeDeployment(production)
→ GetRoutine(get access URL)
Zip 包结构

Zip 包结构取决于 EDGE_ROUTINE_TYPE(根据入口文件和 assets 目录是否存在,由 checkEdgeRoutineType 自动确定):

  • JS_ONLY:routine/index.js(使用 esbuild 打包,或使用 --no-bundle 直接读取源文件)
  • ASSETS_ONLY:assets/ 下的所有静态文件,保留原始目录结构
  • JS_AND_ASSETS:routine/index.js + assets/ 静态资源(最常见)

assets/ 路径相对于配置中的 assets.directory。配置优先级:CLI 参数 > esa.jsonc / esa.toml。

重要说明
  • 函数名称规则:小写字母/数字/连字符,以小写字母开头,长度 >= 2
  • 同名函数:若已存在则复用,并部署新版本代码
  • 默认部署到预发环境和生产环境
  • 部署成功后,通过 GetRoutine 获取 defaultRelatedRecord 作为访问域名

详细参考:references/pages.md

Edge Routine(ER)——边缘函数

通过 Python SDK 管理无服务器边缘函数的完整生命周期。

核心工作流
CreateRoutine → GetRoutineStagingCodeUploadInfo → Upload code to OSS
→ CommitRoutineStagingCode → PublishRoutineCodeVersion
→ (CreateRoutineRoute) → GetRoutine
API 摘要
  • 函数管理:CreateRoutine、DeleteRoutine、GetRoutine、GetRoutineUserInfo、ListUserRoutines
  • 代码版本:GetRoutineStagingCodeUploadInfo、CommitRoutineStagingCode、PublishRoutineCodeVersion、DeleteRoutineCodeVersion
  • 路由:CreateRoutineRoute、UpdateRoutineRoute、DeleteRoutineRoute、GetRoutineRoute、ListRoutineRoutes、ListSiteRoutes
  • 关联记录:CreateRoutineRelatedRecord、DeleteRoutineRelatedRecord、ListRoutineRelatedRecords
ER 代码格式
export default {
  async fetch(request) {
    return new Response("Hello", {
      headers: { "content-type": "text/html;charset=UTF-8" },
    });
  },
};

详细参考:references/er.md

Edge KV——边缘键值存储

分布式边缘键值存储,可在 Edge Routine 中读写,也可通过 OpenAPI/SDK 管理。

核心概念
  • Namespace:KV 数据的隔离容器,Key 最长 512 个字符,Value 最大 2MB(高容量为 25MB)
  • 支持 TTL 过期:Expiration(Unix 时间戳)或 ExpirationTtl(秒)
API 摘要
  • Namespace:CreateKvNamespace、DeleteKvNamespace、GetKvNamespace、GetKvAccount、DescribeKvAccountStatus
  • 单 Key 操作:PutKv、GetKv、GetKvDetail、DeleteKv、PutKvWithHighCapacity
  • 批量操作:BatchPutKv、BatchDeleteKv、BatchPutKvWithHighCapacity、BatchDeleteKvWithHighCapacity、ListKvs
快速入门
client = create_client()

# Create namespace
client.create_kv_namespace(esa_models.CreateKvNamespaceRequest(namespace="my-ns"))

# Write
client.put_kv(esa_models.PutKvRequest(namespace="my-ns", key="k1", value="v1"))

# Read
resp = client.get_kv(esa_models.GetKvRequest(namespace="my-ns", key="k1"))

详细参考:references/kv.md

站点管理——站点管理

使用 Python SDK 管理 ESA 站点、DNS 记录、缓存规则等。

API 行为说明
  • 大多数列表 API 支持通过 PageNumber + PageSize 分页。
  • ListSites 会返回所有区域中的站点;无需遍历各个区域。
  • 新创建的站点状态为 pending;通过 VerifySite 完成访问验证后即可激活。
  • 删除站点会移除所有关联配置。
  • UpdateSiteAccessType 可在 CNAME 和 NS 之间切换,但如果存在不兼容的 DNS 记录,切换到 CNAME 可能会失败。
  • DNS 记录 API(CreateRecord、ListRecords 等)适用于通过 NS 和 CNAME 接入的站点。CNAME 站点仅支持 CNAME 和 A/AAAA 类型,且记录不能禁用加速(必须保持代理启用)。
  • DNS 记录的 Type 参数必须完全匹配:使用 A/AAAA(而非 A)、CNAME、MX、TXT、NS、SRV、CAA。
  • CreateCacheRule 支持两种配置类型:global(站点级默认配置)和 rule(带匹配表达式的条件规则)。
工作流
  1. 确认目标站点 ID、接入类型(CNAME/NS)和所需操作。
  2. 在 references/api_overview.md 中查找 API 分组和准确的操作名称。
  3. 使用 Python SDK(首选)或 OpenAPI Explorer 调用 API。
  4. 使用 describe/list API 验证结果。
  5. 如果需要可重复使用的清单或摘要,请使用 scripts/,并将输出写入 output/alicloud-network-esa/。
SDK 优先级
  1. Python SDK(首选)
  2. OpenAPI Explorer
  3. 其他 SDK(仅在无法使用 Python 时)
Python SDK 脚本(推荐用于生成清单)
  • 列出所有 ESA 站点:scripts/list_sites.py
  • 按套餐汇总站点:scripts/summary_sites_by_plan.py
  • 检查站点状态:scripts/check_site_status.py
  • 列出站点的 DNS 记录:scripts/list_dns_records.py

分析 — 流量分析

使用 DescribeSiteTimeSeriesData 和 DescribeSiteTopData API 查询和分析 ESA 站点流量数据。

核心功能
  • 时间序列数据:按可配置的时间粒度查询流量趋势
  • Top-N 排名:按国家/IP/主机/路径/状态码维度获取排名
  • 多种指标:Traffic、Requests、RequestTraffic、PageView
  • 丰富的维度:国家、省份、ISP、浏览器、设备、主机、路径、状态码等
两个主要 API
1. DescribeSiteTimeSeriesData - 时间序列趋势

查询一段时间内的流量趋势,并返回聚合后的数据点。

时间粒度规则:

时间范围间隔间隔值
<= 3 小时1 分钟60
3-12 小时5 分钟300
12 小时 - 1 天15 分钟900
1-10 天1 小时3600
10-31 天1 天86400
2. DescribeSiteTopData - Top-N 排名

按不同维度查询 Top-N 排名数据。

数量选项: 5、10、150

可用指标(FieldName)
字段类型说明
Trafficint从 ESA 到客户端的响应流量(字节)
Requestsint请求数
RequestTrafficint客户端请求流量(字节)
PageViewint页面浏览量
可用维度

地理维度: ClientCountryCode(国家)、ClientProvinceCode(省份)、ClientISP(ISP)、ClientASN

客户端信息: ClientIP、ClientIPVersion、ClientBrowser、ClientDevice、ClientOS

请求详情: ClientRequestHost、ClientRequestMethod、ClientRequestPath、ClientRequestProtocol、ClientRequestQuery、ClientRequestReferer、ClientRequestUserAgent

响应/缓存: EdgeCacheStatus、EdgeResponseStatusCode、EdgeResponseContentType、OriginResponseStatusCode

其他: ALL(聚合)、SiteId(账户级查询)、Version、ClientSSLProtocol、ClientXRequestedWith

错误处理
HTTP 代码错误代码说明
400InvalidParameter.TimeRange时间范围超出限制(最长 31 天)
400InvalidEndTime.MismatchEndTime 早于 StartTime
400InvalidParameter.Field字段名称无效
400InvalidParameter.Dimension维度无效
400InvalidTime.Malformed时间格式错误(请使用 yyyy-MM-ddTHH:mm:ssZ)

详细参考:references/time-series.md、references/top-data.md、references/fields.md

常见操作映射

站点管理
  • 创建站点:CreateSite
  • 列出站点:ListSites(支持 SiteName、Status、AccessType、Coverage 筛选条件)
  • 获取站点详情:GetSite
  • 删除站点:DeleteSite
  • 检查站点名称是否可用:CheckSiteName
  • 验证站点所有权:VerifySite
  • 更新访问类型:UpdateSiteAccessType
  • 更新覆盖范围:UpdateSiteCoverage
  • 获取当前名称服务器:GetSiteCurrentNS
  • 更新自定义名称服务器:UpdateSiteVanityNS
  • 暂停/恢复站点:UpdateSitePause、GetSitePause
  • 站点独占设置:UpdateSiteNameExclusive、GetSiteNameExclusive
  • 版本管理:ActivateVersionManagement、DeactivateVersionManagement
站点配置
  • IPv6:GetIPv6、UpdateIPv6
DNS 记录

NS 访问:支持所有记录类型。CNAME 访问:仅支持 CNAME 和 A/AAAA,代理必须保持启用。

  • 创建记录:CreateRecord
  • 列出记录:ListRecords(支持 Type、RecordName、Proxied 筛选条件)
  • 获取记录:GetRecord
  • 更新记录:UpdateRecord
  • 删除记录:DeleteRecord
  • 批量创建:BatchCreateRecords
  • 导出记录:ExportRecords
缓存规则
  • 创建缓存规则:CreateCacheRule
  • 列出缓存规则:ListCacheRules
  • 获取缓存规则:GetCacheRule
  • 更新缓存规则:UpdateCacheRule
  • 删除缓存规则:DeleteCacheRule

缓存规则表达式说明(重要):

  • CreateCacheRule 参数是扁平的,而不是嵌套的 JSON Rule 对象。
  • Rule 参数是匹配条件表达式字符串。请参阅下方的规则表达式语法部分。
  • 快速提示:ends_with()/starts_with() 必须使用函数调用形式;matches(正则表达式)要求标准版或更高版本。
  • 使用 --EdgeCacheMode override_origin --EdgeCacheTtl <seconds> 设置边缘缓存 TTL。

规则表达式语法

ESA 在多项功能中使用统一的规则引擎表达式语法(缓存规则、WAF 自定义规则、速率限制、URL 重写、标头修改等)。

使用场景

对于任何接受匹配条件表达式的 ESA API,请在其 Rule 参数中使用此语法:

  • CreateCacheRule / UpdateCacheRule - 缓存规则
  • CreateWafRule / UpdateWafRule - WAF 自定义规则
  • CreateRatePlanRule - 速率限制规则
  • CreateRewriteUrlRule / UpdateRewriteUrlRule - URL 重写规则
  • 源站规则、重定向规则、标头修改规则等
表达式格式
(condition)
(condition1 and condition2)
(condition1) or (condition2)

最大嵌套深度:2 层。

运算符语法——两种形式

中缀形式(运算符位于字段和值之间):

(field eq "value")
(field ne "value")
(field contains "value")
(field in {"value1" "value2"})
(field matches "regex")

函数形式(运算符包裹字段):

(starts_with(field, "value"))
(ends_with(field, "value"))
(exists(field))
(len(field) gt 100)
(lower(field) eq "value")
常见模式
# Match file extension
--Rule '(http.request.uri.path.extension eq "html")'

# Match multiple extensions
--Rule '(http.request.uri.path.extension in {"js" "css" "png" "jpg"})'

# Match URL prefix
--Rule '(starts_with(http.request.uri, "/api/"))'

# Match URL suffix
--Rule '(ends_with(http.request.uri, ".html"))'

# Match URL containing substring (value MUST start with /)
--Rule '(http.request.uri contains "/test")'

# Match specific host
--Rule '(http.host eq "www.example.com")'

# Combined conditions
--Rule '(http.request.uri contains "/test" and ip.geoip.country eq "CN")'

# Match by country
--Rule '(ip.geoip.country eq "CN")'

# Exclude path
--Rule '(not starts_with(http.request.uri, "/admin/"))'

# Negating set membership
--Rule '(not http.host in {"a.com" "b.com"})'
关键注意事项
  1. ends_with 和 starts_with 必须使用函数调用语法,不能使用中缀形式。
  2. matches(正则表达式)要求标准版或更高版本;基础版会返回 RuleRegexQuotaCheckFailed。
  3. URI 中使用 contains 时必须包含路径分隔符:"/test" 正确;单独使用 "test" 会导致 CompileRuleError。
  4. in 运算符中的列表值必须在大括号内以空格分隔:{"a.com" "b.com"}。
  5. 单个条件的外层括号可选。
  6. “不等于”请使用 ne,切勿使用 not...eq。
  7. 对集合成员关系取反时,请使用 not...in(放在字段前),而不是 not in。
计划限制
计划eq/ne/in/starts_with/ends_withcontainsmatches (regex)
Basic支持支持不支持
Standard支持支持支持
Enterprise支持支持支持

AccessKey 优先级(必须遵循,与 README 保持一致)

  1. 环境变量:ALICLOUD_ACCESS_KEY_ID / ALICLOUD_ACCESS_KEY_SECRET / ALICLOUD_REGION_ID 地域策略:ALICLOUD_REGION_ID 是可选的默认值。如果未设置,请为任务选择最合理的地域;如果不明确,请询问用户。
  2. 共享配置文件:~/.alibabacloud/credentials(地域仍从环境变量获取)
身份验证设置(与 README 保持一致)

环境变量:

export ALICLOUD_ACCESS_KEY_ID="your-ak"
export ALICLOUD_ACCESS_KEY_SECRET="your-sk"
export ALICLOUD_REGION_ID="cn-hangzhou"

Alibaba Cloud SDK 也支持:

export ALIBABA_CLOUD_ACCESS_KEY_ID="your-ak"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your-sk"

共享配置文件:

~/.alibabacloud/credentials

[default]
type = access_key
access_key_id = your-ak
access_key_secret = your-sk

API 发现

  • 产品代码:ESA
  • 默认 API 版本:2024-09-10
  • 元数据端点:https://api.aliyun.com/meta/v1/products/ESA/versions/2024-09-10/api-docs.json
  • 使用 OpenAPI 元数据端点列出 API 并获取架构(参见参考资料)。

输出策略

如果需要保存响应或生成的产物,请将它们写入: output/alicloud-network-esa/

参考资料

Pages、ER 和 KV
  • Pages 部署参考:references/pages.md
  • Edge Routine 参考:references/er.md
  • Edge KV Storage 参考:references/kv.md
站点管理
  • API 概览:references/api_overview.md
  • 端点:references/endpoints.md
  • 站点:references/sites.md
  • DNS 记录:references/dns-records.md
  • 缓存:references/cache.md
  • 源站:references/sources.md
  • 规则表达式 - 生成指南:references/rule-generation-guide.md
  • 规则表达式 - 匹配字段:references/rule-match-fields.md
  • 规则表达式 - 运算符:references/rule-operators.md
  • 规则表达式 - 示例:references/rule-examples.md
分析
  • 时间序列数据 API:references/time-series.md
  • Top-N 数据 API:references/top-data.md
  • 指标和维度参考:references/fields.md

评论

支持 Markdown