読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

負荷の大きなものをS3で提供する「Web Storage」

概要

サイズの大きいファイル配信を始めるときに使う「Web Storage」パターンについてまとめる

詳細

サイズの大きいファイル配信を始めると次の問題が顕著になってくる

  • 通信速度の問題

1ユーザのダウンロード速度が回線帯域を占有するため、十分な速度で通信できない

  • サーバのパフォーマンスの問題

一般にwebサーバは「ユーザにファイルを送信したら、すぐにコネクションを切る」ことで同時接続数を減らしパフォーマンスを向上させている
だが、ファイルサイズが大きいとなかなかコネクションを切ることができず、コネクション数が増えサーバのパフォーマンスが劣化する

そこで検討したいのがWeb Storageパターン
Web Storageパターンではサイズの大きなファイルを配信するためにAWSの「S3(Amazon SImple Storage Service)」というインターネットストレージを使う
S3は耐久性や対負荷性能に優れたストレージサービス
S3にデータを保存するには最初に「バケット」と呼ばれる入れ物を作る、所謂ルートフォルダに相当する

S3バケットを作成していく

TOPからS3を選択し、Create Bucketをクリックする
f:id:tiro105:20150321115609p:plain
バケット名とリージョンを指定、リージョンはEC2と同じリージョンを指定する
f:id:tiro105:20150321115739p:plain
バケットの作成直後は、認証されたユーザしかアクセスできないように構成されている
Web StorageパターンではS3に配置されたコンテンツをエンドユーザに公開するため、バケットのアクセス権限を変更する
PermissonsにあるAdd bucket policyをクリック
f:id:tiro105:20150321120047p:plain
Permissionはjsonで管理されているため手書きでは難しい、AWS Polycy Generatorで記載するのでクリック
f:id:tiro105:20150321120319p:plain
以下を設定する

  • Select Type Of Policy

作成するpolicyの種類を選択、ここではS3バケットに設定するpolicyを作りたいので「S3 Bucket Policy」を選択

  • Effect

AllowかDenyかを選びます、ここではAllowを作りたいのでAllowを選ぶ

  • Principal

パーミッションを適用したいユーザを選択、ここでは全ユーザを指定したいので「*」を選択

適用するAWSのサービスを選択する、「Select Type of Policy」で「S3 Bucket Policy」を選択しあときには「Amazon s3」に固定

  • Actions

設定するアクションを指定、読み取り権限は「GetObject」なので、これにチェック

  • ARN

対象とするリソース名を指定、S3バケットの場合「arn:aws:s3:::バケット名/ファイル名」となる
f:id:tiro105:20150321121049p:plain
Add Statementを押し、設定の確認
f:id:tiro105:20150321121156p:plain
設定にな違いがなければGenerate Policyを押下、JSONが出力されるのでコピー
f:id:tiro105:20150321121254p:plain
Bucket Policy EditorにJSONを貼り付け、saveボタン押下
f:id:tiro105:20150321121405p:plain

これでファイルをアップロードすれば見れるようになる
Uploadボタン押下
f:id:tiro105:20150321122118p:plain
対象ファイルをドラッグ&ドロップ
f:id:tiro105:20150321122151p:plain
ファイルがアップロードされた
f:id:tiro105:20150321122213p:plain

これで「http://バケット名.s3.amazonnaws.com/コンテンツ名」でアクセスできるようになる

参考

Amazon Web Services クラウドデザインパターン 実装ガイド 改訂版

Amazon Web Services クラウドデザインパターン 実装ガイド 改訂版