DynamoDB は GraphQL に対応していますか?

はい、AWS AppSync を通して対応しています。AppSync は AWS のマネージドな GraphQL サービスで、DynamoDB はそのネイティブなデータソースの 1 つです。リゾルバーが、GraphQL のクエリやミューテーションを GetItem、Query、PutItem といった DynamoDB の操作に対応づけます。DynamoDB 自体に GraphQL エンドポイントはありません。GraphQL の層はその前段で動きます。

この組み合わせの仕組み

AppSync では、DynamoDB のテーブルを データソース として登録し、GraphQL スキーマの各フィールドに リゾルバー を紐づけます。リゾルバーのリクエストハンドラーが、入ってきた GraphQL の引数を DynamoDB の呼び出しに翻訳し、レスポンスハンドラーが DynamoDB の返したアイテムを GraphQL のレスポンスの形に整えます。AWS が DynamoDB のサーバーレス統合の筆頭に AppSync を挙げているのは、まさにこのパターンのためです。

よく使われるスタックである理由

どちらの半分もサーバーレスです。AppSync が API 層をスケールし、DynamoDB がストレージとスループットをスケールし、どちらの側にもサーバーはありません。リアルタイムの GraphQL サブスクリプションは、DynamoDB の一桁ミリ秒の書き込みと自然に噛み合います。

ネストしたフィールド 1 つの値段

フィールドごとにリゾルバーがあるということは、フィールドごとに DynamoDB リクエストがあるということです。posts { author { name } } はリストを 1 回解決し、それから author を投稿ごとに 1 回ずつ解決し、そのそれぞれが別々に課金されます。

1 つのアイテムコレクションに 25 件の投稿と、25 件の著者アイテム(それぞれ約 920 バイト)を持つテーブルに対し、ReturnConsumedCapacity を付けて計測しました。

Query, the 25 posts                        ConsumedCapacity 3.0
25 GetItem calls, one author each          ConsumedCapacity 12.5
1 BatchGetItem, the same 25 author keys    ConsumedCapacity 12.5

ネストしたフィールドは、そのリストを生んだクエリの 4 倍以上かかります。バッチ化してもそれは変わりません。BatchGetItem(それ自体が AppSync のリゾルバー操作で、1 回あたり 100 キー・16 MB が上限)は 25 回のラウンドトリップを 1 回にまとめますが、それでも 25 件のアイテムを読み、25 回分の読み取りを課金します。買えるのはレイテンシであって、キャパシティではありません。

この GraphQL クエリを毎秒 10 回実行すると、us-east-1 のオンデマンドで読み取りリクエストユニットが月 $50.92、そのうち $41.06 は author フィールドだけによるものです。料金計算ツールが同じ計算を自分の数値で実行します。

だからこそ、直すべきなのはリゾルバーではなくキー設計です。ネストしたフィールドが返すものを親アイテムか GSI に射影しておけば、リスト用のクエリが最初からそれを運んでくるので、子のリゾルバーには取ってくるものがなくなります。

もう 1 つの道、自前のサーバーを立てる

AppSync が必須なわけではありません。どの GraphQL サーバー(Apollo、Yoga、ほか)でも、他のバックエンドを呼ぶのとまったく同じように、AWS SDK 経由で DynamoDB を呼んでフィールドを解決できます。トレードオフは、GraphQL 層を自分で運用することです。

さらに詳しく

GraphQL のリゾルバーも同じアクセスパターンのルールに当たります。データモデリングガイドがクエリに応えるキーの設計方法を説明し、式ビルダーが下地となる条件の構文を生成し、DynoTableがリゾルバーの実際の書き込み結果を確認させてくれます。

参考資料

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

キャパシティの数値は 2026-07-28 に、Node 24.18.0 上の @aws-sdk/client-dynamodb 3.1095.0 で DynamoDB Local 3.3.0 に対して計測しました。上記の ConsumedCapacity はエンジン自身の値です。コストは、当社が同期している AWS 料金表の us-east-1 オンデマンドのリクエストユニット単価から算出しました。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。