Golangで環境変数を使用してFirebaseを初期化する。
Firebase Adimin SDKをJSONファイルを使用せず、環境変数を使用して、初期化する。
環境変数を使用したい理由
公式ドキュメントの内容
import (
"fmt"
"context"
firebase "firebase.google.com/go"
"firebase.google.com/go/auth"
"google.golang.org/api/option"
)
opt := option.WithCredentialsFile("path/to/serviceAccountKey.json")
app, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
return nil, fmt.Errorf("error initializing app: %v", err)
}
理由
serviceAccountKey.json
ファイルを読み込んで初期化を行っているが、GitやDockerで管理できない。(セキュリティ的に)
ローカルでは問題ないが、デプロイする際には、使用出来なくなってしまう。
そのため、環境変数から読み込みたい。
環境変数の設定方法
.env
ファイルにダウンロードしたServiceAccountKeyの内容を以下のように記載します。
FIREBASE_ACCOUNT='{
"type": "XXX",
"project_id": "XXX",
"private_key_id": "XXX",
"private_key": "-----BEGIN PRIVATE KEY-----\nXXX\n-----END PRIVATE KEY-----\n",
"client_email": "XXX",
"client_id": "XXX",
"auth_uri": "XXX",
"token_uri": "XXX",
"auth_provider_x509_cert_url": "XXX",
"client_x509_cert_url": "XXX",
"universe_domain": "XXX"
}'
Firebase Admin SDKの初期化方法
google.CredentialsFromJSON
を使用します。
スコープに"https://www.googleapis.com/auth/cloud-platform"
を設定します。
import (
"context"
"log"
"os"
firebase "firebase.google.com/go/v4"
"github.com/joho/godotenv"
"golang.org/x/oauth2/google"
"google.golang.org/api/option"
)
ctx := context.Background()
if os.Getenv("GO_ENV") == "dev" {
err := godotenv.Load()
if err != nil {
log.Fatalln(err)
}
}
credentials, err := google.CredentialsFromJSON(ctx, []byte(os.Getenv("FIREBASE_ACCOUNT")), "https://www.googleapis.com/auth/cloud-platform")
if err != nil {
log.Printf("error credentials from json: %v\n", err)
}
opt := option.WithCredentials(credentials)
app, err := firebase.NewApp(ctx, nil, opt)
if err != nil {
log.Fatalln(err)
}
実行方法
あとは、公式ドキュメント通りにapp
を使用すれば出来ます。
GO_ENV=dev go run main.go
実行コマンドにGO_ENV=devを付けるのを忘れずに!
参考