EFS使ってみた 基礎編

AWS, EFS

EFSの仕様

  • 無数のストレージサーバーに分散
  • ペタバイト規模にまで柔軟に拡張
  • EC2から並列アクセスが可能
  • 分散設計により従来のファイルサーバーに本質的に存在したボトルネックや制約を回避できる
  • NFSv4でマウントするとローカルファイルシステムと同じようにファイルやディレクトリを操作できる
  • ファイルシステムの拡大に合わせて、スループットおよび IOPS がスケール
  • TLS
  • ディスク容量制限がなく、使用したぶんだけスケーラブルに拡張される
  • NFS 4.0としてEC2からマウントすることが可能
  • 複数のAZに冗長的に保存されるため信頼性が高い
  • VPCからの使用に限られるため、インターネット上に公開されることなくセキュア
  • スループットスケールが1秒間に数GBを公称しており、EBSよりも高速

というようなものらしいです。
また、パフォーマンスに関しての記述は

  • サイズに関係なく、すべてのファイルシステムは、100 MiB/秒のスループットまでバーストすることができ、1 TiB を超えるものは、ファイルシステムに保存されたデータの 1 TiB あたり 100 MiB/秒までバーストすることができます
  • 10 TiB のファイルシステムは、1,000 MiB/秒のスループットまでバーストすることができます (10 TiB x 100 MiB/秒/TiB)
  • ファイルシステムがバーストできる時間は、そのサイズによって決定され、バーストモデルは、典型的なファイルシステムのワークロードが、必要なときにほぼいつでもバーストできるように設計されています。
  • Amazon EFS は、クレジットシステムを使用して、ファイルシステムがバーストできる時期を判断します。
  • 各ファイルシステムは、ファイルシステムのサイズによって決定されるベースラインレートで時間の経過とともにクレジットを取得し、データを読み書きするたびにクレジットを使用します。
  • ベースラインレートは、ストレージの 1 TiB あたり 50 MiB/秒です (同様に、ストレージの 1 GiB あたり 50 KiB/秒)。
  • 蓄積されたバーストクレジットは、ファイルシステムに、ベースラインレートを上回るスループットを駆動する許可を与えます。
  • ファイルシステムは、ベースラインレートでスループットを継続的に増やすことができます。それが非アクティブであるか、スループットがベースラインレートを下回ると、ファイルシステムはバーストクレジットを蓄積します。
  • たとえば、100 GiB のファイルシステムは、残りの 95% で非アクティブになっていると、5% の時間 (100 MiB/秒で) バーストすることができます。
  • 24 時間にわたって、ファイルシステムは、432,000 MiB のクレジットを獲得します。これは、100 MiB/秒で、72 分間バーストするのに使用することができます。
  • 1 TiB を超えるファイルシステムは、残りの 50% で非アクティブになっていると、常に最大 50% の時間バーストすることができます。

02.png

03.png

あいかわらずクレジットがバーニングするみたいなことを言ってます。
このあたりに注意する必要があるでしょう。
パフォーマンスをチューニングしたくなってもEC2のようにはいかなそうです。

料金

※本記事では東京リージョンを使用しています。

ストレージ 0.36USD/GB
IOPS 7.20USD/MB/秒
EFS FileSync 0.01USD/GB

  • 1か月間で使用したファイルシステムストレージ分のみ料金が発生
  • プロビジョンドスループットモードを使用する場合、1 か月間でプロビジョンしたスループットに応じて料金が発生
  • 東京リージョンは米国等のリージョンと比べて20%高い
  • S3と比べて14倍高い

●料金シミュレーション
料金表をもとに
ドキュメントの料金シミュレーションを東京リージョンでやってみます。

  • 東京リージョンで100GBのデータを保存する
  1. デフォルトのバーストスループットの場合
  2. プロビジョンドスループットの場合(10MB/秒)
  • どちらも5MB/秒のベースラインスループット(100GBのデータを保存しているため)

1.デフォルトのバーストスループットの場合

  • ストレージの総使用量(GB/時間)
    100GB * 31日 * 24時間 == 74,400GB/時間

  • ストレージの総使用量(GB/月)
    74,400GB/時間 / (31日 * 24時間) == 100GB/月

※わかりにくいですがまず時間単位で使用料を算出し、日割りで計算するようです。

  • ストレージ月額料金
    100GB/月 * 0.36ドル == 36ドル

1か月間100GB入れておくと36ドルということがわかりました。

2.プロビジョンドスループットの場合(10MB/秒)

  • ストレージ月額料金(上述のデフォルトのバーストスループットの料金です)
    100GB/月 * 0.30ドル = 30.00ドル

  • デフォルトのスループット (MB/秒-時間)
    (74,400GB/時間 / 20GB/時間) * 1MB/秒-時間 = 3,720MB/秒-時間

※この20GBという数字はどこからきたのかというと、この記述です。

プロビジョンドスループットモードにも 1 GB あたり 50 KB/秒 (または 20 GB あたり 1 MB/秒) となるスループットがストレージ料金に含まれています。

または、と書かれてますが計算を分かりやすくする為にふたつの数字を提示しているようです。
実際には1GB単位で計算されているようです。

