[Go] AWS Secrets Manager の値を取得する

AWS Secrets Manager の値を Golang で取得するサンプルです。

package main

import (
	"fmt"
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/secretsmanager"
	"os"
)

func main() {
	// AWSリージョン
	region := "ap-northeast-1"
	// Secrets Manager の取得したいプロファイル名
	secretName := "secretsManagerValues1"

	var awsSession *session.Session
	var err error

	// 環境変数 AWS_PROFILE に値がある場合はプロファイル名を利用
	if os.Getenv("AWS_PROFILE") != "" {
		awsSession, err = session.NewSessionWithOptions(session.Options{
			Config:  aws.Config{Region: aws.String(region)},
			Profile: os.Getenv("AWS_PROFILE"),
		})
	} else {
		awsSession, err = session.NewSession(&aws.Config{
			Region: aws.String(region),
		})
	}

	sm := secretsmanager.New(awsSession)
	input := &secretsmanager.GetSecretValueInput{
		SecretId:     aws.String(secretName),
		VersionStage: aws.String("AWSCURRENT"),
	}

	result, err := sm.GetSecretValue(input)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println(*result.SecretString)
}

値を取得するには、Secrets Manager から値を取得する権限がある必要があります。EC2インスタンスなどに直接、権限を持たせた Role を設定している場合は、そのまま実行できます。
プロファイルを指定する場合は、環境変数として AWS_PROFILE に設定します。

export AWS_PROFILE=PROFILE_NAME

値は json にて取得できます

> go run .
{"test1":"value1"}