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が出ていました。)

aws-sg1

ちなみにGatewayインスタンスへのssh接続ユーザのデフォルトは「sguser」です。

aws-sg2

S3

マウントするバケットを事前に作成しておきます。

FileGateway設定

まずはStorage GatewayのメニューからFile Gatewayを作成します。

aws-sg3

GatewayのタイプはEC2を選択します。 赤枠で囲ったボタンをクリックするとEC2起動画面が開きます。

aws-sg4

どうやらGateway用のAMIが用意されているようです。 前述の注意点を気にしながらインスタンスを作成します。

aws-sg5

インスタンスを作成したらFile Gatewayの画面に戻ります。 Gateway IPアドレスを求められるので先ほど作成したインスタンスのIPを指定します。 続いてアクティベートも実行されます。

aws-sg6

次にファイル共有の設定を実施します。 作成したGatewayを選択して「ファイル共有の作成」をクリック。

aws-sg7

マウントするS3バケット名を入れます。 また、S3へ接続できるIAMロールも設定しておきます。

aws-sg8

完了するとmountコマンドまで表示してくれます。 親切ですね〜。

aws-sg9

クライアントからGatewayインスタンスには接続できるようにSecurity Groupを適宜設定します。 後はクライアントインスタンスを準備し、httpインストールとDocumentRootをマウント先パスに変更しておきます。


abベンチを実行

マウント先にテストドキュメントを適宜配備し、httpdを起動しておきます。 s3fsやローカルディスクを利用したインスタンスも起動して各自ベンチを取ります。

Gateway経由でS3マウントしたインスタンスの結果

fgw-ab

s3fsでS3マウントしたインスタンスの結果

s3fs-ab

ローカルディスク利用インスタンスの結果

local-ab

数回ベンチしてみましたが、ローカルディスク利用時と遜色のない結果となりました。素晴らしい。

ただ、GatewayインスタンスがSPOFになることと、Gatewayインスタンスのスペックがそれなりに必要なので、 導入時に適したシステムなのか要検討です。

ではでは。