やりたいこと
lambda(go)からfirebaseのCloudFirestoreにデータを保存したい。
公式のスニペットではfirebaseSDKの初期化を行う際、第3引数にfirebaseのコンソールからダウンロードしてきたJSONファイルを指定している。
opt := option.WithCredentialsFile("path/to/serviceAccountKey.json")
app, err := firebase.NewApp(context.Background(), nil, opt)
lambdaでfirebaseSDKの初期化をするにあたって、このやり方ではなく、環境変数にserviceAccountKey.jsonの内容を入れておき、プログラムから参照するようにしたい。
ただ、lambdaの環境変数にはカンマが使えないらしく、そのままJSONの文字列を環境変数に突っ込むことができないぽい。なのでJSONをbase64エンコードした値を環境変数に入れておき、プログラム側でデコードして使うというやり方が見つかった。参考
JSONをbase64エンコードした値を取得する
firebaseから落としてきたJSONファイルをbase64エンコードした値を確認する
JSON := `{
"type": "aaaaa",
"project_id": "aaaaaaaaaa",
"private_key_id": "aaaaaaaaaa",
"private_key": "aaaaaaa",
"client_email": "aaaaaaaa",
"client_id": "aaaaaaaa",
"auth_uri": "aaaaaaa",
"token_uri": "aaaaaaaaaaaaa",
"auth_provider_x509_cert_url": "aaaaaaaaaaa",
"client_x509_cert_url": "aaaaaaaaaa"
}`
sEnc := base64.StdEncoding.EncodeToString([]byte(JSON))
fmt.Println(sEnc) // この値を控えておく
確認した値をlambdaの環境変数に指定する
JSONの環境変数をデコードした値を使ってfirebaseSDKを初期化する
sEnc := os.Getenv("FIREBASE_KEYFILE_JSON")
sDec, _ := base64.StdEncoding.DecodeString(sEnc)
opt := option.WithCredentialsJSON(sDec)
ctx := context.Background()
app, err := firebase.NewApp(ctx, nil, opt)
参考