CDP:Direct Hostingパターン
提供:AWS-CloudDesignPattern
インターネットストレージで直接ホスティング
目次 |
解決したい課題
短期間で急激にアクセス数が増加した場合、マシンの増設では間に合わない。これに対応するにはアクセス増を見越してサーバー数を増やしておく方法が考えられるが、無駄にサーバーを増やしておくとコスト面で問題がある。
クラウドでの解決/パターンの説明
このパターンでは、クラウドが提供するインターネットストレージをWebサーバとして利用し、画像や動画などの大容量な静的ファイルをホスティングするだけでなく、HTMLなどもホスティングする。インターネットストレージは元々共有ストレージとして使用される前提で設計されているので、キャパシティー面では問題ない。特定サービスのアクセス数が急激に増加しても、インターネットストレージ全体では問題なく処理できるため、負荷対策を行う必要が無いWebサーバーとして利用できる。
実装
- インターネットストレージのS3上に、公開したい静的なコンテンツ(HTML/CSS/JavaScript/画像/動画など)をアップロードする。
- S3バケットに、コンテンツを公開するように設定する。バケットポリシーに、バケットのコンテンツを公開するパーミッションを設定する。
- S3のWebサイトホスティング機能をオンにし、インデックスページやエラーページを設定することで、S3単体でWebサイトをホストできる。
構造
利点
- 静的コンテンツへのアクセスをS3に任せることで、Webシステムの可用性と耐久性を容易に高めることができる。
注意
- S3上ではサーバーサイドのプログラムを動かすことはできないため、例えばログインユーザーごとに異なるページを出すことはできない。
- S3から配信したコンテンツにJavaScriptを埋め込み、非同期通信で別のサーバーからデータを取得したい場合、データ取得先のサーバーとDNS名が異なってしまうため、JavaScriptのクロスドメイン通信の制約によりJSONPで通信する、もしくはCORSを設定する必要がある。
その他
- CMSのような動的なサイトにおいても、このパターンを活用出来る。例えば、MovableTypeの場合、プログを投稿した際にプログエンジンが静的なHTMLファイルを書き出すため、それをS3においてホスティングできる。
- S3には署名付きURLを発行する機能もある。それを使えば、限定利用者にのみアクセスを許すために署名付きURLを発行することもできる。またその署名付きURLに有効期限を設定することもできる。Private Distributionパターンを参照すること。
- S3ではバケットポリシーというアクセス認証を行う仕組みも用意されている。それを使えば、特定の利用者からのみのアクセスを可能にしたり、HTTPSのみのアクセスに限ったりすることも可能である。
- S3へのアクセス用のセキュリティトークンをAmazon Cognitoを利用して発行すれば、AWS SDK for JavaScriptを使ってクライアントからファイルをアップロードしたり、DynamoDBなどのAWSサービスへ直接アクセスさせることができる。またAWS Lambdaを利用すれば、S3へデータがアップロードされたりデータが更新されたタイミングで、サーバサイドで任意の処理を行う事ができるため、EC2を使用せず、AWSのマネージドサービスだけで様々な動的処理を行う事ができる。