Supabase Edge Functions 编写与部署完整指南:Deno 运行时上的无服务器利器

【免费下载链接】supabase The Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications. 【免费下载链接】supabase 项目地址: https://gitcode.com/GitHub_Trending/supa/supabase

Supabase Edge Functions 是基于 Deno 运行时编写、面向 Web 的无服务器函数服务,帮你把后端逻辑部署到全球边缘节点。作为 Postgres 开发平台的核心能力之一,它让你用 TypeScript 就能快速搭建低延迟的 API 端点、Webhook 接收器和 AI 集成服务,无需管理任何服务器。本文将从零带你完成一个 Edge Function 的创建、本地调试与全球部署。

什么是 Supabase Edge Functions?

简单来说,Edge Functions 就是一组运行在全球边缘节点上的 TypeScript 函数。你的代码会被分发到离用户最近的区域执行,带来极低的网络延迟。

它为什么好用?核心在于选择了 Deno 作为运行时的设计取舍:

  • 开源且可移植:函数既能在本地运行,也能跑在任何 Deno 兼容平台上
  • TypeScript 优先:无需编译步骤,原生支持类型检查,还支持 WASM
  • 全球分发:部署一次,自动覆盖全球边缘位置
  • 与 Supabase 生态无缝集成:可直接调用 Auth、Postgres、Storage 等全部能力

📌 官方文档对请求流程的概括:请求先进入边缘网关(relay)完成路由与 JWT 鉴权,再由边缘运行时(Edge Runtime)执行你的函数,最后响应经网关返回客户端,全程记录日志与指标。

工作流程一图看懂

在 Supabase 控制台创建 Edge Function 的三种方式:浏览器编辑器、AI Assistant 与 CLI

一个 Edge Function 的完整生命周期可以概括为 写代码 → 本地调试 → 一键部署 → 全球调用

  1. 创建函数:用 CLI 脚手架生成模板,或在控制台直接用 AI Assistant 生成
  2. 本地运行:通过 Docker 启动本地 Supabase 环境,支持热重载
  3. 部署上线:一条命令把函数分发到全球边缘节点
  4. 调用函数:在你的 App 中通过 HTTP 请求或 Supabase SDK 调用

关于每个阶段的细节,可参考官方快速上手文档:functions 快速开始部署指南

5 分钟创建第一个函数(本地开发环境搭建)

第一步:初始化项目并生成函数

安装 Supabase CLI 后,在项目目录执行两个命令即可:

supabase init                    # 初始化项目,生成 supabase/ 目录
supabase functions new hello-world  # 生成函数模板

这条命令会在 supabase/functions/hello-world/index.ts 生成一个带鉴权处理的基础模板:接收一个 JSON 请求体,返回问候消息。模板默认使用 Supabase Auth 保护端点,你也可以用 --auth 标志调整鉴权策略。

第二步:启动本地运行时

supabase start                      # 启动本地全套 Supabase 服务(需 Docker)
supabase functions serve hello-world  # 热重载运行你的函数

本地函数运行在 http://localhost:54321/functions/v1/hello-world,保存代码即自动热重载——这是它比传统后端开发体验轻快的关键。

第三步:发送测试请求

在控制台打开浏览器编辑器(也可在本地调试),用 curl 或控制台的测试面板发一个 POST 请求,带上 Publishable Key 和 {"name":"Functions"} 作为请求体,你会收到:

{ "message": "Hello Functions!" }

在控制台直接编写与测试(免 CLI 方案)

如果你更喜欢纯图形界面,Supabase Dashboard 提供了完整的在线开发体验。

Supabase Dashboard 中的 Edge Function 代码编辑器与模板选择器

打开控制台后点击 "Deploy a new function",你会看到三个入口:Via Editor(浏览器内编写部署)、Via AI Assistant(让 AI 帮你写)、Via CLI(本地开发 + 版本控制)。编辑器内置了模板库——从 Simple Hello World 到 Supabase Database Access、Storage 上传、Express Server 等,选一个模板,改几行,点 "Deploy function" 即可上线。

测试同样不用离开浏览器:

在 Supabase 控制台测试 Edge Function 的 HTTP 请求面板

测试面板可以设置 HTTP 方法、请求体、请求头,并选择以 service role 等身份发起调用,响应状态码(如 200)和返回 JSON 一目了然,体验类似 Postman。

🤖 如果你不确定怎么写,AI Assistant 可以直接根据自然语言生成完整函数。例如输入"创建一个处理 Stripe 支付的 Edge Function",它会生成包含 Stripe SDK 调用、错误处理的完整代码,点击 Deploy 即可部署。

