

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

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

`Sync` リクエストオブジェクトを使用すると、DynamoDB テーブルからすべての結果を取得し、最後のクエリ (差分更新) 以降に変更されたデータのみを受け取ることができます。`Sync` リクエストは、バージョン管理された DynamoDB データソースに対してのみ実行できます。以下を指定できます。
+ 結果を除外するフィルタ
+ 返す項目の数
+ ページ分割トークン
+ 最後の `Sync` オペレーションが開始された日時

`Sync` リクエストオブジェクトのノードの構造は次のとおりです。

```
type DynamoDBSyncRequest = {
  operation: 'Sync';
  basePartitionKey?: string;
  deltaIndexName?: string;
  limit?: number;
  nextToken?: string;
  lastSync?: number;
  filter?: {
    expression: string;
    expressionNames?: { [key: string]: string };
    expressionValues?: { [key: string]: any };
  };
};
```

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

## Sync フィールド
<a name="js-sync-list"></a>

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

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

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

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

JavaScript リゾルバーの詳細については、「[JavaScript リゾルバーの概要](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html)」を参照してください。

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

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

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

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

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

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

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

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

次の例は、GraphQLクエリ: `syncPosts(nextToken: String, lastSync: AWSTimestamp)` の関数リクエストハンドラーです。

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

```
export function request(ctx) {
  const { nextToken, lastSync } = ctx.args;
  return { operation: 'Sync', limit: 100, nextToken, lastSync };
}
```