雲原生資料倉儲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資料庫、使用者鑒權、Object Storage Service等服務,無需額外配置。
隔離與高效能:藉助沙箱機制和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工具名稱。執行部署。
說明部署命令會在當前執行命令的目錄下尋找
supabase/functions/路徑,並尋找名為hello的函數目錄。如果執行報錯“At least one file is required”,請登入控制台,在目標Supabase專案所在行的操作列,選擇後重試。如果您的專案目前的版本為v1.0.0,升級後會更新資料庫連接串。
./functions-cli deploy hello如需要在部署 Edge Function 時關閉 JWT 校正,可添加
--no-verify-jwt參數,樣本:./functions-cli deploy hello --no-verify-jwt
測試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 Gateway地址。 |
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')