

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

# 同期
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-sync"></a>

`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 フィールド
<a name="sync-list"></a>

### Sync フィールドリスト
<a name="sync-list-col"></a>

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

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

** `filter` **  
DynamoDB からの結果が返される前に、その結果をフィルタリングするために使用するフィルタです。フィルタの詳細については、「[フィルタ](aws-appsync-resolver-mapping-template-reference-dynamodb-filter.md)」を参照してください。このフィールドはオプションです。

** `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 の型変換の詳細については、「[型システム (リクエストマッピング)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)」を参照してください。

レスポンスマッピングテンプレートの詳細については、「[リゾルバーのマッピングテンプレートの概要](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview)」を参照してください。

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

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

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

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

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

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

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

## 例
<a name="id14"></a>

次の例は、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))
}
```