边缘安全加速平台 EO Functions

Edge Functions 运行在 EdgeOne 全球边缘节点上,提供 Serverless 代码执行环境。你只需编写业务函数代码并部署到 Makers 项目中,即可在靠近用户的边缘节点上弹性、安全地运行代码,无需配置和管理服务器等基础设施。

相关产品
边缘安全加速平台 EO 产品页,含版本规格、价格与购买入口。

一、优势

分布式部署

EdgeOne 拥有 3200+ 边缘节点,边缘函数以分布式部署的方式运行在边缘节点。

超低延迟

客户端请求将自动被调度至靠近你用户最近的边缘节点上,命中触发规则触发边缘函数对请求进行处理并响应结果给客户端,可显著降低客户端的访问时延。

弹性扩容

边缘函数可以根据客户端请求数的突增,由近及远地将请求调度至有充足计算资源的边缘节点处理,你无需担忧突发场景。

Serverless 架构

你无需再关心和维护底层服务器的内存、CPU、网络和其他基础设施资源,可以抽出精力更专注于业务代码的开发。

二、快速开始

在项目的 ./edge-functions/api 目录下新建 hello.js,使用以下示例代码创建你的第一个 Edge Function:

// ./edge-functions/api/hello.jsexport default function onRequest(context) { return new Response('Hello from Edge Functions!');}

三、路由

Edge Functions 基于 /edge-functions 目录结构生成访问路由。你可在项目仓库 /edge-functions 目录下创建任意层级的子目录,参考下述示例。

…edge-functions├── index.js├── hello-pages.js├── helloworld.js├── api ├── users ├── list.js ├── geo.js ├── [id].js ├── visit ├── index.js ├── [[default]].js…

上述目录文件结构,经 EdgeOne Makers 平台构建后将生成以下路由。这些路由将 Makers URL 映射到 /edge-functions 文件,当客户端访问 URL 时将触发对应的文件代码运行:

文件路径 路由
/edge-functions/index.js example.com/
/edge-functions/hello-pages.js example.com/hello-pages
/edge-functions/helloworld.js example.com/helloworld
/edge-functions/api/users/list.js example.com/api/users/list
/edge-functions/api/users/geo.js example.com/api/users/geo
/edge-functions/api/users/[id].js example.com/api/users/1024
/edge-functions/api/visit/index.js example.com/api/visit
/edge-functions/api/[[default]].js example.com/api/books/listexample.com/api/books/1024example.com/api/…

注意:说明:

动态路由

Edge Functions 支持动态路由,上述示例中一级动态路径 /edge-functions/api/users/[id].js,多级动态路径 /edge-functions/api/[[default]].js。参考下述用法:

文件路径 路由 匹配
/edge-functions/api/users/[id].js example.com/api/users/1024 是
 example.com/api/users/vip/1024 否
 example.com/api/vip/1024 否
/edge-functions/api/[[default]].js example.com/api/books/list 是
 example.com/api/1024 是
 example.com/v2/vip/1024 否

四、Function Handlers

使用 Function Handlers 可为 Makers 创建自定义请求处理程序,以及定义 RESTful API 实现全栈应用。支持下述 Handlers 方法:

Handlers 方法 描述
onRequest(context: EventContext): Response | Promise<Response> 匹配 HTTP Methods (GET, POST, PATCH, PUT, DELETE, HEAD, OPTIONS)
onRequestGet(context: EventContext): Response | Promise<Response> 匹配 HTTP Methods (GET)
onRequestPost(context: EventContext): Response | Promise<Response> 匹配 HTTP Methods (POST)
onRequestPatch(context: EventContext): Response | Promise<Response> 匹配 HTTP Methods (PATCH)
onRequestPut(context: EventContext): Response | Promise<Response> 匹配 HTTP Methods (PUT)
onRequestDelete(context: EventContext): Response | Promise<Response> 匹配 HTTP Methods (DELETE)
onRequestHead(context: EventContext): Response | Promise<Response> 匹配 HTTP Methods (HEAD)
onRequestOptions(context: EventContext): Response | Promise<Response> 匹配 HTTP Methods (OPTIONS)

EventContext 对象描述

context 是传递给 Function Handlers 方法的对象,包含下述属性:

·request:客户端请求对象 Request。

·params:动态路由 /edge-functions/api/users/[id].js 参数值。

export function onRequestGet(context) { return new Response(`User id is ${context.params.id}`);}

·env:Makers 环境变量。

·waitUntil:(task: Promise<any>): void; 用于通知边缘函数等待 Promise 完成,可延长事件处理的生命周期。

五、Runtime APIs

Edge Functions 基于 边缘函数 实现,提供了 EdgeOne 边缘节点的 Serverless 代码执行环境。支持 ES6 语法和标准的 Web Service Worker API。其中大部分 Runtime APIs 可参考 边缘函数 用法,参考下述描述:

API 描述
Cache Cache 基于 Web APIs 标准 Cache API 进行设计。Functions 运行时会在全局注入 caches 对象,该对象提供了一组缓存操作接口。
Cookies Cookies 提供了一组 cookie 操作接口。
Encoding 基于 Web APIs 标准 TextEncoder、TextDecoder 进行设计,实现了编码器与解码器。
Fetch 基于 Web APIs 标准 Fetch API 进行设计。边缘函数运行时可使用 fetch 发起异步请求,获取远程资源。
Headers Headers 基于 Web APIs 标准 Headers 进行设计。可用于 HTTP request 和 response 的头部操作。
Request Request 代表 HTTP 请求对象,基于 Web APIs 标准 Request 进行设计。
Response Response 代表 HTTP 响应,基于 Web APIs 标准 Response 进行设计。
Streams ReadableStream 可读流,也称为可读端,基于 Web APIs 标准 ReadableStream 进行设计。
Web Crypto Web Crypto API 基于 Web APIs 标准 Web Crypto API 进行设计。提供了一组常见的加密操作接口,相比纯 JavaScript 实现的加密接口,Web Crypto API 的性能更高。
Web Standards 边缘函数基于 V8 JavaScript 引擎设计实现的 Serverless 代码执行环境,提供了以下标准化的 Web APIs。

注意:说明:

六、使用限制

内容 限制 说明
代码包大小 5 MB 单个函数代码包大小最多支持 5 MB。
请求 body 大小 1 MB 客户端请求携带 body 最多支持 1 MB。
CPU 时间 200 ms 函数单次执行分配的 CPU 时间片,不包含 I/O 等待时间。
开发语言 JavaScript 目前仅支持 JavaScript,ES2023+。

七、示例模板

获取用户访问地理位置:

预览地址

源码地址

使用 KV 记录页面访问数:

预览地址

源码地址

有关如何使用 KV 存储的详细信息,请参阅 KV 存储。

连接 Supabase 第三方数据库:

预览地址

源码地址

赞 (0)
上一篇 4天前
下一篇 4天前