PutItem
PutItem リクエストマッピングドキュメントを使用すると、AWS の AppSync DynamoDB の関数から DynamoDB への PutItem リクエストで、以下のように指定できます。
-
DynamoDB の項目のキー
-
項目の完全なコンテンツ (
keyおよびattributeValuesで構成されます) -
処理が成功する条件
PutItem リクエストの構造は次のとおりです。
type DynamoDBPutItemRequest = { operation: 'PutItem'; key: { [key: string]: any }; attributeValues: { [key: string]: any}; condition?: ConditionCheckExpression; customPartitionKey?: string; populateIndexFields?: boolean; _version?: number; };
各フィールドの定義は以下のようになります。
PutItem フィールド
-
operation -
実行する DynamoDB の処理。
PutItemDynamoDB の処理を実行するには、これをPutItemに設定する必要があります。この値は必須です。 -
key -
DynamoDB の項目のキー。DynamoDB の項目には、単一のハッシュキー、またはハッシュキーとソートキーが含まれています。これはテーブルの構造によって変わります。「型付き値」を指定する方法の詳細については、「型システム (リクエストマッピング)」を参照してください。この値は必須です。
-
attributeValues -
DynamoDB に渡す項目の残りの属性です。「型付き値」を指定する方法の詳細については、「型システム (リクエストマッピング)」を参照してください。このフィールドはオプションです。
-
condition -
DynamoDB 内に既に存在するオブジェクトの状態に基づき、リクエストが成功するかどうかを判断する条件です。条件が指定されていない場合、
PutItemリクエストはその項目の既存のエントリを上書きします。条件の詳細については、「条件式」を参照してください。この値はオプションです。 -
_version -
項目の既知の最新バージョンを表す数値。この値はオプションです。このフィールドは競合の検出に使用され、バージョン管理されたデータソースでのみサポートされます。
customPartitionKey-
有効にすると、この文字列値は、バージョニングが有効になっているときにデルタ同期テーブルで使用される
ds_skおよびds_pkレコードの形式を変更します (詳細については、「AWS AppSyncデベロッパーガイド」の「競合検出と同期」を参照)。有効にすると、populateIndexFieldsエントリの処理も有効になります。このフィールドはオプションです。 populateIndexFields-
ブール値で、
customPartitionKeyと一緒に有効にすると、差分同期テーブル、具体的にはgsi_ds_pkとgsi_ds_sk列のレコードごとに新しいエントリが作成されます。詳細については、「AWS AppSyncデベロッパーガイド」の「競合検出と同期」を参照してください。このフィールドはオプションです。DynamoDB に書き込まれた項目が自動的に GraphQL プリミティブ型と JSON プリミティブ型に変換され、コンテキスト結果 (
context.result) で参照できます。
DynamoDB に書き込まれた項目が自動的に GraphQL プリミティブ型と JSON プリミティブ型に変換され、コンテキスト結果 (context.result) で参照できます。
DynamoDB の型変換の詳細については、「型システム (レスポンスマッピング)」を参照してください。
JavaScript リゾルバーの詳細については、「JavaScript リゾルバーの概要」を参照してください。
例 1
次の例は、GraphQL ミューテーション updateThing(foo: String!, bar: String!, name: String!, version:
Int!) の関数リクエストハンドラーです。
指定したキーに対応する項目がない場合は、作成されます。指定したキーに対応する項目がすでにある場合は、上書きされます。
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { foo, bar, ...values} = ctx.args return { operation: 'PutItem', key: util.dynamodb.toMapValues({foo, bar}), attributeValues: util.dynamodb.toMapValues(values), }; }
例 2
次の例は、GraphQL ミューテーション updateThing(foo: String!, bar: String!, name: String!, expectedVersion:
Int!) の関数リクエストハンドラーです。
この例では、DynamoDB に現在ある項目の version フィールドに expectedVersion が設定されていることを確認します。
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { foo, bar, name, expectedVersion } = ctx.args; const values = { name, version: expectedVersion + 1 }; let condition = util.transform.toDynamoDBConditionExpression({ version: { eq: expectedVersion }, }); return { operation: 'PutItem', key: util.dynamodb.toMapValues({ foo, bar }), attributeValues: util.dynamodb.toMapValues(values), condition, }; }
DynamoDB PutItem API の詳細については、「DynamoDB API のドキュメント」を参照してください。