プログラマでありたい

おっさんになっても、プログラマでありつづけたい

夢の機能なのか?Amazon EBS マルチアタッチを使用した複数インスタンスからのEBS共有

 こんにちは。仕事でAWSの構築し、プライベートでAWSの研究と技術書の執筆をし、Amazonで本を売っているAmazon依存症の佐々木(@dkfj)です。

 今回の基本に立ち返ろうシリーズ(?)は、EBSです。EBSといっても、2020年2月に出てきたAmazon EBS マルチアタッチについです。この機能、ものすごくザクッというと、EBSを複数のインスタンスから共有する仕組みです。EC2とかEBSの設計をしていると誰しも一度は、EBSを複数のインスタンスで共有できないのかなぁと思ったことはあるんではないでしょうか?新機能として出たマルチアタッチの仕組みは、その救世主となるのでしょうか?簡単に解説してみます。

EBSのマルチアタッチ機能の概要

 まずEBSのマルチアタッチ機能はどういったものなのでしょうか?図で見たほうが早いので、それをもとに解説します。

f:id:dkfj:20200903175117p:plain
Amazon EBS マルチアタッチ

 EBSのマルチアタッチの動きとして、まずアベイラビリティー・ゾーン(AZ)をまたいでのアタッチはできません。そもそもEBS自体がAZまたぎでアタッチできないので、その仕様に引きずられるというのはある意味納得できます。同一のAZの場合のみ、複数のインスタンスにアタッチできます。これだけの制約であれば、まだ使えそうな気がしますね。ただ、それ以外の制約が結構ありますので、列挙してみます。

  • 同一のAZのみ(説明済み)
  • Nitro システムのインスタンスのみ利用可能
  • 最大 16 の Linux インスタンス(Windowsはアタッチできるが、インスタンス間で共有されているボリューム上のデータはOSから認識されない)
  • プロビジョンド IOPS SSD (io1) ボリュームのみ利用可能
  • 現状では、us-east-1、us-west-2、eu-west-1、および ap-northeast-2 リージョンのみ利用可能
  • I/O フェンスをサポートしていない
  • ブートボリュームとして作成できない
  • インスタンスあたり 1 つのブロックデバイスマッピングにアタッチできる
  • リュームの作成後に、マルチアタッチを有効または無効にできない
  • ボリュームのボリュームタイプ、サイズ、プロビジョンド IOPS を変更できない
  • Amazon EC2 コンソールまたは RunInstances API を使用してインスタンスの起動時に有効にすることはできない

参照元は、こちらです。
Amazon EBS マルチアタッチを使用した複数のインスタンスへのボリュームのアタッチ - Amazon Elastic Compute Cloud

 いろいろと無い無い尽くしですが、できたばかりのサービスなので致し方がないと思います。一方で、サラッと別のところでもっと大きな課題が提示されています。

EBS Multi-Attach では、標準ファイルシステムはサポートされていません。XFS、EXT3、EXT4、NTFS などのファイルシステムは、複数のサーバーまたは EC2 インスタンスが同時にアクセスするようには設計されていません。したがって、これらのファイルシステムには、書き込み、読み取り、ロック、キャッシュ、マウント、フェンシングなどの調整と制御を管理するための組み込みメカニズムがありません。

複数のサーバーが標準ファイルシステムに同時にアクセスできるようにすると、データの破損または損失が発生する可能性があります。EBS Multi-Attach ボリューム上の標準ファイルシステムを操作できるようにする設定は、サポートされていません。

aws.amazon.com

 OSが備えているファイル保護の仕組みは、マルチアタッチでは対応していないので、データの扱い方によってはファイルが壊れることがありますよということです。端的にいうと、排他制御ができないということです。じゃぁ、書き込み用のインスタンスを1台にして、後はリードオンリーのインスタンスにすれば良いのではという案も出てくると思いますが、リード側は書き込み完了を検知できないので難しそうです。じゃぁ何に使うのというところを、考察してみます。

EBSのマルチアタッチ機能のユースケース

 先述の制約を考えると、参照系のみの不変のデータを扱うのに良さそうだなと思いした。みなさん、AWSが提供するパブリックデータセットってご存知でしょうか?主に学術向けで、天文や科学、気象データなどをパブリックで公開して役立てようというプロジェクトです。

registry.opendata.aws

 今見てみると、データはS3で提供されているのですが、昔はEBSのスナップショットとして公開されていたような気がします。それを自分の環境でEBSとして実体化させて使うと。データ分析の分野であれば元となるデータセットがあって、それを元に複数のインスタンスで計算するというのがよくあると思います。その際、個々のインスタンスにEBSをアタッチすると高コストになりますが、マルチアタッチEBSであれば1つ分のコストで済みます。
 用途としてはかなり限定されますが、EBSのコスト高で困っているシステムというのは意外に多いです。そういった問題の解決に活用できないか検討するのも良さそうですね。

まとめ

 まとめとしては、EBSのマルチアタッチは夢はあるけど、現状では制約が大きい。特に大きな問題としては、ファイルの書き込みの排他制御ができないことです。ただ、参照系にしか使っていないEBSがあるのであれば、ワンチャンあるよという感じです。
 ちょっと発表を聞いた時に比べると夢がしぼんだような気がしますが、私達には夢のストレージであるS3があります。四の五の言わずに、S3を上手く活用する仕組みを考えましょう

booth.pm

booth.pm