Go言語学習25日目:ついにデータ登録!GoからDynamoDBにPutItemでデータを書き込んでみた。

Go言語学習25日目

これまで準備してきた環境を使って、今日は DynamoDBにデータを登録する初めての1件 を書き込んでみました!

今までの学習記録はコチラ。 kunio-ud-all.com

1日30分のみ頑張るをテーマにGo言語xAWSができるようになる為に進めてきました。

DB接続できると、何かを作る際に幅が広がりますね。


今日の目標

  • PutItem API を使って、DynamoDBに1件データを登録
  • 主キー(UserID)を含む構造を作成
  • エラーハンドリングも忘れずに!

🔧 DynamoDB 側のテーブル準備(再確認)

テーブル名 主キー(パーティションキー) ソートキー
Go-Practice-Users UserID(文字列型) sortKey(文字列型)

1. 必要パッケージのimport

import (
    "context"
    "fmt"
    "log"

    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/dynamodb"
    "github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
)

2. クライアント初期化関数(再掲)

func initDynamoClient() *dynamodb.Client {
    cfg, err := config.LoadDefaultConfig(context.TODO())
    if err != nil {
        log.Fatalf("設定の読み込みに失敗: %v", err)
    }
    return dynamodb.NewFromConfig(cfg)
}

3. PutItem でデータを登録する処理!

func putUser(svc *dynamodb.Client, userID, name string, age int) {
    input := &dynamodb.PutItemInput{
    TableName: aws.String("Go-Practice-Users"),
    Item: map[string]types.AttributeValue{
        "UserID":  &types.AttributeValueMemberS{Value: userID},
        "sortKey": &types.AttributeValueMemberS{Value: "User"},
            "Name":   &types.AttributeValueMemberS{Value: name},
            "Age":    &types.AttributeValueMemberN{Value: fmt.Sprintf("%d", age)},
        },
    }

    _, err := svc.PutItem(context.TODO(), input)
    if err != nil {
        log.Fatalf("データ登録に失敗しました: %v", err)
    }

    fmt.Println("✅ データ登録完了!")
}

func awsString(s string) *string {
    return &s
}

4. main関数で呼び出し!

func main() {
    svc := initDynamoClient()

    // テスト用データ
    putUser(svc, "u123", "たろう", 30)
}

実行結果
$ go run main.go
✅ データ登録完了!

AWS コンソールに値が書き込まれていました。 やったね。


今日の学びポイント

Go言語25日目の到達ポイントまとめ
  • PutItem でクラウドにデータを「書き込む」処理が実装できた!
  • GoからDynamoDBにアクセスする流れがつかめた
  • 型が多くて一見難しく見えるけど、パターンがわかれば使いやすい
  • types.AttributeValueMemberS/N の使い分けが大事!

以上となります。引き続きよろしくお願いいたします。