GoアプリケーションからAWS SecretsManagerの値を取得
EC2にデプロイされたGoのアプリケーションからDBのアクセス情報を受け取って使うときのメモ
ロールの作成と紐付け
EC2からSecretManagerを読み取る必要があるので,それを行うロールを作成します.デフォルトではSecretManagerに対するReadWriteのポリシーしかないようなので(なぜ?),ReadOnlyのポリシーを作成し,ロールに紐付けます.ロールが作成できたら,EC2インスタンスに紐付けます.
アプリケーションからの利用
aws-secretsmanager-caching-goを利用します.これを使うことで,シークレット情報を取得してメモリにキャッシュすることができます.
シークレットの値はJSONで降ってくるので構造体などに保存すると良いと思います.
var secretCache, _ = secretcache.New() type DBInfo struct { UserName string Password string Engine string Host string Port string DBName string `json:"dbname"` } result, err := secretCache.GetSecretString("secret-manager-name") if err != nil { log.Fatal(err) } var dbinfo DBInfo if err = json.Unmarshal([]byte(result), &dbinfo); err != nil { log.Fatal(err) }
実行
アプリケーションを実行する際は,AWS_REGION=<your_region>
という環境変数をセットする必要があります.