こんにちは。仕事でAWSの構築し、プライベートでAWSの研究と技術書の執筆をし、Amazonで本を売っているAmazon依存症の佐々木(@dkfj)です。
今回の基本に立ち返ろうシリーズ(?)は、EBSです。EBSといっても、2020年2月に出てきたAmazon EBS マルチアタッチについです。この機能、ものすごくザクッというと、EBSを複数のインスタンスから共有する仕組みです。EC2とかEBSの設計をしていると誰しも一度は、EBSを複数のインスタンスで共有できないのかなぁと思ったことはあるんではないでしょうか?新機能として出たマルチアタッチの仕組みは、その救世主となるのでしょうか?簡単に解説してみます。
EBSのマルチアタッチ機能の概要
まず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 ボリューム上の標準ファイルシステムを操作できるようにする設定は、サポートされていません。
OSが備えているファイル保護の仕組みは、マルチアタッチでは対応していないので、データの扱い方によってはファイルが壊れることがありますよということです。端的にいうと、排他制御ができないということです。じゃぁ、書き込み用のインスタンスを1台にして、後はリードオンリーのインスタンスにすれば良いのではという案も出てくると思いますが、リード側は書き込み完了を検知できないので難しそうです。じゃぁ何に使うのというところを、考察してみます。
EBSのマルチアタッチ機能のユースケース
先述の制約を考えると、参照系のみの不変のデータを扱うのに良さそうだなと思いした。みなさん、AWSが提供するパブリックデータセットってご存知でしょうか?主に学術向けで、天文や科学、気象データなどをパブリックで公開して役立てようというプロジェクトです。
今見てみると、データはS3で提供されているのですが、昔はEBSのスナップショットとして公開されていたような気がします。それを自分の環境でEBSとして実体化させて使うと。データ分析の分野であれば元となるデータセットがあって、それを元に複数のインスタンスで計算するというのがよくあると思います。その際、個々のインスタンスにEBSをアタッチすると高コストになりますが、マルチアタッチEBSであれば1つ分のコストで済みます。
用途としてはかなり限定されますが、EBSのコスト高で困っているシステムというのは意外に多いです。そういった問題の解決に活用できないか検討するのも良さそうですね。