今日の学習ではAWSのストレージサービスについて解説していきます。AWSてよく使われるストレージサービスは次の3つになります。EFS、EBS、S3。それぞれ使用用途によって使い分けをしていくのでその特徴の違いをよく理解しておきましょう。
EFS(Elastic File System)ストレージ
特徴
EFSの一番の特徴は何といってもEC2サーバ間で共通のストレージとして使用できる点です。EFS=家族が共通で使う外付けネットワークハードドライブと考えておくとイメージしやすいと思います。実際の開発環境では特に複数のWebサーバから同じコンテンツを提供したい場合に便利です。例えば、テキストファイル、PDF、画像ファイル、動画ファイル、音声ファイル、そしてプログラムのソースコードも一か所に集めておくことができます。こうすることで複数のサーバにまたがって一か所で管理ができるので、メンテナンス性の良さという意味でも非常に重要な意味を持ちます。
料金
EFSは従量課金制になっています。どういった保存方法をとるかによって料金体系は変わりますが、例えば、東京リジョンでWebサーバ用のストレージとして使用する場合、ユーザがファイルにアクセスする頻度は高めと仮定します。
この時、スタンダード/SSD の場合は1GBあたり毎月 USD 0.36ドルかかります。EFS、EBS、S3ストレージの中では一番コストがかかりますが、サーバ間共通のストレージという利便性は手放せません。
値段の詳細については以下の公式サイトの料金ページを参考にしてください。
https://aws.amazon.com/jp/efs/pricing
EBS(Elastic Block Store)ストレージ
特徴
EBSの特徴は高速なI/O(インプット・アウトプット)にあります。EBSはパソコンの内蔵ドライブのようなものなので、ネットワークを経由しないローカルファイルへのアクセスが高速な代わりに、EFSとは違いEC2サーバ間でファイルの共有はできません1)。また、インスタンスの終了時にデフォルトのEBSストレージは削除される一方、追加のEBSはデータは保持できるという特徴があります。また、高速はファイルアクセスが可能なので、特に厳しくレスポンスの速さが求められるデータベースサーバの用途に向いています。
1)プロビジョンド IOPS SSD (io1とio2) のボリュームであればマルチアタッチが可能です。
料金
EBSも従量課金制です。ストレージ容量と処理量(IOPSとスループット)の合算となります。例えば、東京リジョンで汎用 SSD (gp3)を使用した場合、ストレージ量で1GBあたり毎月 USD 0.096ドルかかります。そして無料枠を超えた処理量がある場合はその分も課金されます。料金はEFSより安く、S3より高い、中間の位置づけのストレージになります。AWSを使用してきた経験から言うと、EC2インスタンスの一番安いサーバ(t2.nano+デフォルト8GBのEBS)で月5ドル位が目安だと考えてもらえればと思います。
以下公式ページからの抜粋です。
https://aws.amazon.com/jp/ebs/pricing
汎用 SSD (gp3) ボリューム
例えば、お客様が 1 か月 30 日間の期間に 12 時間 (43,200 秒) 2,000 GB のボリュームをプロビジョニングしたとします。さらに、ボリュームに対して 10,000 IOPS と 500 MB/秒をプロビジョニングしたとします。
Gp3 ボリュームチャージ:
GB/月につき 0.08 USD を課金されるリージョンでは、課金されます。
(GB/月につき 0.08 USD × 2,000 GB × 43,200 秒/(86,400 秒/日 × 30 日/月)) = 2.667 USD
S3(Simple Storage Service)ストレージ
特徴
S3の特徴は何といってもその超低コストな点にあります。S3はオブジェクトストレージと呼ばれるもので、通常のハードドライブのファイルシステムとは違い、内部的にはフォルダという概念がありません。とはいえ階層構造で管理しないと管理しにくいのでAWSの管理画面ではフォルダの概念を模倣した状態で表示されています。通常のファイルシステムとは違うという意味で、ファイルへのアクセス速度はEBSやEFSに比べると遅いのが特徴です。その代わり安いということです。そして通常のファイルシステムとは違うので、データベースソフトのインストールといったこともできません。単純にファイルを保存する場所ととらえておくとよいでしょう。特にファイルの長期保存・アーカイブに向いています。
もう一つS3の大きな特徴は、Webサーバとしてのホスティング機能があるということです。S3に保存したファイルをインターネットに公開することもできます。ファイルのサイズが小さい場合やアクセス頻度が低いファイルへのアクセスの場合など、必ずしも高速なファイルへのアクセスが必要でない場合はこのWebホスティングの機能は一つのサービスとしてとても有効な手段といえます。
料金
S3は前述の通りEFSやEBSに比べるとはるかに低価格です。例えば、東京リジョンでS3標準のストレージタイプを使用した場合、1GBあたり USD 0.025 ドルかかるります。AWSを使い始めたばかりの場合や個人使用の場合は50TBを超えることは稀だと思いますので、この計算式になると思います。
以下公式ページからの抜粋です。
https://aws.amazon.com/jp/s3/pricing
S3 標準 – 頻繁にアクセスするデータに一般的に使用される、あらゆるタイプのデータの汎用ストレージ
最初の 50 TB/月 USD 0.025/GB
次の 450 TB/月 USD 0.024/GB
500 TB/月以上 USD 0.023/GB
ネットワーク通信料は別料金
EFS、EBS、S3ストレージの3つに共通して言えることですが、インターネット側へ出ていくデータ通信量はストレージ料金とは別になります。S3は前述の通りWebホスティングの機能がありユーザのリクエストに応じてファイルデータの提供ができます。EFSとEBSはそれ単体にWebホスティングの機能はないので、EC2インスタンスにWebサーバをインストールしてEC2インスタンス経由でファイルデータをユーザに提供をしていくことになります。
以下公式ページからの抜粋です。
https://aws.amazon.com/jp/ec2/pricing/on-demand
AWS のお客様は、すべての AWS のサービスとリージョン (中国と GovCloud を除く) を集計して
1 か月あたり 100 GB のインターネットへのデータ転送 (アウト) を無料でご利用いただけます。インターネットへのデータ転送 (アウト) のための 100 GB の無料利用枠はグローバルであり
AWS リージョンに個別にまたは別個に適用されるものではありません。
最初の 10 TB/月 USD 0.114/GB
リッチコンテンツ、特に動画を提供するサービスではデータ通信量がかさむ傾向がありますので、予期せぬ課金を避けるために、課金アラートの設定は必ずしておきましょう。

