EC2からStorage Gateway経由でS3をNFSマウント
こんにちは、インフラ担当の赤川です。
AWSの最新情報(英語版)にて、StorageGatewayを利用してEC2からS3マウントが可能になるとのアナウンスされました。
今回のアップデートにより、これまでの問題が解消できるのかベンチマークを取ってみました。
準備した環境
クライアント
比較するために以下A〜C3つのインスタンスを準備しました。
A.FileGateway経由でS3バケットをnfsマウントしたディレクトリをDocumentRootとしたインスタンス B.s3fsでS3バケットをマウントしたディレクトリをDocumentRootとしたインスタンス C.ローカルディスク内にDocumentRootを配備したインスタンス
各インスタンスにhttpdをインストール。 サーバ毎にDocumentRootを変更。
StorageGateway
Gatewayの要件はこちら
・・・なのですが、 読まないで進めたらいつまで経ってもGatewayインスタンスに接続できませんでした。 sshでGatewayインスタンスに接続すると、ご丁寧にvCPUが足りんと警告が。ちゃんと読んでスペックを確認しましょう。 (この画像はCPUでWarningですが、メモリ足りない場合はCriticalが出ていました。)
ちなみにGatewayインスタンスへのssh接続ユーザのデフォルトは「sguser」です。
S3
マウントするバケットを事前に作成しておきます。
FileGateway設定
まずはStorage GatewayのメニューからFile Gatewayを作成します。
GatewayのタイプはEC2を選択します。 赤枠で囲ったボタンをクリックするとEC2起動画面が開きます。
どうやらGateway用のAMIが用意されているようです。 前述の注意点を気にしながらインスタンスを作成します。
インスタンスを作成したらFile Gatewayの画面に戻ります。 Gateway IPアドレスを求められるので先ほど作成したインスタンスのIPを指定します。 続いてアクティベートも実行されます。
次にファイル共有の設定を実施します。 作成したGatewayを選択して「ファイル共有の作成」をクリック。
マウントするS3バケット名を入れます。 また、S3へ接続できるIAMロールも設定しておきます。
完了するとmountコマンドまで表示してくれます。 親切ですね〜。
クライアントからGatewayインスタンスには接続できるようにSecurity Groupを適宜設定します。 後はクライアントインスタンスを準備し、httpインストールとDocumentRootをマウント先パスに変更しておきます。
abベンチを実行
マウント先にテストドキュメントを適宜配備し、httpdを起動しておきます。 s3fsやローカルディスクを利用したインスタンスも起動して各自ベンチを取ります。
Gateway経由でS3マウントしたインスタンスの結果
s3fsでS3マウントしたインスタンスの結果
ローカルディスク利用インスタンスの結果
数回ベンチしてみましたが、ローカルディスク利用時と遜色のない結果となりました。素晴らしい。
ただ、GatewayインスタンスがSPOFになることと、Gatewayインスタンスのスペックがそれなりに必要なので、 導入時に適したシステムなのか要検討です。
ではでは。