業務でAWS SDK Go v1からv2に乗り換えの話が出てきたので、AWS SDK Go v2を使ってパラメータストアから値を取得してみた。
環境情報
- OS:macOS Sonoma
 - エディタ:VSCode
 - Golang:1.22.2
 
補足:環境をなるべく汚したくないので、Dockerで作業用のコンテナ用意して作業してる。
前提条件
すでに、golangを実行する環境、Lambdaの関数作成が整っていること。
プロジェクト構成
AWS-SDK-GO-V2-SSM/
├── ssmTest/
│ └── docker/
│     └── dockerfile
├── src/
└── docker-compose.yml

今回のソースはgithubにあげてあるんで興味ある方はどうぞ。
ソースはみんな大好きChatGPTでソースを生成してもらった。
作成してもらったソースを一部修正。
package main
import (
	"context"
	"log"
	"github.com/aws/aws-lambda-go/lambda"
	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/ssm"
)
// リクエストの構造体
type MyEvent struct {
	ParamName string `json:"param_name"` // リクエスト時にパラメータ名を指定する
}
// レスポンスの構造体
type MyResponse struct {
	ParamValue string `json:"param_value"`
}
// ハンドラー関数
func HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error) {
	// SDK設定のロード
	cfg, err := config.LoadDefaultConfig(ctx)
	if err != nil {
		log.Fatalf("unable to load SDK config, %v", err)
		return MyResponse{}, err
	}
	// SSMクライアントの作成
	ssmClient := ssm.NewFromConfig(cfg)
	// パラメータの取得
	paramInput := &ssm.GetParameterInput{
		Name: aws.String("test"),
	}
	result, err := ssmClient.GetParameter(ctx, paramInput)
	if err != nil {
		log.Printf("failed to get parameter, %v", err)
		return MyResponse{}, err
	}
	log.Printf(*result.Parameter.Value)
	// レスポンスを作成して返す
	return MyResponse{
		ParamValue: *result.Parameter.Value,
	}, nil
}
func main() {
	// Lambdaハンドラーの開始
	lambda.Start(HandleRequest)
}
作成したソースをLambdaにデプロイ。
デプロイ方法
AWS System Managerからパラメータストアの作成で以下の内容で入力、作成。
名前:test
値:なんでもいい(例:これはテストです。)

Lambdaの実行ロールにパラメータストアを参照できるようにポリシー追加。
これやらないとパラメータストア参照できなくて、Lambdaがコケる。
Lambdaの設定タブ内にある「アクセス権限」にあるロール名を選択。

許可ポリシー内のポリシー名「AWSLambdaBasicExecutionRole-xxxxxxxxxxxxxxxxxxxxx」を選択。
xxxxxxxxxxxxxxxxxxxxxは英数字の組み合わせが入ってる。

許可タブないの「編集」を選択。

Statementタグ内に以下の内容を入力。
「us-west-2」はリージョンによって変わる。
「xxxxxxxxxxx」はアカウントID
{
			"Effect": "Allow",
			"Action": "ssm:GetParameter",
			"Resource": "arn:aws:ssm:us-west-2:xxxxxxxxxxx:parameter/test"
		},追加すると全体のjsonはこんな感じ。
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": "ssm:GetParameter",
			"Resource": "arn:aws:ssm:us-west-2:xxxxxxxxxxx:parameter/test"
		},
		{
			"Effect": "Allow",
			"Action": "logs:CreateLogGroup",
			"Resource": "arn:aws:logs:us-west-2:xxxxxxxxxxx:*"
		},
		{
			"Effect": "Allow",
			"Action": [
				"logs:CreateLogStream",
				"logs:PutLogEvents"
			],
			"Resource": [
				"arn:aws:logs:us-west-2:xxxxxxxxxxx:log-group:/aws/lambda/ssmTest:*"
			]
		}
	]
}「次へ」選択後、サービスに「Systems Manager」が追加されていれば問題ない。
Lambdaのテストを実行して、パラメータストアから値が取得できれば成功。

  
  
  
  

