概要
この記事では、リゾルバーにLambdaを設定したAppSyncのQueryパターンを紹介します。
前提
- DynamoDBにテーブルが用意されていること
- AppSyncのスキーマを作成済みであること
Lambda
まず、AppSyncに紐づけるLambdaを作成します。
ここでは、DynamoDBのデータを取得するコードを使用します。
※ 本来、DynamoDBのデータを取得するだけであれば、マッピングテンプレートで完結します。
詳しくは、こちらを参照ください。
import boto3
from boto3.dynamodb.conditions import Key, Attr
def lambda_handler(event, context):
id = event['id']
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Radio')
response = table.query(
KeyConditionExpression = Key('id').eq(id)
)
return response['Items'][0]
AppSync
データソース
AppSyncのコンソールからデータソース
を選択し、作成したLambdaを設定します。
作成後、タイプ
がAWS_LAMBDA
になっていることを確認してください。
スキーマ
ここでは、アドベントカレンダーの1日目から5日目で作成したものと同様のスキーマを使用します。
リゾルバー
リゾルバーは、
データソースに先ほど作成したLambdaのデータソースを選択し、
- Enable request mapping template
- Enable response mapping template
を、それぞれONにし、出力されたものを使用することで実現可能です。
リクエストマッピングテンプレート
{
"version" : "2017-02-28",
"operation": "Invoke",
"payload": $util.toJson($context.args)
}
レスポンスマッピングテンプレート
$util.toJson($context.result)
実行
AppSyncでクエリを実行し正しい値が返ってくることを確認します。
正しく動くことを確認できました。