質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.98%

AWSのS3とCloudFrontについて

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,580

CyberMergina

score 285

 質問概要

AWSにて既に構築しているシステムで、システムからファイルを管理する機能の実装をすることになりました。
現在、ストレージとしてS3を使うか否か、CloudFrontを使うか否かを検討しています。
ドキュメントにあらかた目を通したのですが、調査に少々自信が御座いません・・・
(料金計算ツールも入力があってるかどうか・・・)
そこで、認識が合っているかどうかご助言頂きたく思います。

 調査していること

「EC2にファイルを保存し、そのファイルへ直接アクセスする」のではなく
S3を使用すると、どのような良い点・悪い点があるのか。
また、CloudFrontを使うとどのような良い点・悪い点があるのか。

 現在の契約状況

  • EC2 * 3台(うち1台がメインシステム)
  • ELB(今後、負荷分散する予定)
  • Route53

 大まかな利用方針

  • 国内のみ利用
  • httpsでの利用
  • ストレージ:1TB(導入1年ほどは300GBもいかないと思います)
  • リクエスト数:20,000/月(導入1年ほどは 100/月 もいかないと思います)
  • リクエスト種別:GET,DELETEのみ(できれば更新はせず、常にファイルは登録・削除にしようとしています)

 現在調査した結果

【料金面のまとめ】

  • EBS(汎用SSD)とS3ならS3の方がストレージ容量が安い
  • S3とCloudFrontなら転送料金は変わらないが、CFの方がリクエスト料金が安い
    ってことで、外部からの取得はCF経由してS3をストレージにするのがいい。

【良い点】

  • S3はレスポンスが早い
  • CloudFrontはアクセス元に近いリージョンにキャッシュを作成するため、
    以降のレスポンスが早くなる。(S3よりも)

【悪い点?】

  • S3にアップする為の方法を習得しなくてはならない
  • CloudFrontのキャッシュに気を付けなくてはならない

以上です。
詳しい方がいらっしゃいましたら、ご助言頂けると非常に助かります。
よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+3

まず、

「EC2にファイルを保存し、そのファイルへ直接アクセスする」

ことによる問題点から考えて見ましょう。

一つ目に、「EC2にファイルを保存する」ことによって、
ファイルの管理法(ディレクトリベースなら、1ディレクトリに入れられるファイルの制限などがありますね)や
拡張時のディスクの増やし方などについて考慮する必要があります。

二つ目に、「ファイルへ直接アクセスする」ことによって、
毎回サーバーがリクエストを処理しなければならないために、処理を分散する方法を考えることや
SSL通信であれば証明書の管理をする必要もあります。

これらの問題に対して、

  • S3 (Object Storage): 一つ目の問題に対応
  • cloudfront (CDN): 二つ目の問題に対応

という関係にあります。

すなわち、
S3はデータを保存するためのサービスであり、
cloudfrontはコンテンツを外部へ配信するためのサービスですので、
サービスで構築するネットワークの中で入るべき位置が異なります。

Client 

↓ 外からアクセス

 [cloudfront] (キャッシュを返すことでサーバー負荷を減らし、レスポンスも早くする)

↓ キャッシュがないところへのアクセスやPOSTなどサーバーで処理する必要があるもの
↓  (キャッシュがあれば cloudfront で処理して返す)

[ELB(入れるなら)] (サーバーを割り振って負荷を分散させる)

↓ 負荷分散

[EC2] (保存や削除・キャッシュされてないものを返すなど、処理を担当)

↓ 保存する必要があるデータ

[S3] (データを保持)

基本的にはこのような構造となることが考えられます。

ここまで踏まえて、ご質問に戻りますと、
システムからファイルを管理するためのストレージとしては S3 の方が、より適切であると言えます。

最終的には cloudfront も導入されるかと思いますが、
一年程度はアクセスも少数であることが予想されるとのことですので、

通常のアクセス
client → EC2 → client

ファイルへのGETアクセス
client → EC2 → (対応S3データのアドレスへリダイレクト) → (client) → S3 → client

ファイルへのPOST/PUT/DELETEアクセス
client → EC2 → (S3のAPIを叩く) → S3 → (API結果) → EC2 → client

こんな感じのルートになるようにしておけば、後々の拡張性など含めてスッキリした感じになるのではないでしょうか。

(ちなみに、awsにこだわらないのであれば、S3のような Object Storage サービスとして
OpenStack の Swift を使わせてくれるサービスは国内外ともに多くあります。
安定性など他の問題も考える必要はありますが、料金重視でしたらこちらの方が安くなる可能性もあります。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/17 09:13

    ご回答ありがとうございました!
    非常にわかりやすく、曖昧だったCloud Frontの活用方法とS3の利用方法も理解できました!
    今後負荷分散の予定もありますので、Cloud Frontの活用も視野に入れてみたいと思います。

    > OpenStack の Swift を使わせてくれるサービスは国内外ともに多くあります。
    > 安定性など他の問題も考える必要はありますが、料金重視でしたらこちらの方が安くなる可能性もあります。)

    安全性や実績を付けるという意味でAWSを社内では選択すると思われるのでS3にしておこうと思います!
    情報ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる