リアルタイム処理の構築を容易にするAWS AppSync
はじめに
本記事で度々登場するGraphQLは、サーバーからのデータに対して、クライアントによるフェッチ、変更、サブスクライブを可能にする、Facebookが開発したオープンソースのAPI用クエリ言語です。
AWS AppSyncとは
AWS AppSyncは、複数のデバイスやユーザーが使用するモバイルアプリケーションのデータを、開発者がリアルタイムで管理及び同期できるようにするサービスです。モバイルデバイスがオフライン状態でも、データへのアクセスや変更が可能です。
また、AWS AppSync ではGraphQLを使用します。変更発生時に各ユーザーのデバイスでどのデータを自動的に同期するかを選択することで、開発者はユーザーエクスペリエンスを最適化し、ストレージと帯域幅の要件を最小限に抑えることができます。
これらの機能を活用すると、ブラウザ、Alexaスキル、ネットワーク接続が失われた場合でも使用できるIoTデバイスなどを含む、リアルタイムのコラボレーション環境を短時間で構築することができます。
※AWS AppSyncの開始にあたり、GraphQLの知識は必須ではありません。
AWS AppSyncの利点
無理なく始めて、ビジネスに合わせたスケーリング
AWS AppSync管理コンソールを使用すると、好みのIDE(Xcode、Android Studio、VS Codeなど)から直接、始めることができます。もしくは、AWS Amplify CLIを使用し、APIとクライアント側のプログラムを自動生成できます。
AWS AppSyncは、Amazon DynamoDB、Amazon Aurora、Amazon Elasticsearch、AWS Lambdaおよびその他のAWSのサービスと統合し、無制限のスループットとビジネスニーズに合わせて拡張縮小するストレージを持った、非常に高度なアプリケーションを開発することができます。
リアルタイムサブスクリプションとオフラインアクセス
Aws AppSyncによって、以下のことが可能となります。
数百万台のデバイスとの間のリアルタイムサブスクリプション
Aws AppSyncでは、GraphQLサブスクリプションを使用して、データのどの分をリアルタイムで利用可能にするかを指定できます。GraphQLサブスクリプションはアプリケーションコードに含まれるシンプルなステートメントで、サービスに対してどのデータをリアルタイムで更新するかを指示します。
アプリデータへのオフラインアクセス
Amplify DataStoreは、ウェブ、モバイル、IoT開発者向けのクエリ可能なデバイス上のDataStoreをローカルファーストの使い慣れたプログラミングモデルで提供します。これにより、オンラインやオフライン関係なく、データをシームレスにやり取りできます。
Aws AppSyncとAmplify DataStoreを組み合わせると、Amplify DataStoreはクラウドのアドバンストバージョン管理、競合検出、解決を活用して、さまざまなクライアントからのデータを自動的にマージするだけでなく、データの一貫性と整合性を提供できます。そのため、データ競合の解決などに関して、ユーザーの対応は必要ありません。
分散データへの一元的かつ安全なアクセス
GraphQLを使用して、単一のネットワークコールで複数のデータソースにわたって複雑なクエリと集計を実行します。Aws AppSyncを使用すると、次のことができます。
- 複数の同時認証モードを使用してアプリデータを簡単に保護する
- GraphQLスキーマから直接データ定義レベルでセキュリティと、きめ細かいアクセス制御を定義する
AWS AppSyncでは、アプリケーションのニーズに応じて、データのアクセスと許可にいくつかのレベルを設定できます。AWS IAMを使うと、アクセス許可をさらに制限できます。
AWS AppSyncは、メールとパスワードの機能についてAmazon Cognitoのユーザープールと統合されており、ソーシャルプロバイダー(Facebook、Google+、Login with Amazon)や、SAMLによるエンタープライズフェデレーションとも統合されています。そのため、次の機能を利用できます。
- ユーザーとロールを論理的に組織化するためのグループ機能
- アプリケーションへのアクセスのためのOAuth機能
AWS AppSyncの特徴
(GraphQL)シンプルになったデータアクセスとクエリ
AWS AppSyncでは、次のものが使用されます。
- サーバーにあるデータのフェッチ、変更
- サブスクライブをクライアントアプリケーションから実行できるデータ言語
- GraphQL
GraphQLクエリでは、サーバーから返されたデータの構造化の方法をクライアントが指定します。これにより、クライアントは必要なデータのみを必要なフォーマットでクエリできます。
また、GraphQLには、「自己観察」という機能があり、バックエンドの知識がない開発者でも利用可能なデータを見つけることができます。
アプリ内でのデータのクエリ、フィルタリング、および検索
AWS AppSyncを使用することで、クライアントアプリケーションはデータ要件をGraphQLによって指定することができます。そのため、必要なデータのみがフェッチされ、サーバー側とクライアント側両方でのフィルタリングが可能です。
AWS AppSyncでは、前述のようにAmazon DynamoDBなどがサポートされています。そのため、GraphQLの操作として、簡単な検索、複雑なクエリやマッピング、テキストの全文検索、あいまい検索、キーワード検索、位置情報検索などが挙げられます。
キャッシング
AWS AppSyncのサーバー側のデータキャッシング機能は、データを高速インメモリ管理キャッシュできるようにし、低レイテンシーでデータを配信することで、データソースに直接アクセスする必要性を減らします。これは完全マネージド型のため、キャッシュクラスターを管理する運用上のオーバーヘッドがなくなります。
また、有効期限がカスタマイズ可能なGraphQLスキーマで定義したデータフィールドと操作を選択的にキャッシュする柔軟性を提供しているので、開発者はビジネスニーズに最適なパフォーマンスを設定できるようになります。
ユースケース
リアルタイムの共同開発
データのブロードキャスト
AWS AppSyncを使用し、以下のいずれかの方法によってスケーラブルなリアルタイムの共同開発ユースケースを実現することができます。
- 接続しているクライアントすべてにバックエンドからデータをブロードキャストする
- クライアント間で相互にデータをブロードキャストする
(利用例)
同一のデータをすべてのクライアントにブロードキャストし、ユーザーがスクリーン上のデータについて投票したり意見を述べたりし、リアルタイムで応答できるセカンドスクリーンのシナリオを作成する
チャットアプリケーション
Aws AppSyncを使用して、共同作業向けの対話型のアプリケーションを実現することができます。
(利用例)
複数のプライベートチャットルームをサポートし、会話履歴にアクセスでき、デバイスがオフラインの場合でも送信メッセージをキューに挿入できるような、モバイルおよびウェブアプリケーションを構築する
IoT
AWS AppSyncを使用して、AWS IoTに送信されたIoTデバイスデータにアクセスできます。
(利用例)
モバイルまたはウェブアプリケーションにリアルタイムのダッシュボードを構築し、コネクテッドカーでテレメトリを視覚的に確認する
データレイヤー
マイクロサービスのアクセスレイヤー
マイクロサービスが、それぞれ異なる環境下で動作している場合でも、Aws AppSyncを単一のインターフェイスとして使用してアクセスし、複数のマイクロサービスのデータをユーザーのアプリケーションで組み合わせることができます。
数か国語でのバックエンドデータのアクセス
単一のコールで複数のデータソース
(Amazon Aurora ServerlessのSQLデータベース、Amazon DynamoDBのNoSQLテーブル、Amazon Elasticsearch Serviceの検索データ、Amazon API GatewayのRESTエンドポイント、AWS Lambdaのサーバーレスバックエンド)からデータを取得または変更することができます。この他に次のことができます。
- GraphQLコネクションを使用して、クエリを行ったり、データソース間の関係を作ったりする
- ウェブおよびモバイルのクライアントに、リアルタイムおよびオフラインの機能を提供する
さいごに
本記事では、AWS AppSyncの利点や特徴、ユースケースについて解説しました。
AWS AppSyncの利用料金は、以下のように使用した分に対してのみ支払いが発生し、最低料金やサービス使用義務はありません。ただし、AWS AppSync GraphQL API専用のキャッシュをオプションでプロビジョニングする際、選択するインスタンスタイプに応じて課金されます。
- 4.00USD/クエリとデータ変更操作100万回
- 2.00USD/リアルタイムアップデート100万回
- 0.08USD/AWS AppSyncサービスへの接続100万回
AWS AppSyncは、ワークロードの種類に関わらず透明性と低価格が実現されており、リアルタイム処理の構築や自動更新フィード、通知機能実装も容易にしてくれるサービスです。