前回、AWSを利用したサーバレスアーキテクチャという構成の紹介をしました。サーバレスという言葉に違和感があると、多くの意見を聞いて成る程と思いました。意味的には、EC2インスタンスレスやサーバのマネージメントレスという意味なのですが、それをサーバレスと言うのかとのご意見でした。Gatewayを利用した3-Tier(3層)構成、このどちらの方が主流になるかです。結論的にはケースバイケースなので、一方が他方を完全に圧倒するというケースはないと思います。今後の見通しとして、どちらに注力していくか考えたいと思っています。いうことで、前回の話とかぶるところが多いですが、改めて考えてみます。Cognitoを利用した2-Tier構成2-Tier構成の場合は、AWSの各種サービスの利用制御はモバイル/JavaScriptアプリ側となります。その際の肝となるのが、Cognitoとなります。Cognitoの機能の1つに、認証後のユーザに対しての一時的な権限付与があります。認証後のユーザに対してDynamoDBに書き込み権限を与えるといったことも出来ますし、逆に未認証の場合にも読み込み権限のみ与えるといったことも可能です。一方で、CognitoはあくまでAWSリソースに対してのみの権限付与の機能です。構築するシステムに対しての権限付与ではありません。その為、このユーザはシステム管理者権限だからこの機能が使えるとといった制御には基本的には使えません。権限付与も、認証済み・未認証の2値しか取れません。この為、ユーザ側のシステムで制御する必要があります。この辺りをどうするかが、2-Tierにするか3-Tierにするかの設計のポイントではと思います。面倒くさいことを考えなくてよいのであれば、アプリ単体で見た場合に、2-Tierで作る方がシンプルかつ短期間で構築できると思います。Hubというサービスも提供されています。それが出来ない場合は、アプリの方で制御するかCognitoを利用して、そちらの方で権限制御することになります。後者の場合、実質的に3-Tierになります。Gatewayの機能を考えると、実質的にLambda前提で利用することが多いと思います。Proxyという面白い機能があるものの、現状ではそれほど使い勝手はよくなくLambdaを介した方が便利なことが多いでしょう。Gateway⇒Lambda⇒AWS各種リソースという形になります。この構成のメリットとしては、APIを通じて連携する為にモバイル/JavaScriptのクライアント側とサーバ側であるAWSを完全に分離できるところです。極端な話、APIのインターフェイスを同じにすればサーバ側を別のクラウドであったりオンプレミスでも、クライアント側としては関係なくなります。AWS側も、クライアント側がiOSであろうがAndroid,JavaScriptということも意識しません。疎結合という点で、素晴らしいですね。2-Tierアーキテクチャで課題となった認証機能はどうするのでしょうか?ロジックについては、Lambdaを使って実装することになると思います。一方で、その実装の一部でCognitoを利用した方が楽に作れると思います。いうのは、AWSに対する一時的な権限発行等は、ちゃんと管理するのはかなり手間が掛かります。そこについては、サービスとして提供されているものを利用することをお勧めします。次にシステム的な権限管理については、Lambda内で独自に管理することがあります。権限管理のモジュールは、AWS外にいろいろあるのでそちらを利用するということも検討できます。JavaやPythonが利用できるようになっているので、選択肢は広がっています。Gatewayのデメリットとしては、2-Tierアーキテクチャに較べてオーバヘッドが多いところです。Gatewayを通るために、登場人物が多く通信箇所も増えます。JSONを介して通信することが多いので、通信量も増えます。その辺りのトレードオフを考える必要があります。まとめ2-Tierにしろ3-Tierにしろ、権限管理については、まだまだ面倒くさいことが多く、今のところ決定打はありません。どちらの構成にするにしろ、CognitoとLambdaを利用する可能性は高いです。今のうちに習熟しておくと、いろいろ効率化できて無駄な時間に人生を費やせる時間が8%くらい捻出できるかもしれません。どちらも無料枠で相当使えるので、まずは試してみることをお勧めします。万回の同期操作が可能です。上記をテーマにしたAWSアプリ本を書いています。2-Tier,3-Tierのサンプル多数掲載しているので、ぜひ読んでみてください。Gatewayの話をしてきました。Vol.89を頂きました。はてなブログをはじめよう!dkfjさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。