スキップしてメイン コンテンツに移動

AWSのサービス理解 - AppSync, API Gateway

AWSの読み込みは少し間が空いたけど、業務で使うものを中心に読み込む。

AppSync

App SyncはManaged GraphQLサービス。
GraphQL自体の説明として、(特にRESTful APIとの比較で)使う理由は下記が紹介されていた。

* APIドキュメントを書かなくてもAPIを定義したスキーマをベースに自動生成できる
* クライアントがレスポンス形式を指定できる
* サブスクリプションを使用してリアルタイムに処理できる

1番目のはRESTful APIでもOpenAPI Generatorを使って当たり前のようにできるからちょっと特徴にはならないと思うけど。


AppSyncを設計する上では、次が勘所らしい
* バージョン管理:バージョン管理はせず、呼び出すスキーマに@depecatedのアノテーションを足す
* Null許容:引数がないと意味がないパターンはNullable、オブジェクトの存在が保証されるものはNon-null
* 認証:@aws_authのアノテーションを使ってCognito User Groupと合わせたアクセス制御

これ読んだ。タイトルと中身が合ってないのでおすすめはしない。
GraphQLの基礎を学ぶにはいいけど、AppSyncが何してくれるのか、への言及が少なすぎて、GraphQLの説明なのかAppSyncの説明なのかがわからない部分が多かった。

次は同じ方のBlack Beltの資料。
AppSyncのコンセプトとして次のものが紹介されてる。ただ、やっぱりGraphQLの話とAppSync独自部分との差異が見えにくい。

* AWS AppSync Client
* Data Source
* Identity
* GraphQL Proxy
* Operation
* Action
* Resolver

ただ、読んでいくとAppSync Clientは高機能でオフラインでの処理や認証などもできるし、Data SourceではさすがAWSのサービスだけあってDynamoDBなど他のSaaSとの連携も容易みたいだ、というのが読み取れる。

またGraphQL ProxyはMutationのコンフリクト解消についてLambdaと連携させたカスタムロジックももてる様子。
さらに、リゾルバーについては、マッピングテンプレートという、リクエストをデータソースの命令に変換、データソースからの応答をレスポンスに変換をそれぞれ定義する機能がある。
その他Resolver Helperと称した便利機能(e.g. タイムスタンプ処理, 自動採番)もある。

(リンクはPDFダウンロード直リンク注意)
【AWS Black Belt Online Seminar】AWS AppSync 

ここで、別の人の資料。
改めてAppSyncとは、ということでこれが一番わかりやすい。これまでの資料の最新版だと思うので、後続の方がわかりやすいのはある面当たり前かもしれない。
(GraphQLファサードだけなにが言いたいのかわからなかったけど)

* GraphQL マネージド・サービス 
* アカウントの DataSourceに接続 
* データ同期、リアルタイム、 オフライン機能 
* GraphQL ファサード 
* 競合の検出と解決
* セキュリティ(API Key, IAM, Cognito, OIDC)

近頃の重要機能のアップデートとしての紹介では次のものが触れられてた。

* Pipeline Resolver / Delta Sync:複数のResolverの処理をまとめて1つのResolverとして動作させることができるようになった
* DataSourceにAurora Serverlessを追加
* AWS Amplify FrameworkがAurora Serverless、GraphQL、OAuthに対応
* AppSyncがGraphQL APIのタグ付サポート:Query, Mutation, Subscriptionといった操作に対してコスト配分や追跡ができるようになった
* AppSyncでGraphQLオペレーションのパフォーマンスと状態の可視性が向上
* Amplify FrameworkにてLambda関数、DynamoDBカスタムインデックスをサポート
* Multi-Auth対応

結局最後までGraphQLファサードは分からず、検索しても同じ用語では日本語・英語共にうまく引っ掛けられなかった。GraphQLの特徴として複数のデータソースのFacade(正面、入り口にある面)になるみたいな部分はあるからそれについて触れてるのかな......でもAppSyncの特徴として触れているのだとしたらGraphQLではそれは当たり前のような。

(リンクはPDFダウンロード直リンク注意)
[AWS Black Belt Online Seminar] AWS AppSync


API Gateway

意外と単独で語られている資料が少なかった。
APIをどう定義するのか、とほぼ同義の内容かあるいはAWSのサービスを使ってどう認証するのか、について書かれていることが多かったのでそれはそれとしていくつか気になったところをピックアップ。

* RESTful API(HTTPメソッド系)だけでなく、WebSocketも対応している。(知らなかった!)
* OpenAPIとSwaggerのスキーマからのインポートにも対応している。
* ペイロードサイズは10MBが上限。
* AppSyncでも使われていたマッピングテンプレートを使って、値を変換したり形式をXMLからJSONに変えたり、といった対応もできる。
* リクエストやレスポンスの構造をJSONでモデル定義して設定できる。(OpenAPIやSwaggerに対応してるんだから当たり前か)
* スロットリング制限はクライアント側とサーバー側、それぞれで実現可能。
* Canary Release(カナリアリリース)が実現可能で一定流量をカナリアリリースした側に流すようなことが実現可能。
* API Gatewayでクライアント証明書を作成し、バックエンドのHTTPサービスに組み込むことで、API Gatewayからのアクセスであることを示させることができる。

JSONでモデル定義するところで、JSON Schema draft4形式、と出てきてちょっと気になった。
調べると、IETFが定義していて、最新だとdraft8まであるみたい。

これはどんなことが書かれているかというと、例えば、3.6. JSON value equalityから抜粋するとこんな感じ。

Two JSON values are said to be equal if and only if:
both are nulls; or
both are booleans, and have the same value; or
both are strings, and have the same value; or
both are numbers, and have the same mathematical value; or
both are arrays, and:
have the same number of items; and
items at the same index are equal according to this definition;
or
both are objects, and:
have the same set of property names; and
values for a same property name are equal according to this
definition.


[AWS Black Belt Online Seminar] AWS API Gateway

ザーッと見て、API GatewayでもWebsocketには対応しているみたいだから、そうなったときにAppSyncでGraphQL使いたいなーというときのアーキテクチャーとして、API Gatewayを間に入れるべきなのかどうなのかとか、そういったところはちょっと気になった。
多分AppSyncの使用事例を眺めるといいのだろうけど。