4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

lambdaでJSONの環境変数を扱う

Posted at

やりたいこと

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)

参考

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?