AWS AppSync リゾルバ (VTL) の書き方サンプル No.3 – Amazon DynamoDB Query

こんにちは、広野です。

AWS AppSync を使用したアプリケーションを開発する機会があり、リゾルバ、主に VTL の書き方に関してまとまった知識が得られたので紹介します。前回からの続きもので、Query の書き方を紹介します。

本記事では、VTL の書き方にフォーカスしています。ご了承ください。
AWS AppSync、リゾルバ、VTL の説明については以下の記事をご覧下さい。

Amazon DynamoDB に Query する VTL

例えば、AWS AppSync から以下のリクエストを受けたとします。Amazon DynamoDB には適切なデータがある想定です。テーブル名はリゾルバの別の設定 (Data Source) で行います。

  • 引数となるパラメータ: パーティションキー pkey、ソートキー skey
  • 必要なレスポンス: パーティションキーにマッチし、ソートキーのパラメータとして渡された文字列から始まるデータ全て

今回は受け取ったパーティションキーとソートキーのパラメータをもとに、Query の条件に当てはめます。ソートキーは begins_with のキー条件式を使用します。このサンプルでは、最大 30 件のデータのみ取得するようにしています。

リクエストマッピングテンプレート

{
  "version": "2018-05-29",
  "operation": "Query",
  "query": {
    "expression": "#pkey = :pkey AND begins_with (#skey, :skey)",
    "expressionNames": {
      "#pkey": "pkey",
      "#skey": "skey"
    },
    "expressionValues": {
      ":pkey": $util.dynamodb.toDynamoDBJson($context.arguments.pkey),
      ":skey": $util.dynamodb.toDynamoDBJson($context.arguments.skey)
    }
  },
  "limit": $util.defaultIfNull($context.arguments.first, 30),
  "nextToken": $util.toJson($util.defaultIfNullOrEmpty($context.arguments.after, null)),
  "consistentRead": false,
  "select": "ALL_ATTRIBUTES"
}

operation には、Query を書きます。これは Amazon DynamoDB に Query するぞ、という意思表示です。

アプリから受け取った引数はマッピングテンプレート内では $context.arguments 内に格納されます。

pkey や skey というアイテム名であれば問題はないのですが、DynamoDB の予約語がアイテム名になっている場合は必ず # や : を使用してエスケープのような処理をしないとクエリが動作しません。おまじない的に、このように書くことをお勧めします。

これで Amazon DynamoDB に Query をかけることができます。

レスポンスマッピングテンプレート

結果は配列に格納されます。戻ってきたデータをそのままアプリ側に戻す書き方です。

$utils.toJson($context.result)

VTL に関しては以下の AWS 公式ドキュメントも必要に応じてご確認ください。

まとめ

いかがでしたでしょうか。

Query は非常によくオペレーションで、キー条件式をいろいろ変えて使うことが多いと思います。あえて紹介するまでもないと思いましたが、一応紹介させて頂きました。

本記事が皆様のお役に立てれば幸いです。

著者について
広野 祐司

AWS サーバーレスアーキテクチャを駆使して社内クラウド人材育成アプリとコンテンツづくりに勤しんでいます。React で SPA を書き始めたら快適すぎて、他の言語には戻れなくなりました。サーバーレス & React 仲間を増やしたいです。AWSは好きですが、それよりもAWSすげー!って気持ちの方が強いです。
取得資格:AWS 認定は12資格、ITサービスマネージャ、ITIL v3 Expert 等
2020 - 2023 Japan AWS Top Engineer 受賞
2022 - 2023 Japan AWS Ambassador 受賞
2023 当社初代フルスタックエンジニア認定
好きなAWSサービス:AWS Amplify / AWS AppSync / Amazon Cognito / AWS Step Functions / AWS CloudFormation

広野 祐司をフォローする
クラウドに強いによるエンジニアブログです。
SCSKは専門性と豊富な実績を活かしたクラウドサービス USiZE(ユーサイズ)を提供しています。
USiZEサービスサイトでは、お客様のDX推進をワンストップで支援するサービスの詳細や導入事例を紹介しています。
AWSアプリケーション開発クラウドソリューション
シェアする
タイトルとURLをコピーしました