【アップデート】AWS AppSync に Direct Lambda Resolvers が追加されました

記事タイトルとURLをコピーする

こんにちは、技術1課の加藤です。 普段はYouTubeでペラペラ喋ってますが、今回はブログ記事で皆さんにアップデート情報をお届けしてみようかと。

今回は、AppSync に新しく追加となった Direct Lambda Resolvers のお話です。

AWS AppSync が GraphQL API 用の Direct Lambda Resolvers をリリース

AppSync の Direct Lambda Resolvers とは?

一行で表すと VTL を使わずに直接 Lambda を呼び出すことができる AppSync リゾルバのオプション となります。

いろいろ単語が出てきたのでさらっと説明していきます。

AWS AppSync

f:id:kkato1030:20200807124117p:plain

まずは AppSync のご説明から。 AWS AppSync について調べていると、リアルタイムデータ同期機能とかオフラインプログラミング機能とかいろんな機能が出てきますが、その実態は マネージドの GraphQL サービスです。

では GraphQL とは何か、軽くご説明します。

GraphQL

API 仕様のひとつで、概念的には REST API などと並ぶものになります。 REST が URL でリソースを特定、HTTPメソッドでリソースへの操作を指定すると言う形を取るのに対し、GraphQL は単一のエンドポイントを用意してそこにQueryを投げ込むことで操作を行います。

この辺は AWS AppSync の Blackbelt 資料に非常にわかりやすく書かれていますので詳細はこちらご確認ください。

【AWS Black Belt Online Seminar】 AWS AppSync

REST に対する GraphQL の利点だけいくつか述べておくと、

  • あらゆるAPI呼び出しを単一のエンドポイントにまとめられる
  • 柔軟なQueryが使えるためオーバーフェッチや複数回のAPI呼び出しをさけ、一回のAPI呼び出しで必要なデータだけを取得できる
  • データ更新を購読 (Subscribe) でき、リアルタイムにデータ更新を受け取ることができる

といったところでしょうか。 シンプルなAPIであればRESTの方が設計しやすいと思いますが、複雑なデータ取得・更新を行うようなユースケースには GraphQL がマッチします。

と言うことで、

  • REST API のマネージドサービス = API Gateway
  • GraphQL のマネージドサービス = AppSync

と覚えてください。

AppSync リゾルバ

さて、次にリゾルバです。 これは AppSync が受け取ったQueryを実際に処理する部分のことです。

中身は以下の図のようになっています。

f:id:kkato1030:20200807123726p:plain

AppSync が受け取ったQueryをリゾルバが受け取るのですが、

  1. まずVTLで書かれたリクエストマッピングを通ります。ここでリクエストの内容を整形してデータソースに渡します
  2. データソースは受け取ったリクエスト内容に応じてデータの取得や更新処理をして、レスポンスを返します
  3. するとレスポンスマッピングを通ってレスポンスデータが整形され、クライアントにデータが返ります

つまりデータの流れは以下のようになるのです。 リクエストマッピング (VTL) -> データソース -> レスポンスマッピング (VTL)

ダイレクト Lambda リゾルバ

さてようやく本題に戻ってきました。 今回新しく登場した Direct Lambda Resolvers では、リクエストマッピングとレスポンスマッピングを省略することができます。

f:id:kkato1030:20200807123747p:plain

AppSync が受け取ったリクエスト情報はそのままコンテキストとしてLambdaに渡され、Lambdaが返したレスポンスはGraphQLのレスポンス形式に合わせて自動で整形されクライアントに返されます。

ちなみに今回のアップデート、正確に言うとリゾルバの選択肢に Direct Lambda Resolvers、と言うものが増えたわけではありません。 Lambdaをデータソースとして利用するリゾルバを作成する際に、マッピングテンプレートの設定がON/OFFできるようになったと言うのが実際です。

f:id:kkato1030:20200807123757p:plain

リクエストレスポンスの両方を使う、両方を使わない、だけでなくリクエストだけ、レスポンスだけ利用するということも選択可能です。

何が嬉しいの?

「VTLを書かなくていい!」 これに尽きます。

VTL は AWS のサービスを利用していると定期的に見かけるテンプレート言語です。 独自のユーティリティ (UUIDの自動生成とか) がいろいろ揃ってますしちゃんと覚えて使えば便利なのでしょうが、どうしても学習コストがかかります。

Lambdaをリゾルバとして使う利点に「自分の好きな、慣れている言語で処理が書ける」ことがあります。 しかし今までは結局リクエスト、レスポンスマッピング層でVTLが使われているため、結果としてVTLを扱う必要が出てきてしまっていました。

標準テンプレートとかあるし Amplify とか使って自動生成もできるんですが、触らなくていいならそれに越したことはないですよね。

もしあなたがAPI Gatewayユーザーなら、Lambdaプロキシ統合機能をイメージしてもらうとわかりやすいんじゃないかと思います。

API呼び出しに対して Lambda を直接呼ぶという形。あれが出てきたことでリクエスト・レスポンスのマッピングの必要がなくなって楽になった素敵機能です。あれとおんなじようなもの、と思えば嬉しさが伝わりますよね? きっと。

まとめ

長くなりましたが、AppSyncのダイレクトLambdaリゾルバ機能を取り上げました。 新しい概念がポンポン出てくる AppSync ですが、GraphQL を扱う上では非常に便利なサービスです。

今回のダイレクト Lambda リゾルバの登場でさらにリゾルバの作成が取っ掛かりやすくなると思いますので、特にまだ触ったことない人はこの機会に使ってみると良いかもしれません。

終わりに

ちなみにこちらの内容、8/7放送の毎日AWS※で取り上げています (※耳だけで気軽にアップデート情報をキャッチアップする、ラジオ感覚放送として毎平日 8:00〜 YouTube / Podcast にて放送中です!)

youtu.be

さらに 8/12 (水) の30分でわかる! AWS UPDATE 放送でも取り上げる予定なので、ぜひご覧いただけると!

www.youtube.com

加藤 和也(記事一覧)

クラウドインテグレーション部・技術1課

AWS Amplify が好き。