在AnalyticDB Supabase中使用边缘函数
云原生数据仓库AnalyticDB PostgreSQL版Supabase(简称AnalyticDB Supabase) Edge Functions是一项全托管边缘计算服务,允许您将TypeScript Deno函数部署到AnalyticDB Supabase项目中。与开源自托管的Supabase相比,AnalyticDB Supabase提供了完整的Edge Functions管理能力,确保您的代码和数据完全自主可控,同时提供与Supabase Cloud一致的开发体验。本文为您介绍AnalyticDB Supabase Edge Function的部署与管理操作,以及Secrets的配置与集中管理能力,帮助您快速构建安全可控的边缘计算应用。
功能简介
AnalyticDB Supabase Edge Functions提供了一套基于Deno的边缘计算方案,为全栈应用开发者带来现代化的无服务器体验。
开源社区提供的Supabase,其函数管理后台未开放源码,自建用户无法通过图形界面或命令行工具完成生产环境部署。AnalyticDB Supabase通过打造自有的Edge Functions管控平台解决了这一问题,并且所有代码和配置数据都驻留在您的私有环境中,实现功能真正可用和自主可控。
此外,AnalyticDB Supabase还提供原生的Edge Function Secrets配置与集中管理能力,可将敏感信息(如阿里云百炼平台API Key)安全地存放在密钥库中,通过Deno.env.get读取,避免硬编码或客户端暴露。
优势
TypeScript原生开发:无需编译打包,TypeScript源码直接部署,开发流程更简洁。
生态互通:函数内可直接访问Supabase数据库、用户鉴权、对象存储等服务,无需额外配置。
隔离与高性能:借助沙箱机制和Deno安全模型,确保每个请求独立运行,同时实现毫秒级响应和几乎无感的冷启动。
使用流程
部署Edge Function
使用Dashboard部署
在Dashboard侧边栏单击Edge Function>Functions。
单击页面右上角的Deploy a new function,在下拉选项中选择Via Editor。

在代码编辑器中编写代码。
重要如需在Function中导入第三方依赖或调用公网API,需要为云原生数据仓库AnalyticDB PostgreSQL版Supabase项目开通公网访问。
本文示例如下,包含
index.ts(入口文件)和 foo.ts。index.ts文件如下:import { foo } from './foo.ts'; console.info('server started'); Deno.serve(async (req)=>{ const { name } = await req.json(); const data = { message: `Hello ${foo()} ${name}!` }; return new Response(JSON.stringify(data), { headers: { 'Content-Type': 'application/json', 'Connection': 'keep-alive' } }); });foo.ts文件如下:export function foo() { return 'bar'; }
在右下角编辑Edge Function的名称,然后单击Deploy部署。
使用functions-cli工具部署
获取并配置目标项目的
SUPABASE_API_URL与SUPABASE_API_KEY。SUPABASE_API_KEY为service role key,配置信息获取请参见获取API Keys。可通过以下方式完成配置。环境变量:
export SUPABASE_API_KEY=xxx.env文件:SUPABASE_API_KEY=xxx命令行参数:
-key xxx
通过环境变量配置示例如下:
export SUPABASE_API_URL=https://sbp-xxx.supabase.opentrust.net export SUPABASE_API_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoic2Vxxxx准备函数文件。
本文函数目录结构如下,包含
index.ts(入口文件)和foo.ts。supabase └── functions └── hello ├── foo.ts └── index.tsindex.ts文件如下:import { foo } from './foo.ts'; console.info('server started'); Deno.serve(async (req)=>{ const { name } = await req.json(); const data = { message: `Hello ${foo()} ${name}!` }; return new Response(JSON.stringify(data), { headers: { 'Content-Type': 'application/json', 'Connection': 'keep-alive' } }); });foo.ts文件如下:export function foo() { return 'bar'; }
下载functions-cli工具。后续执行相关命令时,请将
functions-cli替换为下载的cli工具名称。执行部署。
./functions-cli deploy hello说明部署命令会在当前执行命令的目录下查找
supabase/functions/路径,并寻找名为hello的函数目录。如果执行报错“At least one file is required”,请登录控制台,在目标Supabase项目所在行的操作列,选择后重试。如果您的项目当前版本为v1.0.0,升级后会更新数据库连接串。
测试Edge Function
通过Dashboard测试
单击Functions页面右上角的Test按钮。

在面板中单击右下角的Send Request。

使用curl命令测试
复制Details页签下的curl命令,并将其中的[YOUR ANON KEY]替换为anon key或service role key。

返回示例如下:

更新Edge Function
在Dashboard侧边栏单击Edge Function>Functions,然后单击目标Function。

单击Code页签,编辑目标文件。
单击右下角的Deploy updates按钮更新Edge Function。

迁移Edge Function
从Supabase Cloud迁移至AnalyticDB Supabase
步骤一:获取并配置项目信息
获取源端个人访问令牌。
在Access Tokens页面,单击Generate new token。

输入令牌名称,单击Generate token。

