Vercel環境でのGCS認証設定(Base64エンコード方式)
Next.js
Vercel
Google Cloud Storage
知識
運用
Vercel環境でGoogle Cloud Storageを使用する際、サービスアカウント認証情報を環境変数に設定する必要がある。
問題点
- JSON文字列を直接環境変数に設定すると、
\n(改行文字)のエスケープエラーが発生 SyntaxError: Bad escaped character in JSONが発生する
解決方法
- サービスアカウントキーをBase64エンコード
- 環境変数に設定
- コード側でBase64デコード後にJSON.parseで復元
typescript
// Base64エンコードされた認証情報をデコード
const storage = process.env.GCP_SERVICE_ACCOUNT_KEY
? new Storage({
credentials: JSON.parse(
Buffer.from(process.env.GCP_SERVICE_ACCOUNT_KEY, 'base64').toString(),
),
})
: new Storage(); // Cloud Run環境用(デフォルト認証)Base64エンコード手順
bash
cat service-account-key.json | base64この方法により、改行文字やエスケープ文字の問題を回避できる。