同期 - AWS AppSync

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

同期

Sync リクエストマッピングドキュメントを使用すると、DynamoDB テーブルからすべての結果を取得し、最後のクエリ (差分更新) 以降に変更されたデータのみを受け取ることができます。 Syncリクエストは、バージョン管理された DynamoDB データソースに対してのみ実行できます。以下を指定することができます。

  • 結果を除外するフィルタ

  • 返す項目の数

  • ページ分割トークン

  • 最後の Sync オペレーションが開始された日時

Sync マッピングドキュメントの構造は次のとおりです。

{ "version" : "2018-05-29", "operation" : "Sync", "basePartitionKey": "Base Tables PartitionKey", "deltaIndexName": "delta-index-name", "limit" : 10, "nextToken" : "aPaginationToken", "lastSync" : 1550000000000, "filter" : { ... } }

各フィールドの定義は以下のようになります。

Sync フィールド

version

テンプレート定義のバージョンです。現在、2018-05-29 のみがサポートされています。この値は必須です。

operation

実行する DynamoDB の処理。Sync の処理を実行するには、これに Sync を設定する必要があります。この値は必須です。

filter

DynamoDB からの結果が返される前に、その結果をフィルタリングするために使用するフィルタです。フィルタの詳細については、「フィルタ」を参照してください。このフィールドはオプションです。

limit

一度に評価する項目の最大数です。このフィールドはオプションです。省略した場合、デフォルトの制限は 100 項目に設定されます。このフィールドの最大値は 1000 項目です。

nextToken

前のクエリを継続するためのページ分割トークンです。これは前のクエリから取得されます。このフィールドはオプションです。

lastSync

最後に成功した Sync オペレーションが開始されたエポックミリ秒単位の時刻。指定すると、lastSync 以降に変更された項目のみが返されます。このフィールドはオプションです。最初の Sync オペレーションからすべてのページを取得した後にのみ入力する必要があります。省略した場合は、ベーステーブルの結果が返されます。それ以外の場合は、差分テーブルの結果が返されます。

basePartitionKey

Sync オペレーションを実行する際に使用されるベーステーブルのパーティションキー。このフィールドにより、テーブルがカスタムパーティションキーを使用している場合に Sync オペレーションを実行できます。これはオプションのフィールドです。

deltaIndexName

Sync オペレーションに使用されるインデックス。このインデックスは、テーブルがカスタムパーティションキーを使用する場合に、デルタストアテーブル全体で Sync オペレーション作を有効にするために必要です。Sync オペレーションは GSI ( gsi_ds_pkと で作成) で実行されますgsi_ds_sk。このフィールドはオプションです。

DynamoDB 同期によって返される結果は、自動的に GraphQL 型とJSONプリミティブ型に変換され、マッピングコンテキスト () で使用できます$context.result

DynamoDB の型変換の詳細については、「型システム (リクエストマッピング)」を参照してください。

レスポンスマッピングテンプレートの詳細については、「リゾルバーのマッピングテンプレートの概要」を参照してください。

結果は以下の構造を持ちます。

{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10, startedAt = 1550000000000 }

各フィールドの定義は以下のようになります。

items

同期により返された項目を含むリストです。

nextToken

結果が増える可能性がある場合、 には別のリクエストで使用できるページ割りトークンnextTokenが含まれています。 は、DynamoDB から返されるページ割りトークンを AWS AppSync 暗号化して難読化します。これにより、テーブルデータが誤って呼び出し元に漏えいされるのを防ぎます。また、これらのページ分割トークンは異なるリゾルバー間では使用できません。

scannedCount

フィルタ式 (ある場合) が適用される前に、DynamoDB により取得された項目の数です。

startedAt

エポックミリ秒単位の時刻ですが、同期オペレーションが開始されれば、ローカルに保存して別のリクエストで lastSync の引数として使用することができます。ページ分割トークンがリクエストに含まれている場合、この値は、結果の最初のページのリクエストによって返されたものと同じになります。

次の例は、GraphQL クエリ: syncPosts(nextToken: String, lastSync: AWSTimestamp) のマッピングテンプレートです。

この例では、lastSync を省略すると、ベーステーブルのすべてのエントリが返されます。lastSync が指定されている場合は、lastSync 以降に変更された差分同期テーブルのエントリのみが返されます。

{ "version" : "2018-05-29", "operation" : "Sync", "limit": 100, "nextToken": $util.toJson($util.defaultIfNull($ctx.args.nextToken, null)), "lastSync": $util.toJson($util.defaultIfNull($ctx.args.lastSync, null)) }