Help us understand the problem. What is going on with this article?

lambdaでJSONの環境変数を扱う

More than 1 year has passed since last update.

やりたいこと

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の環境変数に指定する

スクリーンショット_2019-03-11_11_25_49.png

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)

参考

https://gobyexample.com/base64-encoding

pokotyan
admin-guild
「Webサービスの運営に必要なあらゆる知見」を共有できる場として作られた、運営者のためのコミュニティです。
https://admin-guild.slack.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away