gcp-secretmanagerenvについて
GCPのSecret Managerのラッパみたいなやつで、 gcp-kmsenv のSecret Manager版です。
作った経緯
本番環境(GCP)ではSecret Managerを使うのでいいんだけど、ローカル開発時は環境変数を使いたかった *1 のですが、Secret Managerの値の取得と環境変数の取得を透過的に扱う部分をアプリケーションコード内に書きたくなくて先にライブラリ化しました。
使い方
READMEからの抜粋ですがこれがだいたい全てです。
package main import ( "context" "github.com/sue445/gcp-secretmanagerenv" ) func main() { projectID := "gcp-project-id" c, err := secretmanagerenv.NewClient(context.Background(), projectID) if err != nil { panic(err) } // get from environment variable value, err := c.GetValueFromEnvOrSecretManager("SOME_KEY", true) // => return value from environment variable or Secret Manager // When key is not found in both environment variable and Secret Manager, returned empty string (not error) value, err := c.GetValueFromEnvOrSecretManager("INVALID_KEY", false) // => "" // When key is not found in both environment variable and Secret Manager, returned error value, err := c.GetValueFromEnvOrSecretManager("INVALID_KEY", true) // => error }
GetValueFromEnvOrSecretManager
の第1引数は検索するkey- projectIDが渡されなければSecretManagerの呼び出し自体を行わない
- 本番環境のみ
GCP_PROJECT
のような環境変数を設定しておくような想定
- 本番環境のみ
GetValueFromEnvOrSecretManager
の第2引数は必須とみなすかどうかのフラグ