WEBアプリサーバレスアーキテクチャ【入門】

snow
2020-09-11
snow
2020-09-11

はじめに


 多層アプリケーション (3 層、n 層など) は、この数⼗年にわたり、根幹となるアーキテクチャパターンとして使⽤されています。多層アプリケーションは、ウェブサービスを使⽤するためにサービス指向アーキテクチャ (SOA) ⼿法を使⽤して構築されることがありました。この⼿法では、ネットワークは階層間の境界として機能します。ただし、アプリケーションの⼀部として新しいウェブサービス層を作成するという多くの単調な作業を⾏う必要があります。多層ウェブアプリケーション内に記述されたコードの⼤部分は、多層パターンの直接的な実装です。

3 層アーキテクチャの概要

3 層アーキテクチャは、ユーザー向けのアプリケーションで⼀般的なパターンです。このアーキテクチャは、プレゼンテーション層、ロジック層、データ層で構成されます。プレゼンテーション層は、ユーザーが直接操作するコンポーネント (ウェブページ) です。ロジック層は、プレゼンテーション層のユーザーアクションを、アプリケーションの動作を制御する機能に変換するために必要なコードを含んでいます。データ層は、アプリケーションに関連するデータを保持するストレージメディア (データベース、オブジェクトストア、キャッシュ、ファイルシステムなど) で構成されます。

3layer_2.png

サーバレスアーキテクチャ


サーバーレスロジック層

 3 層アーキテクチャのロジック層は、アプリケーションの頭脳に相当します。Amazon API Gateway と AWS Lambda を統合してロジック層を構築する
と、この頭脳に⼤きな変⾰をもたらすことができます。2 つのサービスの機能を組み合わせることで、⾼可⽤性とスケーラビリティを備えたセキュアな本番環境向けサーバーレスアプリケーションを構築できます。アプリケーションで数千台のサーバーを使⽤するとしても、このパターンでは、サーバーを 1 台も管理する必要がありません。さらに、この 2 つのマネージドサービスを組み合わせて使⽤することで、以下のような利点も得られます。• オペレーティングシステムの選定、保護、パッチ適⽤、管理を⾏う必要がない
• サーバーのサイジング、モニタリング、スケールアウトを⾏う必要がない
• 過剰プロビジョニングによる、コスト発⽣のリスクがない
• 過少プロビジョニングによる、パフォーマンス不⾜のリスクがない
また、各サービスの特定の機能は、多層アーキテクチャパターンで効果を発揮します。

データ層

AWS Lambda をロジック層として使⽤すると、データ層のデータストレージをさまざまな選択肢の中から選択できます。これらの選択肢は、Amazon VPC でホストされるデータストアと IAM の下で認可されるデータストアという 2 つのカテゴリに分類できます。AWS Lambda では、そのどちらともセキュアに統合できます。
Amazon VPC でホストされるデータストアAWS Lambda と Amazon VPC の統合により、関数とさまざまなデータストレージ技術をプライベートかつセキュアな⽅法で統合できます。
• Amazon RDS
Amazon Relational Database Service (Amazon RDS) で提供されているエンジンのいずれかを使⽤します。Lambda で記述したコードから直接Amazon RDS に接続します。Lambda の外部から接続する場合と同様ですが、Lambda を使⽤することには、AWS Key Management Service(AWS KMS) と簡単に統合して、データベースの認証情報を暗号化できるという利点があります。
• Amazon ElastiCache
Lambda 関数をマネージド型のインメモリキャッシュと統合して、アプリケーションのパフォーマンスを向上させます。
• Amazon RedShift
レポート、ダッシュボードを作成するために、またはアドホッククエリの結果を取得するためにエンタープライズデータウェアハウスに対して安全にクエリを実⾏する関数を作成できます。

IAM の下で認可されるデータストア

