0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS AppSyncでAPIを作ってみたAdvent Calendar 2022

Day 12

DynamoDBのlimit値によるAppSyncのエラーと対処方法

Last updated at Posted at 2022-12-11

概要

この記事では、DynamoDBのlimit値によるAppSyncのエラーと対処法について紹介します。

内容

AppSyncをウィザードで作成すると、自動でリゾルバーを生成します。
これはlist機能も同様で、下記のようなリクエストマッピングテンプレートが記載されます。

{
  "version": "2017-02-28",
  "operation": "Scan",
  "filter": #if($context.args.filter) $util.transform.toDynamoDBFilterExpression($ctx.args.filter) #else null #end,
  "limit": $util.defaultIfNull($ctx.args.limit, 20),
  "nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.nextToken, null)),
}

ただ、このまま使用すると、DBのデータが20件を超えた時点で、
期待の挙動をしなくなります。

例えば、全データを取得したくても20件しか返ってこない、
filterで条件を絞ってクエリを送っても何も返ってこない、などが起きます。

これはlimit20が設定されていることが原因です。

仮に、filterで条件を絞ってクエリを送った場合、
DBの中から20件取得して、そこ中から条件を絞った結果を返します。
そのため、DBにはデータはあるにもかかわらず、
取得した20件にないことで指定のデータが返ってこないことになります。

単純な解消方法は、limit値を上げることです。

{
  "version": "2017-02-28",
  "operation": "Scan",
  "filter": #if($context.args.filter) $util.transform.toDynamoDBFilterExpression($ctx.args.filter) #else null #end,
  "limit": $util.defaultIfNull($ctx.args.limit, 500),
  "nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.nextToken, null)),
}

この方法で、ひとまず500件を取得するように変更できます。
データの数が決まっている場合や、ある程度想定できる場合は、
この方法で、数値を直接変更すれば問題ありません。

また、
ScanではなくQueryで取得することで解決できることもあります。
詳しくは、ScanではなくQueryで取得するAppSyncのリゾルバーを参照ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?