LoginSignup
0
0

Golangで環境変数を使用してFirebaseを初期化する。

Posted at

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を付けるのを忘れずに!

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0