边缘函数

管理密钥(环境变量)

管理密钥和环境变量。


在边缘函数中使用环境变量或其他敏感信息是很常见的需求。您可以通过CLI或仪表板来管理这些密钥。

您可以使用Deno的内置处理器来访问这些密钥:

1
..('MY_SECRET_NAME')

默认密钥

边缘函数默认可以访问以下密钥:

  • SUPABASE_URL: 您Supabase项目的API网关地址。
  • SUPABASE_ANON_KEY: Supabase API的anon密钥。当启用行级安全时,可在浏览器中安全使用。
  • SUPABASE_SERVICE_ROLE_KEY: Supabase API的service_role密钥。可在边缘函数中安全使用,但绝对不能在浏览器中使用。该密钥会绕过行级安全
  • SUPABASE_DB_URL: Postgres数据库的连接URL。您可以用它直接连接数据库。

本地密钥管理

您可以通过两种方式加载环境变量:

  1. 通过放置在 supabase/functions/.env.env 文件,该文件会在 supabase start 时自动加载
  2. 通过 supabase functions serve--env-file 选项,例如:supabase functions serve --env-file ./path/to/.env-file

让我们创建一个本地文件来存储密钥,并在其中保存一个名为 MY_NAME 的密钥:

1
echo "MY_NAME=Yoda" >> ./supabase/.env.local

这将创建一个新文件 ./supabase/.env.local 用于存储本地开发环境密钥。

现在让我们在函数中访问这个环境变量 MY_NAME。在函数任意位置添加这行代码:

1
console.log(Deno.env.get('MY_NAME'))

现在我们可以通过指定新的 .env.local 文件来本地调用函数:

1
supabase functions serve --env-file ./supabase/.env.local

当函数启动时,您应该会在终端看到输出名称"Yoda"。

生产环境密钥

您还需要为生产环境的边缘函数设置密钥。可以通过仪表板或 CLI 完成此操作。

使用仪表板

  1. 访问仪表板中的边缘函数密钥管理页面
  2. 添加密钥名称和值,然后点击保存
  3. 注意您可以一次性粘贴多个密钥

使用 CLI

让我们创建一个 .env 文件来帮助我们将密钥部署到生产环境。这里我们直接使用与本地相同的密钥:

1
cp ./supabase/.env.local ./supabase/.env

这将创建一个新文件 ./supabase/.env 用于存储您的生产环境密钥。

让我们使用 supabase secrets set 命令将 .env 文件中的所有密钥推送到远程项目:

1
2
3
4
5
supabase secrets set --env-file ./supabase/.env# 您也可以单独设置每个密钥:supabase secrets set MY_NAME=Chewbacca

设置密钥后无需重新部署。

要查看所有已设置的远程密钥,请使用 supabase secrets list 命令:

1
supabase secrets list