🐷
【Next.js,Vercel】error: could not load the default credentialsを解決
はじめに
今回はNext.jsやfirestoreなどを用いて作成したプロジェクトを、Vercelにデプロイした際に発生したエラーの解決について、備忘録として書いていきます。
Next.jsのバージョンは14.1.0です。
エラー内容
Vercelにデプロイした際に、Google Cloudの認証に関する以下のようなエラーが出ました。
ローカル環境では問題なく動いていました。
error: could not load the default credentials. browse to https://cloud.google.com/docs/authentication/getting-started for more information.
コードの該当箇所はAPI Routesに位置するファイルにありました。Firebaseアプリケーションの初期化とfirestoreサービスにアクセスするための設定箇所に問題がありました。
ローカル環境との差分
ローカル開発環境では、以下のコマンドを用いてGoogle Cloud APIにアクセスするためのデフォルトの認証情報を設定していました。
gcloud auth application-default login
認証が成功すると、取得した認証情報がローカルマシンに保存されます。これによって、Google CloudのリソースやサービスへのAPIリクエストを可能にしていました。
一方、Vercelのようなサーバレス環境では、異なる認証方法を用いる必要があります。
解決方法
そこで、該当箇所を以下のように書き換えました。
import * as admin from "firebase-admin";
if (!admin.apps.length) {
admin.initializeApp({
credential: admin.credential.cert({
projectId: process.env.FIREBASE_PROJECT_ID,
clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
privateKey: process.env.FIREBASE_PRIVATE_KEY?.replace(/\\n/g, '\n'),
}),
databaseURL: process.env.FIREBASE_DATABASE_URL,
});
}
const firestore = admin.firestore();
Firebase Admin SDKは、Firebaseプロジェクトのサーバーサイドでの管理操作を行うためのツールセットです。API Routesでの使用なので、Firebase Admin SDKを用います。
環境変数名について、サーバーサイドで呼び出しているので、NEXT_PUBLIC_
は不要です。
Discussion