AWS Lambda は IAM と統合されているため、AWS API を使⽤して直接利⽤できる AWS のサービスとの統合を保護するために IAM を使⽤できます。
• Amazon DynamoDB
Amazon DynamoDB は無限にスケーラブルな AWS の NoSQL データベースです。Amazon DynamoDB を使⽤すると、規模に関係なく、10 ミリ秒未満のパフォーマンスでデータレコード (現時点で、400 KB 以下) を取得できます。Amazon DynamoDB のきめ細かいアクセスコントロールを使⽤すると、Lambda 関数で DynamoDB の特定のデータについてクエリを実⾏するときに最⼩権限のベストプラクティスに従うことができます。
• Amazon S3
Amazon Simple Storage Service (Amazon S3) では、インターネット規模のオブジェクトストレージを提供します。Amazon S3 は、オブジェクトの耐久性が 99.999999999% になるように設計されているため、低コストで⾼い耐久性を備えたストレージを必要とするアプリケーションに適しています。また、Amazon S3 は 1 年を通してオブジェクトの可⽤性が最⼤ 99.99% になるように設計されているため、⾼可⽤性ストレージを必要とするアプリケーションに適しています。Amazon S3 に保存されたオブジェクト (ファイル、イメージ、ログ、任意のバイナリデータ) はHTTP 経由で直接アクセスできます。Lambda 関数は、仮想プライベートエンドポイントを経由して Amazon S3 と安全にやり取りでき、S3 内のデータへのアクセスは、Lambda 関数に関連付けられた IAM ポリシーのみに制限できます。
• Amazon Elasticsearch Service
Amazon Elasticsearch Service (Amazon ES) は、⼈気のある検索分析エンジン Elasticsearch のマネージドサービスです。Amazon ES では、クラスターのプロビジョニング、障害検出、ノードの交換がマネージドサービスとして提供されます。Amazon ES API へのアクセスは IAM ポリシーを使⽤して制限できます。

プレゼンテーション層

Amazon API Gateway によって、プレゼンテーション層でのさまざまな可能性が広がります。インターネット経由でアクセス可能な HTTPS API は、HTTPS 通信を⾏うことができる任意のクライアントが利⽤できます。アプリケーションのプレゼンテーション層に使⽤される可能性がある⼀般的な例を以下に⽰します。
• モバイルアプリケーション: Amazon API Gateway と AWS Lambda を使⽤してカスタムビジネスロジックと統合できることに加えて、ユーザーID を作成および管理するメカニズムとして Amazon Cognito を使⽤できる可能性があります。
• ウェブサイトの静的コンテンツ (Amazon S3 でホストされたファイルなど): Amazon API Gateway の API で Cross-Origin Resource Sharing(CORS) を有効にすることができます。これにより、ウェブブラウザが、静的ウェブページ内から直接 API を呼び出すことができるようになります。
• その他の HTTPS 対応クライアントデバイス: インターネットに接続された多くのデバイスは、HTTPS を経由して通信できます。Amazon APIGateway を使⽤して作成した API とクライアントは標準の HTTPS を使⽤して通信します。特別なものでも独⾃仕様でもありません。特定のクライアントソフトウェアやライセンスは必要ありません。

サンプルアーキテクチャパターン

プレゼンテーション層: Amazon S3 でホストし、Amazon CloudFrontで配信する静的ウェブサイトのコンテンツ。Amazon S3 で静的ウェブサイトのコンテンツをホストすると、サーバーベースのインフラストラクチャでコンテンツをホストするよりもコスト効率が向上します。ただし、リッチな機能を提供するウェブサイトでは、多くの場合、静的コンテンツを動的なバックエンドと統合する必要があります。
• ロジック層: Amazon API Gateway/AWS Lambda/AWS AppSync。Amazon S3 でホストする静的ウェブコンテンツは、CORS を有効にして Amazon APIGateway と直接統合できます。
• データ層: 必要に応じて、さまざまなデータストレージサービスを利⽤できます。

web_saverless_2.png

まとめ


多層アーキテクチャパターンでは、管理しやすい疎結合型のスケーラブルなアプリケーションコンポーネントを作成するためのベストプラクティスに従うことを推奨します。Amazon API Gateway による統合や、AWS Lambda でコンピューティングを⾏うようなロジック層を作成する場合、この⽬標の達成に必要な作業量を減らしながら、⽬標の達成に向かうことができます。