用 Supabase AI Assistant 自动生成 Stripe 支付 Edge Function

最快部署方法:一条命令上线全球

本地调试满意后,把函数部署到生产环境只需三步:

supabase login                              # 首次使用需登录认证
supabase link --project-ref your-project-id  # 关联远程项目
supabase functions deploy hello-world       # 部署到全球边缘网络

部署成功后,你的函数立刻在全球可访问:https://<project-id>.supabase.co/functions/v1/hello-world

几个实用细节:

  • 批量部署:不带函数名执行 supabase functions deploy,会部署 functions 目录下所有函数
  • 无 Docker 环境:CLI 会自动回退到 API 方式部署,或用 --use-api 显式指定
  • CI/CD 自动化:配合 GitHub Actions、GitLab CI 或 Bitbucket Pipelines,代码合并到主分支即自动部署,官方文档提供了完整配置示例,见部署与 CI/CD 指南
  • 逐函数配置:每个函数的 JWT 校验等选项可写在 config.toml 中,保证各环境行为一致

在应用中调用已部署的函数,用 Supabase JS 客户端一行搞定:

const { data, error } = await supabase.functions.invoke('hello-world', {
  body: { name: 'JavaScript' },
})

安全管理密钥:Secrets 最佳实践

无服务器函数调用第三方 API 时,绝不能把密钥硬编码在代码里。Supabase 为 Edge Functions 内置了密钥管理:

  • 默认密钥SUPABASE_URLSUPABASE_DB_URLSUPABASE_PUBLISHABLE_KEYS 等开箱即用
  • 自定义密钥:在控制台创建,或通过 CLI 设置 supabase secrets set KEY=value
  • 读取方式:函数内用 Deno.env.get('KEY') 安全访问

Supabase 控制台中的 Secret keys 密钥管理界面

本地开发时,密钥放在 supabase/functions/.env 文件中,supabase start 时自动加载;记得把它加进 .gitignore永远不要提交到版本库。详细规范见环境变量文档

⚠️ 注意:service_role 等秘密密钥可绕过行级安全策略(RLS),只能用在 Edge Functions 这类服务端环境,严禁暴露到浏览器。

排查问题:日志与调试技巧

函数上线后,控制台提供完整的可观测性面板:

Supabase 控制台中查看 Edge Function 调用日志与指标

在 Functions 详情页的 Invocations 标签下,你可以看到每次调用的状态码、时间戳、请求体与部署版本,还有按时间分布的调用图表——排查线上问题基本靠它。

更深入的调试可以直接用 Chrome DevTools:

使用 Chrome DevTools 为本地 Edge Function 打断点调试

本地 supabase functions serve 运行时,用 DevTools 附加到 Deno 进程即可设置断点、查看作用域变量,和调试前端一样顺手。更多排障思路见调试指南错误处理文档

适合什么场景?以及一个避坑提醒

推荐场景(来自官方指南):

场景说明
低延迟 HTTP 端点公开或需鉴权的 API
Webhook 接收Stripe 支付、GitHub 事件等
AI 集成编排 OpenAI 等外部 LLM 调用
邮件与消息机器人Slack、Discord、Telegram Bot
图片生成Open Graph 图片、按需处理

⚠️ 一个重要的避坑提醒:Edge Functions 可能存在冷启动,且适合短生命周期、幂等的操作。如果你有长时间运行的重任务(如大批量数据处理),不要塞进 Edge Function,而应交给后台任务处理。另外,Postgres 在边缘环境下应视为"远程连接池服务"——使用连接池或服务端驱动,参考连接 Postgres 指南

总结:从本地到全球的完整路线

回顾一下这条无服务器开发路线:

  1. 创建supabase functions new 或控制台 AI Assistant 生成函数
  2. 开发supabase functions serve 本地热重载调试
  3. 配置:Secrets 管理第三方密钥,Deno.env.get() 安全读取
  4. 部署supabase functions deploy 一条命令全球上线
  5. 运维:控制台查看调用日志,DevTools 深度调试

想继续深入,仓库里有一个包含 40+ 真实场景的示例集合,从 Stripe Webhook、Telegram Bot 到 WASM 模块、单元测试,覆盖几乎所有常见玩法:

掌握 Edge Functions,你就拥有了 Postgres 数据库之上完整的无服务器后端能力——把数据库、认证、存储和函数编排放在一起,构建 Web、移动端与 AI 应用会变得前所未有地简单。

【免费下载链接】supabase The Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications. 【免费下载链接】supabase 项目地址: https://gitcode.com/GitHub_Trending/supa/supabase

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