こんにちは、広野です。
AWS AppSync を使用したアプリケーションを開発する機会があり、リゾルバ、主に VTL の書き方に関してまとまった知識が得られたので紹介します。前回からの続きもので、PutItem の書き方を紹介します。
AWS AppSync、リゾルバ、VTL の説明については以下の記事をご覧下さい。
AWS AppSync リゾルバ (VTL) の書き方サンプル No.1 - Amazon DynamoDB GetItem
Amazon DynamoDB に VTL で GetItem をかけるときの基本的な書き方を紹介します。
AWS AppSync リゾルバ (VTL) の書き方サンプル No.2 – Amazon DynamoDB BatchGetItem
Amazon DynamoDB に VTL で BatchGetItem をかけるときの基本的な書き方を紹介します。
AWS AppSync リゾルバ (VTL) の書き方サンプル No.3 – Amazon DynamoDB Query
Amazon DynamoDB に VTL で Query をかけるときの基本的な書き方を紹介します。
AWS AppSync を使って React アプリからキックした非同期ジョブの結果をプッシュ通知で受け取る
非同期ジョブを実行した後、結果をどう受け取るか?というのは開発者として作り込み甲斐のあるテーマです。今回は React アプリが非同期ジョブを実行した後に、AWS AppSync 経由でジョブ完了のプッシュ通知を受け取る仕組みを紹介します。
Amazon DynamoDB に PutItem する VTL
例えば、AWS AppSync から以下のリクエストを受けたとします。Amazon DynamoDB には適切なパーティションキー、ソートキーがある想定です。テーブル名はリゾルバの別の設定 (Data Source) で行います。
- 引数となるパラメータ: input の中にパーティションキー pkey、ソートキー skey, 任意の属性データ
今回は受け取ったパーティションキーとソートキーのパラメータをそのまま PutItem の条件に当てはめて、input の中に格納されている属性を全てそのまま書き込みます。
リクエストマッピングテンプレート
{ "version": "2018-05-29", "operation": "PutItem", "key": { "pkey": $util.dynamodb.toDynamoDBJson($ctx.args.input.pkey), "skey": $util.dynamodb.toDynamoDBJson($ctx.args.input.skey) }, "attributeValues": $util.dynamodb.toMapValuesJson($ctx.args.input), "condition": { "expression": "attribute_not_exists(#pkey) AND attribute_not_exists(#skey)", "expressionNames": { "#pkey": "pkey", "#skey": "skey" } } }
operation には、PutItem を書きます。これは Amazon DynamoDB に PutItem するぞ、という意思表示です。
アプリから受け取った引数はマッピングテンプレート内では $ctx.args 内に格納されます。今回は input の中に必要なキーや属性をまとめて格納しています。
これで Amazon DynamoDB に PutItem をかけることができます。
レスポンスマッピングテンプレート
結果は配列に格納されます。戻ってきたデータをそのままアプリ側に戻す書き方です。
$utils.toJson($context.result)
VTL に関しては以下の AWS 公式ドキュメントも必要に応じてご確認ください。
まとめ
いかがでしたでしょうか。
PutItem は AWS AppSync のサブスクリプションを使用したいときに必ず使用します。あえて紹介するまでもないと思いましたが、一応紹介させて頂きました。
本記事が皆様のお役に立てれば幸いです。