

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

# での DynamoDB データソースのバージョニング AWS AppSync
<a name="versioned-data-sources"></a>

AWS AppSync は現在、DynamoDB データソースでのバージョニングをサポートしています。競合の検出、競合の解決、同期操作には、`Versioned` データソースが必要です。データソースでバージョニングを有効にすると、 AWS AppSync は自動的に以下を実行します。
+ オブジェクトのバージョン管理メタデータを使用して項目を強化します。
+  AWS AppSync ミューテーションを持つ項目に加えられた変更を *Delta* テーブルに記録します。
+ 「廃棄」を使用して、*ベース*テーブル内の削除済み項目を、設定可能な期間保持します。

## バージョン管理されたデータソースの設定
<a name="versioned-data-source-configuration"></a>

DynamoDB データソースでバージョン管理を有効にする場合は、次のフィールドを指定します。

** `BaseTableTTL` **  
「廃棄」を使用して削除済み項目を*ベース*テーブルに保持する分数。廃棄とは、項目が削除されたことを示すメタデータフィールドです。項目を削除したときにすぐに除外されるようにする場合は、この値を *0* に設定できます。このフィールドは必須です。

** `DeltaSyncTableName` **  
 AWS AppSync ミューテーションを持つ項目に加えられた変更が保存されるテーブルの名前。このフィールドは必須です。

** `DeltaSyncTableTTL` **  
*差分*テーブルに項目を保持する分数。このフィールドは必須です。

## Delta 同期テーブルのログ記録
<a name="delta-sync-table"></a>

AWS AppSync は現在、`PutItem`、、`UpdateItem`および DynamoDB オペレーションを使用したミューテーションの Delta Sync Logging `DeleteItem` をサポートしています。

 AWS AppSync ミューテーションがバージョニングされたデータソースの項目を変更すると、その変更のレコードが差分更新用に最適化された *Delta* テーブルに保存されます。バージョン管理された他のデータソースに異なる *Delta* テーブル (タイプごとに 1 つ、ドメイン領域ごとに 1 つなど) を使用するか、API に 1 つの *Delta* テーブルを使用するかを選択できます。 AWS AppSync では、プライマリキーの衝突を避けるためAPIs に 1 つの *Delta* テーブルを使用することをお勧めします。

このテーブルに必要なスキーマは次のとおりです。

** `ds_pk` **  
パーティションキーとして使用される文字列値。これは、*Base* データソース名と、変更が発生した日付の ISO 8601 形式を連結することによって作成されます (例: `Comments:2019-01-01`)。  
VTL マッピングテンプレートの `customPartitionKey` フラグをパーティションキーが列名として設定されると (「*AWS AppSync デベロッパーガイド」*の「[DynamoDB のリゾルバーのマッピングテンプレートリファレンス](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem)」を参照)、`ds_pk` の形式が変更され、文字列は、*ベース*テーブルの新しいレコードのパーティションキーの値を追加して作成されます。たとえば、*Base* テーブルのレコードのパーティションキー値が `1a`で、ソートキー値が `2b` の場合、文字列の新しい値は `Comments:2019-01-01:1a` になります。

** `ds_sk` **  
ソートキーとして使用される文字列値。これは、変更が発生した時刻の ISO 8601 形式、項目のプライマリキー、および項目のバージョンを連結することによって作成されます。これらのフィールドの組み合わせにより、*Delta* テーブルのすべてのエントリの一意性が保証されます (たとえば、時刻が `09:30:00`、ID が `1a`、バージョン `2` の場合、`09:30:00:1a:2` になります)。  
VTL マッピングテンプレートの `customPartitionKey` フラグをパーティションキーが列名として設定されると (「**AWS AppSync デベロッパーガイド」の「[DynamoDB のリゾルバーのマッピングテンプレートリファレンス](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem)」を参照)、`ds_sk` の形式が変更され、文字列は、コンビネーションキーの値を *ベース*テーブルのソートキーの値に置き換えることで作成されます。上記の例を使用すると、*Base* テーブルのレコードのパーティションキー値が `1a`で、ソートキー値が `2b` の場合、文字列の新しい値は `09:30:00:2b:3` になります。

