[Storage Gateway] EC2からS3バケットをNFSマウントしてみた〜2018年冬〜

2018.11.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、岩城です。
元道民なので寒さに耐性があるなどと知り合いの間では強がってはいますが、しっかりと寒いです。そして、しっかりと風邪をひきました。

さて、業務でEC2からS3バケットをNFSマウントする方法を調べる機会がありました。
実際に設定していく中で、いろいろと躓いたところがありましたので、備忘録的な意味でアウトプットします。今やEFSが主流かも知れませんが、気にせずやります!

はじめに

Storage Gatewayとは

オンプレミスのサーバなどからAWS上のクラウドストレージに接続を可能とするサービスです。
実態は、AWSにより用意された仮想アプライアンスになります。VMware ESXi HypervisorやMicrosoft Hyper-V Hypervisor向けのVMや、EC2ホスト向けのAMIが用意されています。オンプレミスからの接続に注目しがちですが、本ブログのタイトルにありますとおり、EC2からS3バケットをNFSマウントする際にも利用できます。

やってみた

以下のような構成を目指して環境を構築していきます。

マウント先となるS3バケットの作成

マウント先となるS3バケットを作成します。
バケット名は何でも良いですが、全世界で一意である必要がありますのでご注意ください。

Storage Gatewayの作成

それでは、Storage Gatewayを作成していきます。合わせて私の躓きポイントもご紹介します。
まずは、ファイルゲートを選択します。

次に、Storage Gatewayをホストするプラットフォームを選択します。今回はAmazon EC2を選択しました。 別タブでインスタンス作成画面が開きますので、EC2インスタンスを作成する要領で進めていきます。

  • 躓きポイント1
    推奨インスタンスタイプがm4.xlargeとなっていますが、私は始めに無料利用枠のt2.microを選択しました。Storage Gatewayが一向に起動しませんでしたので、推奨のインスタンスタイプを選択しましょう。

次に、ボリュームを追加します。Storage Gatewayにはキャッシュする機能があり、直近アクセスしたデータへの低レイテンシーアクセス可能とします。このキャッシュしたデータを格納する領域をルートボリューム以外に必要としますので追加します。推奨では150GBとされていますが、動作確認用なので8GBで追加します。

  • 躓きポイント2
    ルートボリューム以外にキャッシュ用ボリュームが必要です。ここで追加しなくても先に進めてしまいますが、Storage Gatewayを実行できなくなります。後で追加することもできますが、手間なので忘れずに追加するようにしましょう。

次にセキュリティグループを設定します。Storage Gatewayを利用するにあたり、2つの通信を許可する必要があります。1つ目は、アクティベーション用のポートです。2つ目は、NFS用のポートです。

  • 躓きポイント3
    私はNFS用のポートを許可するのを忘れ、後述のマウントコマンドの応答が返ってきませんでした。気をつけましょう。

EC2インスタンスの作成が終わりましたら、Storage Gateway作成画面のタブに戻ります。起動したEC2インスタンスのパブリックIPを入力します。

次に、タイムゾーンとStorage Gatewayの名前を入力します。名前は何でも良いです。

ローカルディスクの準備に少し時間が掛かりますので待ちます。無事割り当てられたことを確認して保存して実行します。(2018/11/23追記)

次に、ファイル共有を作成します。

事前に作成していたS3バケット名を入力します。オブジェクトへのアクセスはNFSを選択します。

これにて、Storage Gateway側の設定が完了しました。

マウント元となるEC2インスタンスの作成

マウント元となるEC2インスタンスを作成します。動作確認用のため、最小構成で構いません。今回、OSはAmazon Linux2、インスタンスタイプはt2.microで作成します。起動しましたらログインし、マウントポイントとなるディレクトリを作成しておきます。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         476M     0  476M    0% /dev
tmpfs            493M     0  493M    0% /dev/shm
tmpfs            493M  440K  493M    1% /run
tmpfs            493M     0  493M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  1.2G  6.9G   15% /
tmpfs             99M     0   99M    0% /run/user/0
tmpfs             99M     0   99M    0% /run/user/1000
$ sudo mkdir storage
$ ls -lrt
合計 0
drwxr-xr-x 2 root root 6 11月 22 02:30 storage

EC2からS3バケットをNFSマウント

お待たせしました。いよいよマウントです。マウントコマンドはコンソール上に表示されています。親切ですね。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         476M     0  476M    0% /dev
tmpfs            493M     0  493M    0% /dev/shm
tmpfs            493M  440K  493M    1% /run
tmpfs            493M     0  493M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  1.2G  6.9G   15% /
tmpfs             99M     0   99M    0% /run/user/0
tmpfs             99M     0   99M    0% /run/user/1000
$ sudo mount -t nfs -o nolock,hard xxx.xxx.xxx.xxx:/filegateway-20181121 /storage
$ df -h
ファイルシス                        サイズ  使用  残り 使用% マウント位置
devtmpfs                              476M     0  476M    0% /dev
tmpfs                                 493M     0  493M    0% /dev/shm
tmpfs                                 493M  444K  493M    1% /run
tmpfs                                 493M     0  493M    0% /sys/fs/cgroup
/dev/xvda1                            8.0G  1.2G  6.9G   15% /
tmpfs                                  99M     0   99M    0% /run/user/0
tmpfs                                  99M     0   99M    0% /run/user/1000
172.31.41.141:/filegateway-20181121   8.0E     0  8.0E    0% /storage

マウントできました! 

動作確認

マウントしたボリュームにファイルを配置し、S3で確認してみます。

$ cd /storage/
$ touch test

確認できました!!

おわりに

結構躓きました。。。
これからも学んだことはガシガシアウトプットしていきます!
このブログが、誰かの役に立てれば幸いです。

リファレンス

AWS Storage Gateway
EC2からNFS経由でS3オブジェクトを保管できるようになりました![Storage Gateway]