74400/20=3720MB/秒
1GBのファイルだった場合は
744/20=37.2MB/秒
とのことで37.2MB毎時のスピードが出るということになるでしょうか。

  • プロビジョンドスループットの合計 (MB/秒-時間)
    10MB/秒 * 31日 * 24 時間/日 = 7,440 MB/秒-時間

※10MBの速度を出したいよ!ってなったときにはこういう数字がでてくるようです。
で、これを元に

  • 課金されるプロビジョンドスループットの合計 (MB/秒-時間)
    7,440 MB/秒-時間 – 3,720 MB/秒-時間 = 3,720 MB/秒-時間

※デフォルトのスループットはもともと含まれているのでマイナスする、という意味ではないかと思われます。

  • 課金されるプロビジョンドスループットの合計 (MB/秒-月)
    3,720 MB/秒-時間 / (31 日間/月 * 24 時間/日) = 5 MB-月

※20GB あたり 1MB/秒のデフォルトスループットがあります
→100GBだと5MB/秒です
→10MB/秒のプロビジョンドスループットを使いたいです
→10MB/秒から5MB/秒を引いて、5MB/秒ぶんの料金がかかります、ということでしょうか・・・。

  • プロビジョンドスループット月額料金
    5MB/秒-月 * 7.2ドル = 36ドル

※単純に10MB毎時の速度を出したい場合、月額で36ドル上乗せされますよということになりそうです。
で、この金額はデータ使用料が多いほど低くなっていくということだと思います。

  • 月額料金合計
    ストレージ月額料金 + スループット月額料金ですので
    36ドル + 36ドル = 72ドル
    ということになりますね。

プロビジョンドスループットを利用すると単純に倍額になったように見えます。
これはわかりやすいわかりにくい例だからそう見えるだけであり、数字を変えてみると

1GBの場合

0.36ドル

1GBで10MBプロビジョンドを使う場合

デフォルトスループットは37.2MB/秒
課金されるプロビジョンドは7440 – 37.2 = 7402.8MB/秒
7402.8 / 744 = 9.95MB
9.95MB * 7.2ドル = 71.64ドル

ストレージ料金とプロビジョンの金額を加算すると
71.64 + 0.36 = 72ドル
100GBのときと同じになりました。
これは・・・

1000GBの場合

360ドル

1000GBで10MBプロビジョンドを使う場合

デフォルトスループットは
7440 – 37200 = -29760
とマイナスになってしまうので、いくらかAWS様からもらえる・・・
・・・ということはなく設定しても加算されないものと思われます。


つまり、プロビジョンドスループットというのは
任意の速度を出したい場合、その保存容量分の金額を
請求をされるということになります。

どういうことかというと1000GBのデータが保存されている場合、
デフォルトスループットは37200MB/秒。
プロビジョンドの値段としては37200/744=50MB
50MB/秒-月 * 7.2ドル = 360ドル
となります。

では、1GBで50MBのプロビジョンドを使いたいとなった場合はどうなるでしょうか?
デフォルトスループットは37.2MB/秒
課金されるプロビジョンドは37200MB – 37.2 = 37162.8MB/秒
37162.8 / 744 = 49.95MB
49.95MB * 7.2ドル = 359.64ドル

359.64 + 0.36 = 360ドル

おわかりいただけたでしょうか・・・
つまり50MB/秒の速度でI/Oしたいとなった場合
1Gだろうが1Tだろうが関係ないということです。

もう少し深く考えると、10MBの楽曲ファイルを、秒間400リクエスト返さなければならないとなった場合、
4000MB/秒で設定しなければならないとなるため、28,800ドル。
逆算すると60PB相当のファイルが入ってる分の金額が請求されることになります。

つまり今までのストレージでは容量は有限でIOPSを設定するという考え方でしたが
EFSではユースケースを元に
「どのくらいの速度でI/Oしたいストレージなのか?」
と考え、そこからMAXのサイズがどの程度なのかを定めることになりそうです。

接続

とりあえず実際に使ってみましょう。

Amazon Linux EC2 インスタンスを使用している場合は、次のコマンドを使用して EFS マウントヘルパーをインストールします。
sudo yum install -y amazon-efs-utils
EC2 インスタンスで「efs」などの新しいディレクトリを作成します。
sudo mkdir efs

というのをあらかじめやったのち

EFS マウントヘルパーの使用
sudo mount -t efs fs-efbb5dce:/ efs

としてマウントします。

できました。数字の読み方がわかりませんが・・・
おそらく、9,007,199,254,739,968バイト(9ペタ)使えるということでしょうか。

アンマウントは umountでいけるようです。

めっちゃ簡単にアタッチ/デタッチできますね。
とはいえコンソール画面などから内部のファイルにアクセスすることは不可能なようです。
基本的にストレージでありファイルシステムの解釈にはOSが必要であるということでしょう。

さて、これをあれこれ調べるにはローカルのファイルをベンチマークする必要がありそうですが、
記事が長くなってしまいましたので続きはまた次回に。

━続く━

この記事を書いた人

鈴木
鈴木juke / footworker
和服とvapeとСистемаと醗酵とたまごふわふわとシャッフル(RUS)とjuke/fwkに傾倒する人です

AWS, EFS