** `_ttl` **  
*差分*テーブルから項目を削除する時刻のタイムスタンプをエポック秒単位で保存する数値。この値は、変更が発生したときに、データソースで設定された `DeltaSyncTableTTL` 値を加算することによって決定されます。このフィールドは DynamoDB TTL 属性として設定する必要があります。

*ベース*テーブルで使用するように設定された IAM ロールには、*差分*テーブルを操作するためのアクセス権限も含まれている必要があります。この例では、`Comments` という名前の*基本*テーブルと `ChangeLog` という名前の*差分*テーブルへの許可ポリシーが表示されます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:UpdateItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-east-1:000000000000:table/Comments",
                "arn:aws:dynamodb:us-east-1:000000000000:table/Comments/*",
                "arn:aws:dynamodb:us-east-1:000000000000:table/ChangeLog",
                "arn:aws:dynamodb:us-east-1:000000000000:table/ChangeLog/*"
            ]
        }
    ]
}
```

------

## バージョン管理されたデータソースメタデータ
<a name="versioned-data-source-metadata"></a>

AWS AppSync は、ユーザーに代わって`Versioned`データソースのメタデータフィールドを管理します。これらのフィールドを自分で変更すると、アプリケーションにエラーが発生したり、データが失われたりする可能性があります。これらのフィールドには、以下が含まれます。

** `_version` **  
一定間隔で増加するカウンタ。項目に変更が発生するたびに更新されます。

** `_lastChangedAt` **  
項目が最後に変更されたときのタイムスタンプをエポックミリ秒単位で保存する数値。

** `_deleted` **  
項目が削除されたことを示すブール型の「廃棄」値。これは、削除された項目をローカルデータストアからエビクションするために、アプリケーションが使用できます。

** `_ttl` **  
基になるデータソースから項目を削除する時刻のタイムスタンプをエポック秒単位で保存する数値。

** `ds_pk` **  
*差分*テーブルのパーティションキーとして使用される文字列値。

** `ds_sk` **  
*差分*テーブルのソートキーとして使用される文字列値。

**`gsi_ds_pk`**  
グローバルセカンダリインデックスをパーティションキーとしてサポートするために生成される文字列値属性。これは、VTL マッピングテンプレートで `customPartitionKey` および `populateIndexFields` フラグの両方が有効になっている場合にのみ含まれます (「**AWS AppSync デベロッパーガイド」の「[DynamoDB のリゾルバーのマッピングテンプレートリファレンス](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem)」を参照)。有効にすると、*Base* データソース名と、変更が発生した日付の ISO 8601 形式を連結することによって値が作成されます (たとえば、*Base* テーブルの名前が *Comments* の場合、このレコードは `Comments:2019-01-01` として設定されます)。

**`gsi_ds_sk`**  
グローバルセカンダリインデックスをソートキーとしてサポートするために生成される文字列値属性。これは、VTL マッピングテンプレートで `customPartitionKey` および `populateIndexFields` フラグの両方が有効になっている場合にのみ含まれます (「**AWS AppSync デベロッパーガイド」の「[DynamoDB のリゾルバーのマッピングテンプレートリファレンス](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem)」を参照)。有効にすると、変更が発生した時刻の ISO 8601 形式、*Base* テーブル内の項目のパーティションキー、*Base* テーブル内の項目のソートキー、および項目のバージョンを連結することによって値が作成されます (たとえば、時刻が `09:30:00` で、パーティションキー値が `1a` で、ソートキーの値が `2b` で、バージョンが `3` の場合、`09:30:00:1a#2b:3` になります)。

これらのメタデータフィールドは、基盤となるデータソース内の項目の全体的なサイズに影響します。 AWS AppSync では、アプリケーションを設計するときに、バージョニングされたデータソースメタデータ用に *500 バイト \$1 ストレージの最大プライマリキーサイズ*を予約することをお勧めします。このメタデータをクライアントアプリケーションで使用するには、GraphQL タイプとミューテーションの選択セットに、`_version`、`_lastChangedAt`、および `_deleted` フィールドを含めます。