AWS AppSync DynamoDBバックエンドでハイフンを使う

2022.01.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、ゲストブロガーのNTT東日本 大瀧です。

AWS AppSyncは様々なAWSサービスにGraphQL APIを提供するサービスで、例えばNoSQLデータベースのAmazon DynamoDBをバックエンドに設定できます。 DynamoDBではテーブルのアトリビュート名にハイフンが使える一方で、AppSyncで扱うGraphQLのフィールド名はハイフンが許容されていません。そこをなんとかしようというのが本記事の内容です。

マッピングテンプレートで吸収する

DynamoDB連携で設定するリゾルバーにGraphQLとDynamoDBを紐づけるマッピングテンプレートで差異を吸収する方法があります。例えばDynamoDBからデータを取得する場合は、レスポンスマッピングテンプレートで以下のように記述します。

#set($result = {})
#foreach($item in $context.result.entrySet())
    #if($item.key == "hyphen-key")
        $util.qr($result.put("hyphenKey", $item.value))
    #else
        $util.qr($result.put($item.key, $item.value))
    #end
#end
$util.toJson($result)

hyphen-key がDynamoDBのアトリビュート名、hyphenKeyがGraphQLスキーマに記述するフィールド名です。当該フィールドをクエリのキーやミューテーションなどのリクエストに含める場合は、リクエストマッピングテンプレートに記載することになるでしょう。

あとがき

マッピングテンプレートでの対応は面倒なので、AppSyncと組み合わせて利用するDynamoDBテーブルのアトリビュート名ではハイフンを避け、アンダーバーやCamelCaseを利用いただくのが賢明ですね。

参考URL