私の使用例
端的に言うと、EFSをメインで使用、EBSは最低限、S3は主に動画ファイルの保存に使用しています。
基本的にはEFSに各WebシステムのリソースをEFSに配置するようにしています。Webサーバを立てる場合は、EC2インスタンスにデフォルトEBSのみを使用し、容量もデフォルト値の8GBを指定する場合がほとんどです。稀ですが運用途中に足りたくなった場合は16GB、32GBに変更したりしています。Webサーバから提供するものはソースコード含めテキストと画像はEFSに保存したものを使用しています。シムリンクでEFSボリューム内のフォルダを参照するようにしています。
動画ファイルに関してはEFSとS3両方を使用しています。HTML、CSS、Javascript、ソースコードなどテキストベースのものはEFSに保存していていますが。静的なHTML、CSS、Javascriptや画像もS3に保存して運用すべきかもしれませんが、リソースを分散させると管理しにくい面もあるので、EFS内に留めてあります。
データベースサーバについてはRDSも使用していますが、Neo4jやElasitcSearchなどをEC2インスタンスにインストールして使用する場合はEBSは 32 GBや 64 GBと大きめにとってあります。
まとめ
今回はAWSが提供している3つのストレージサービスについて学習しました。EFSは外付けネットワークドライブでサーバ間でシェアできるストレージでした。EBSは内蔵ドライブ同等で高速アクセスに向いていました。S3はアーカイブ用のストレージでWebホスティングもできることを学びました。また、それぞのれ値段についても知りました。高い順に、EFS>EBS>S3 でしたね。ストレージの課金とはまた別にネットワーク通信料も必要なことが分かりました。それぞれの使用用途に応じて使い分けることが大切になってきますので、これら3つのストレージについての特徴はよく押さえておきましょう。
【関連記事】
「AWSのEFSストーレージを作成して、EC2インスタンスにマウントしよう」
「AWSのEBSストーレージを作成して、EC2インスタンスにマウントしよう」
「AWSのS3ストーレージを作成して、EC2インスタンスにマウントしよう」