Go (AWS SDK v2) での DynamoDB UpdateItem

UpdateItem は1つのアイテムの特定の属性を変更し(アイテムが存在しなければ作成し)、それ以外はそのまま残します。AWS SDK for Go v2 では、dynamodb.UpdateItemInputUpdateExpression を指定して client.UpdateItem を呼び出します。

Code

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"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"
)

func main() {
	ctx := context.TODO()
	cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-east-1"))
	if err != nil {
		log.Fatalf("load config: %v", err)
	}
	client := dynamodb.NewFromConfig(cfg)

	out, err := client.UpdateItem(ctx, &dynamodb.UpdateItemInput{
		TableName: aws.String("Music"),
		Key: map[string]types.AttributeValue{
			"Artist":    &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
			"SongTitle": &types.AttributeValueMemberS{Value: "Cubano Chant"},
		},
		UpdateExpression: aws.String("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2"),
		ExpressionAttributeNames: map[string]string{
			"#upd0": "Genre",
			"#upd1": "Year",
			"#upd2": "Awards",
		},
		ExpressionAttributeValues: map[string]types.AttributeValue{
			":updValue0": &types.AttributeValueMemberS{Value: "Latin Jazz"},
			":updValue1": &types.AttributeValueMemberN{Value: "1994"},
			":updValue2": &types.AttributeValueMemberN{Value: "1"},
		},
		ReturnValues: types.ReturnValueAllNew,
	})
	if err != nil {
		log.Fatalf("update item: %v", err)
	}
	fmt.Println(out.Attributes) // the item after the update
}

Explanation

  • Key — 更新するアイテムの完全なプライマリキー。
  • UpdateExpression — 1つ以上の句:
    • SET は属性を代入します(#upd0 = :updValue0Genre を設定、#upd1 = :updValue1Year を設定)。すべての属性は ExpressionAttributeNames を介してエイリアス化されるので、Year のような予約語は常に安全です。
    • 数値に対する ADDアトミックなインクリメントを行います(ADD #upd2 :updValue2Awards に 1 を加えます)。並行処理下でも安全で、read-modify-write の競合はありません。REMOVE は属性を削除し、DELETE はセットから要素を除去します。
  • ExpressionAttributeValues:placeholder → 型付き値のマップ(AttributeValueMemberS/...MemberN)。
  • ReturnValues: types.ReturnValueAllNew — 更新後の完全なアイテムを out.Attributes で返します(他に ReturnValueUpdatedNewReturnValueAllOldReturnValueUpdatedOldReturnValueNone)。
  • アップサートのセマンティクスUpdateItem はキーが存在しなければアイテムを作成します。更新のみにするには ConditionExpression(例: attribute_exists(Artist))を追加します。
  • コードで式を構築したいですか?expression パッケージgithub.com/aws/aws-sdk-go-v2/feature/dynamodb/expression)は SET/ADD の句を組み立て、名前/値のマップを代わりに生成します。

Do it visually

DynamoDB Expression Builder は名前/値のマップとともに SET / ADD / REMOVE の句を構築し、実行可能なコードをコピーします。

GUI でアイテムを編集するには(フィールドを変更し、生成された UpdateExpression を確認し、コードをコピー)、DynoTable をダウンロードしてください。

References

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynoTable は DynamoDB 向けの高速なデスクトップクライアントです — テーブルを閲覧し、SQL スタイルのクエリを実行し、アイテムをローカルで編集できます。