Amazon EC2にS3を簡単にマウントする方法

クラウド上の仮想マシンを扱っていると、ディスクの容量を気にしたくないことから、クラウドストレージを利用したいことがあります。最近ですと、Amazon EC2にAmazon S3をマウントして利用したりするでしょう。いろいろな方法がありますが、私が最も簡単だと思う方法を紹介したいと思います。

手順

  1. S3のバケットを作成
  2. IAMを作成
  3. EC2より仮想インスタンスの立ち上げ
  4. goofysのインストール
  5. S3のマウント
  6. テストファイルの書き込み

1. S3のバケットを作成

仮想インスタンスにマウントするためのS3バケットを作成します。ここでは「gb-system」バケットを用意しました。特別な設定は必要なくデフォルトで作成して問題ありません。

2. IAMを作成

EC2の仮想インスタンスよりS3にアクセスするための権限を用意します。AWS CLIを利用する方法もありますが、特別細かな設定が不要であれば、IAMを利用し直接権限を与えるほうが簡単です。 AWSのコンソールから「IAM」サービスより「ロール」をクリックします。そして「ロールの作成」ボタンをクリックします。 「EC2」を選択し、次のステップへ進みます。 「ポリシーのフィルタ」に「S3」と入力し「AmazonS3FullAccess」を探しチェックを入れます。そして次のステップへ進んで下さい。 ここではロールの名前を「EC2_to_S3」としました。

3. EC2より仮想インスタンスの立ち上げ

EC2より仮想インスタンスを立ち上げます。今回はAmazon Linux2を利用します。立ち上げる際の注意点は、Step2において「IAMロールの設定」を行うことです。2.で作成したIAMを設定して下さい。それ以外に特別な設定はありません。 念のため、立ち上げ直後はOSをupdateしておきましょう。
$ sudo yum -y update

4. goofysのインストール

S3をマウントする方法はいくつかありますが、転送速度の観点から個人的にはgoofysがオススメです。このgoofysはGO言語により実装されているため、GO言語のインストールも必要です。またFUSE (Filesystem in Userspace) を利用して仮想ファイルシステムを構築します。
$ sudo yum -y install golang fuse git
次にGOPATHを設定してgoofysをインストールします。
$ export GOPATH=$HOME/go
$ go get github.com/kahing/goofys
$ go install github.com/kahing/goofys
go getに数分掛かりますので、反応がなくても慌てないでください。

5. S3の自動マウント

goofysがインストールできたら、コマンドだけでS3をマウントすることができます。しかし、OS再起動の際は再マウントが必要になるので、最初から再マウントできるように設定しましょう。自動マウント設定の際、ユーザのuid, gidが必要になるので予め確認しておきます。
$ id
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal)
今回の場合、uid=1000, gid=1000と表示されています。 またマウントするためのディレクトリも作成しましょう。
$ sudo mkdir /mnt/S3
$ sudo chown ec2-user:ec2-user /mnt/S3
では自動マウントのため「/etc/fstab」を編集しましょう。
$ sudo vi /etc/fstab
この末尾に次のように入力して保存して下さい。 (goofys#の後ろは「S3バケット名」です。また –uid, –gidは idコマンドで調べた値に置き換えてください。)
/home/ec2-user/go/bin/goofys#gb-system /mnt/S3 fuse _netdev,allow_other,--file-mode=0666,--uid=1000,--gid=1000 0 0
これで設定は完了です。OSを再起動してみましょう。
$ sudo reboot
起動したらマウントできているか確認します。
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        475M     0  475M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  400K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.9G  6.2G  24% /
gb-system       1.0P     0  1.0P   0% /mnt/S3
tmpfs            99M     0   99M   0% /run/user/1000
確かにマウントされていますね。容量は1PB (ペタバイト)と記されています。

6. テストファイルの書き込み

ではファイルを書き込んでみましょう。
$ echo 'Hello S3' > /mnt/S3/test.txt
S3よりファイルを確認します。 確かにS3にファイルが書き込まれました。ダウンロードしてファイルの内容を確認すると、「Hello S3」と記されています。自動マウント設定済みですので、予期しない再起動があった場合でも問題ありません。

まとめ

goofysを利用すると、EC2で用意した仮想インスタンスに簡単にS3をマウントすることができました。これで無制限にファイルを保存することができます。例えばサーバのログはどんどん溜まっていくので、S3に出力されるようにしておくと容量の心配がいらないですね。使いみちはいろいろと考えられるのでぜひ活用してみて下さい。
» エンジニア登録はこちら