全部產品
Search
文件中心

AnalyticDB:在AnalyticDB Supabase中使用邊緣函數

更新時間:Mar 20, 2026

雲原生資料倉儲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部署

  1. 登入Supabase Dashboard

  2. 在Dashboard側邊欄單擊Edge Function>Functions

  3. 單擊頁面右上方的Deploy a new function,在下拉選項中選擇Via Editor

    image

  4. 在代碼編輯器中編寫代碼。

    重要

    如需在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';
      }
  5. 在右下角編輯Edge Function的名稱,然後單擊Deploy部署。

使用functions-cli工具部署

  1. 擷取並配置目標專案的SUPABASE_API_URLSUPABASE_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
  2. 準備函數檔案。

    本文函數目錄結構如下,包含 index.ts(入口檔案)和 foo.ts

    supabase
    └── functions
        └── hello
            ├── foo.ts
            └── index.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';
      }
  3. 下載functions-cli工具。後續執行相關命令時,請將functions-cli替換為下載的cli工具名稱。

  4. 執行部署。

    說明
    • 部署命令會在當前執行命令的目錄下尋找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測試

  1. 單擊Functions頁面右上方的Test按鈕。

    image

  2. 在面板中單擊右下角的Send Request

    image

使用curl命令測試

複製Details頁簽下的curl命令,並將其中的[YOUR ANON KEY]替換為anon key或service role key

image

返回樣本如下:

image

更新Edge Function

  1. 在Dashboard側邊欄單擊Edge Function>Functions,然後單擊目標Function。

    image

  2. 單擊Code頁簽,編輯目標檔案。

  3. 單擊右下角的Deploy updates按鈕更新Edge Function。

    image

遷移Edge Function

從Supabase Cloud遷移至AnalyticDB Supabase

步驟一:擷取並設定項目資訊

  1. 擷取源端個人存取權杖。

    1. 訪問Supabase Cloud控制台

    2. Access Tokens頁面,單擊Generate new token

      image

    3. 輸入令牌名稱,單擊Generate token

      image

    4. 複製並妥善儲存該令牌。

  2. 擷取源端Project Ref。

    1. 訪問 Supabase 控制台

    2. 單擊源端專案,查看URL(例如https://supabase.com/dashboard/project/qeqfhfoebrtkbmwd****),URL末尾即為Project Ref(例如qeqfhfoebrtkbmwd****)。

  3. 擷取目標端專案的SUPABASE_API_URLSUPABASE_API_KEYSUPABASE_API_KEY為service role key,擷取方法請參見擷取API Keys

  4. (可選)設定項目資訊。可通過以下方式完成配置。

    • 環境變數: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遷移

  1. 下載functions-cli工具。後續執行相關命令時,請將functions-cli替換為下載的cli工具名稱。

  2. 執行遷移命令。

    遷移單個函數

    通過函數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專案間同步

步驟一:擷取並設定項目資訊

  1. 擷取源端、目標端專案的SUPABASE_API_URLSUPABASE_API_KEYSUPABASE_API_KEY為service role key,擷取方法請參見擷取API Keys

  2. (可選)設定項目資訊。可通過以下方式完成配置。

    • 環境變數: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同步

  1. 下載functions-cli工具。後續執行相關命令時,請將functions-cli替換為下載的cli工具名稱。

  2. 執行同步命令。

    同步單個函數

    通過函數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

  1. 在Dashboard側邊欄單擊Edge Function>Functions,單擊目標Function。

  2. 單擊Details頁簽。

  3. 單擊Delete function地區的Delete edge function按鈕,然後在對話方塊中單擊Delete按鈕。

    image

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建立

  1. 在Dashboard側邊欄單擊Edge Function>Secrets

  2. 輸入Key和Value。

    image

  3. 單擊Save完成添加。

通過functions-cli工具建立

  1. 下載functions-cli工具。後續執行相關命令時,請將functions-cli替換為下載的cli工具名稱。

  2. 執行建立命令。

    # 添加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')