電気ひつじ牧場

技術メモ

GoアプリケーションからAWS SecretsManagerの値を取得

EC2にデプロイされたGoのアプリケーションからDBのアクセス情報を受け取って使うときのメモ

ロールの作成と紐付け

EC2からSecretManagerを読み取る必要があるので,それを行うロールを作成します.デフォルトではSecretManagerに対するReadWriteのポリシーしかないようなので(なぜ?),ReadOnlyのポリシーを作成し,ロールに紐付けます.ロールが作成できたら,EC2インスタンスに紐付けます.

アプリケーションからの利用

aws-secretsmanager-caching-goを利用します.これを使うことで,シークレット情報を取得してメモリにキャッシュすることができます.

github.com

シークレットの値は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>という環境変数をセットする必要があります.