🔩

Managing Environment Variables

2024/04/22に公開

Tips💡

Edge Functionsのチュートリアルをやっていた時に大文字で書かれているコードを修正して使っている場面があった???
環境変数なんでしょうけど気になって調べてみた。4種類あるようだ🤔

以下のコードで修正して使うことがあった

import { createClient } from "npm:@supabase/supabase-js@2.39.3"
console.log("Hello from Functions!")

const supabase = createClient(
  Deno.env.get('SUPABASE_URL') ?? '',
    Deno.env.get('SUPABASE_ANON_KEY') ?? '',
  );

  Deno.serve(async (req) => {
    const {data: name, error} = await supabase.from("test_t_functions").select("name")
      .limit(1).single()
    if(error) console.log(error)
    
    const data = {
      message: `Hello ${name?.name}!`,
    }
  
    return new Response(
      JSON.stringify(data),
      { headers: { "Content-Type": "application/json" } },
    )
  })

https://supabase.com/docs/guides/functions/secrets

Edge Functions は、デフォルトで次のシークレットにアクセスできます。

種類 内容
SUPABASE_URL Supabase プロジェクトの API ゲートウェイ。
SUPABASE_ANON_KEY Supabase API の anon キー。 行レベル セキュリティが有効になっている場合、これはブラウザで安全に使用できます。
SUPABASE_SERVICE_ROLE_KEY Supabase API の service_role キー。 これは Edge Functions では安全に使用できますが、ブラウザーでは決して使用しないでください。 このキーは行レベルのセキュリティをバイパスします。
SUPABASE_DB_URL PostgreSQL データベースの URL。 これを使用してデータベースに直接接続できます。

ローカルシークレット#
環境変数は次の 2 つの方法でロードできます。

supabase/functions/.env に配置された .env ファイルを介して、supabase の起動時に自動的にロードされます。
--env-file オプションを使用して、supabase 関数を提供します。例: supabase 関数は --env-file ./path/to/.env-file を提供します。
シークレットを保存するためのローカル ファイルを作成しましょう。その中にシークレット MY_NAME を保存できます。

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

これにより、ローカル開発シークレットを保存するための新しいファイル ./supabase/.env.local が作成されます。

.env ファイルを Git にチェックインしないでください。

これで、新しい .env.local ファイルを使用して関数をローカルで呼び出すことができます。

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

関数が開始すると、ターミナルに「Yoda」という名前が出力されるはずです。

今回はここまでにしておこう。上の部分しか試していないので。

まとめ

シークレットなるものにアクセスして、安全にSupabaseとやりとりをする仕組みを提供してくれているようです。この設定ができていないと、JWT認証のエラーが出てくるみたい???

Discussion