Posted at

lambdaでJSONの環境変数を扱う


やりたいこと

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