Tech note

備忘録

AWS AppSync + DynamoDB構成で、データを取得する際の注意点

概要

AWS AppSync + DynamoDB構成で、Filterを使用してデータを取得する際の注意点。

注意点

前提

DynamoDBの1 回のScanリクエストで、取得出来る最大サイズは1 MBのデータ。
DynamoDB でのスキャンの操作 - Amazon DynamoDB

AppSync(GraphQL)のFilterで取得条件を絞り込んでデータを取得している。

AppSync(GraphQL)のScanのlimitのデフォルトが20のため、limitに最大値を設定して最大サイズのデータを取得している。

結論

Filterで取得出来るデータは、条件に一致したデータで1MBではなく、1MBでScanしたデータの内条件に一致したデータである。

再帰処理でデータを取得するサンプル

listの操作を行うクエリの定義名は、listTestsとする。

let sampleList = [];
const fetchList = async (token) => {
  const appSyncParams = {
    filter: {
      条件を記載
    },
    limit: 999999999
  };
  if (token) appSyncParams.nextToken = token;
  const res = await API.graphql(graphqlOperation(queries.listTests, appSyncParams));
  Array.prototype.push.apply(sampleList, res.data.listTests.items);
  if (!res.data.listTests.nextToken) return;
  await fetchList(res.data.listTests.nextToken);
}
await fetchList('');