概要
この記事では、リゾルバーにLambdaを設定したAppSyncのMutationパターンを紹介します。
前提
- DynamoDBにテーブルが用意されていること
- AppSyncのスキーマを作成済みであること
Lambda
まず、AppSyncに紐づけるLambdaを作成します。
ここでは、DynamoDBのデータを更新するコードを使用します。
※ 本来、DynamoDBのデータを更新するだけであれば、マッピングテンプレートで完結します。
詳しくは、こちらを参照ください。
import boto3
from boto3.dynamodb.conditions import Key, Attr
def lambda_handler(event, context):
id = event['input']['id']
favorite = event['input']['favorite']
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Radio')
response = table.update_item(
Key={
'id': id
},
UpdateExpression='SET favorite = :val1',
ExpressionAttributeValues={
':val1': bool(favorite)
}
)
return {"id": id, "favorite": favorite}
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でクエリを実行し正しい値が返ってくることを確認します。
正しく動くことを確認できました。