0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

リゾルバーがLambdaのAppSync(Mutation編)

Last updated at Posted at 2022-12-17

概要

この記事では、リゾルバーに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でクエリを実行し正しい値が返ってくることを確認します。
7-1.png

DBの値も確認します。
7-2.png

正しく動くことを確認できました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?