

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

# PutItem
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-putitem"></a>

`PutItem` リクエストマッピングドキュメントでは、 AWS AppSync DynamoDB リゾルバーに DynamoDB への`PutItem`リクエストを行うように指示し、以下を指定できます。
+ DynamoDB の項目のキー
+ 項目の完全なコンテンツ (`key` および `attributeValues` で構成されます)
+ 処理が成功する条件

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

```
{
    "version" : "2018-05-29",
    "operation" : "PutItem",
    "customPartitionKey" : "foo",
    "populateIndexFields" : boolean value,
    "key": {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "attributeValues" : {
        "baz" : ... typed value
    },
    "condition" : {
       ...
    },
    "_version" : 1
}
```

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

## PutItem フィールド
<a name="putitem-list"></a>

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

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

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

 **`key`**   
DynamoDB の項目のキー。DynamoDB の項目には、単一のハッシュキー、またはハッシュキーとソートキーが含まれています。これはテーブルの構造によって変わります。「型付き値」を指定する方法の詳細については、「[型システム (リクエストマッピング)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md)」を参照してください。この値は必須です。

 **`attributeValues`**   
DynamoDB に渡す項目の残りの属性です。「型付き値」を指定する方法の詳細については、「[型システム (リクエストマッピング)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md)」を参照してください。このフィールドはオプションです。

 **`condition`**   
DynamoDB 内に既に存在するオブジェクトの状態に基づき、リクエストが成功するかどうかを判断する条件です。条件が指定されていない場合、`PutItem` リクエストはその項目の既存のエントリを上書きします。条件の詳細については、「[条件式](aws-appsync-resolver-mapping-template-reference-dynamodb-condition-expressions.md)」を参照してください。この値はオプションです。

 **`_version`**   
項目の既知の最新バージョンを表す数値。この値はオプションです。このフィールドは*競合の検出*に使用され、バージョン管理されたデータソースでのみサポートされます。

**`customPartitionKey`**  
有効にすると、この文字列値は、バージョニングが有効になっているときにデルタ同期テーブルで使用される `ds_sk` および `ds_pk` レコードの形式を変更します (詳細については、**「AWS AppSyncデベロッパーガイド」の「[競合検出と同期](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html)」を参照)。有効にすると、`populateIndexFields` エントリの処理も有効になります。このフィールドはオプションです。

**`populateIndexFields`**  
ブール値で、**`customPartitionKey` と一緒に有効にすると**、差分同期テーブル、具体的には `gsi_ds_pk` と `gsi_ds_sk` 列のレコードごとに新しいエントリが作成されます。詳細については、**「AWS AppSyncデベロッパーガイド」の「[競合検出と同期](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html)」を参照してください。このフィールドはオプションです。

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)」を参照してください。

## 例 1
<a name="example-1"></a>

以下は、GraphQL ミューテーション `updateThing(foo: String!, bar: String!, name: String!, version: Int!)` のマッピングテンプレートです。

指定したキーに対応する項目がない場合は、作成されます。指定したキーに対応する項目がすでにある場合は、上書きされます。

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo),
        "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar)
    },
    "attributeValues" : {
        "name"    : $util.dynamodb.toDynamoDBJson($ctx.args.name),
        "version" : $util.dynamodb.toDynamoDBJson($ctx.args.version)
    }
}
```

## 例 2
<a name="example-2"></a>

以下は、GraphQL ミューテーション `updateThing(foo: String!, bar: String!, name: String!, expectedVersion: Int!)` のマッピングテンプレートです。

この例では、DynamoDB に現在ある項目の `version` フィールドに `expectedVersion` が設定されていることを確認します。

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo),
        "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar)
    },
    "attributeValues" : {
        "name"    : $util.dynamodb.toDynamoDBJson($ctx.args.name),
        #set( $newVersion = $context.arguments.expectedVersion + 1 )
        "version" : $util.dynamodb.toDynamoDBJson($newVersion)
    },
    "condition" : {
        "expression" : "version = :expectedVersion",
        "expressionValues" : {
            ":expectedVersion" : $util.dynamodb.toDynamoDBJson($expectedVersion)
        }
    }
}
```

DynamoDB `PutItem` API の詳細については、「[DynamoDB API のドキュメント](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)」を参照してください。