复制并妥善保存该令牌。
获取源端Project Ref。
访问 Supabase 控制台。
单击源端项目,查看URL(例如
https://supabase.com/dashboard/project/qeqfhfoebrtkbmwd****),URL末尾即为Project Ref(例如qeqfhfoebrtkbmwd****)。
获取目标端项目的
SUPABASE_API_URL与SUPABASE_API_KEY。SUPABASE_API_KEY为service role key,获取方法请参见获取API Keys。(可选)配置项目信息。可通过以下方式完成配置。
环境变量:
export SUPABASE_API_KEY=xxx.env文件:SUPABASE_API_KEY=xxx命令行参数:
-key xxx
通过环境变量配置示例如下:
export SUPABASE_SOURCE_REF=abcdefghijkl**** export SUPABASE_SOURCE_TOKEN=sbp_1760f47cc82fe3466dce9aa********* export SUPABASE_API_URL=https://sbp-xxx.supabase.opentrust.net export SUPABASE_API_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoic2V****
步骤二:安装Deno
具体操作,请参见installation。
步骤三:使用functions-cli迁移
下载functions-cli工具。后续执行相关命令时,请将
functions-cli替换为下载的cli工具名称。执行迁移命令。
迁移单个函数
通过函数slug迁移特定函数:
# 基本用法 ./functions-cli migrate \ -s hello \ --source-ref abcdefghijkl**** \ --source-token sbp_1a2b3c4d5e6f7g8h**** \ --target-key eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoic2V**** \ --target-url https://sbp-****.supabase.opentrust.net迁移所有函数
./functions-cli migrate \ --all \ --source-ref abcdefghijkl**** \ --source-token sbp_1a2b3c4d5e6f7g8h**** \ --target-key eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoic2V**** \ --target-url https://sbp-****.supabase.opentrust.net
AnalyticDB Supabase项目间同步
步骤一:获取并配置项目信息
获取源端、目标端项目的
SUPABASE_API_URL与SUPABASE_API_KEY。SUPABASE_API_KEY为service role key,获取方法请参见获取API Keys。(可选)配置项目信息。可通过以下方式完成配置。
环境变量:
export SUPABASE_API_KEY=xxx.env文件:SUPABASE_API_KEY=xxx命令行参数:
-key xxx
通过环境变量配置示例如下:
export SOURCE_API_URL=https://sbp-source***.supabase.opentrust.net export SOURCE_API_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoic2V**** export SUPABASE_API_URL=https://sbp-target***.supabase.opentrust.net export SUPABASE_API_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoic2V****
步骤二:安装Deno
具体操作,请参见installation。
步骤三:使用functions-cli同步
下载functions-cli工具。后续执行相关命令时,请将
functions-cli替换为下载的cli工具名称。执行同步命令。
同步单个函数
通过函数slug同步特定函数:
./functions-cli sync \ -s hello \ --source-key eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1Ni**** \ --source-url https://sbp-source***.supabase.opentrust.net \ --target-key eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1Ni**** \ --target-url https://sbp-target***.supabase.opentrust.net同步所有函数
./functions-cli sync \ --all \ --source-key eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.source_key_**** \ --source-url https://sbp-source****.supabase.opentrust.net \ --target-key eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.target_key_**** \ --target-url https://sbp-target****.supabase.opentrust.net
删除Edge Function
在Dashboard侧边栏单击Edge Function>Functions,单击目标Function。
单击Details页签。
单击Delete function区域的Delete edge function按钮,然后在对话框中单击Delete按钮。

Secrets管理
在AnalyticDB Supabase中,阿里云提供原生的Edge Function Secrets配置与集中管理能力,可将敏感信息安全地存放在函数运行环境的密钥库中,通过Deno.env.get读取,避免硬编码或客户端暴露。
默认Secrets
Edge Functions默认可访问以下密钥:
名称 | 说明 |
SUPABASE_URL | AnalyticDB Supabase项目的API网关地址。 |
SUPABASE_LOCAL_URL | AnalyticDB Supabase项目的API本地网关地址(不经过公网,延迟更低)。 |
SUPABASE_ANON_KEY | AnalyticDB Supabase API的匿名密钥。启用行安全策略时,该密钥可以安全地在浏览器中使用。 |
SUPABASE_SERVICE_ROLE_KEY | AnalyticDB Supabase API的服务角色密钥。该密钥可以在Edge Functions中安全使用,但切勿在浏览器中使用,此密钥将绕过行安全策略的限制。 |
创建自定义Secrets
通过Dashboard创建
在Dashboard侧边栏单击Edge Function>Secrets。
输入Key和Value。

单击Save完成添加。
通过functions-cli工具创建
下载functions-cli工具。后续执行相关命令时,请将
functions-cli替换为下载的cli工具名称。执行创建命令。
# 添加1个 functions-cli secrets set DASHSCOPE_API_KEY=sk_test123456 # 添加多个 functions-cli secrets set DASHSCOPE_API_KEY=sk_test123456 OPENAI_API_KEY=test123456 # 从 .env 文件添加 functions-cli secrets set --env-file supabase/functions/.env
在Edge Function中获取Secrets
您可以使用Deno的内置处理器访问环境变量,访问时只需传递环境变量名称即可。使用场景请参见集成AI服务。
Deno.env.get('NAME_OF_SECRET')




