Edited at

EC2インスタンスにS3をマウントする

More than 1 year has passed since last update.

機械学習に使うデータをS3にまとめて保存しておき、インスタンスのストレージを使わない様にしたかったので、S3をマウントして使う事にしました。

安定性を考えてs3fsを使っていますが、goofysの方が早いらしいです。


条件


  • Ubuntu 16.04

  • s3fs-fuseを利用(goofysは安定性が微妙らしいため)

  • IAM Role を利用(Key情報をEC2インスタンス内に保持する必要がないため)
    ※Roleを使用すればEC2 インスタンス起動時に IAM Role 選択するのみ


手順

1.S3 Bucket の準備

2.IAMロールの準備

3.s3fs-fuse のインストールと設定

4.マウントの自動化

※ 1と2はAWSコンソール画面での操作

※ 3と4はインスタンスにSSH接続してから操作


1.S3 bucketの準備


  • バケット名:s3-bucket1-gpu

  • リージョン:米国東部(バージニア北部)※マウントしたいEC2と同じリージョンにすること

※ひとまず上記以外の設定はデフォルトにしておく


2. IAMロールの準備

① 信頼関係

・ロールを利用するサービス:EC2

・ユースケースの選択:EC2

② アクセス制限

・ポリシー名:AmazonS3FullAccessを選択

③確認

・ロール名:access-s3-role

・ロールの説明:access to S3 FullAccess

そして作成したロールをインスタンスに割り当てる

IAMロール1.png

S3をマウントしたいインスタンスが選択されていることを確認して作成したIAMロール「access-s3-role」を選択して適用する

IAMロール2.png


3.s3fs-fuse のインストール

まずgitなど必要なものをインストールする

$ sudo apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config

そしてs3fsをgitからインストールする

$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git

もろもろの設定(これでs3fsが /usr/local/bin 下におかれる)

$ cd s3fs-fuse

$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

マウントポイントの作成

※root権限のディレクトリとして作成されるがマウント時にownerを設定するのでOK

$ sudo mkdir /mnt/s3

マウント時のownerのuid, gidを確認する

$ id ubuntu

uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),110(lxd)

マウントする

$ sudo s3fs s3-bucket1-gpu /mnt/s3 -o rw,allow_other,uid=1000,gid=1000,default_acl=public-read,iam_role=access-s3-role

# allow_other: root 以外(マウントしたユーザー以外)も利用可能とする

これでS3のbucketをインスタンスにマウントできた。しかし再起動するとマウントは解除されてしまうので、再起動しても自動マウントされるように設定しておく。


4.マウントの自動化

インスタンスを再起動しても自動でマウントされるように設定を行う。

/etc/rc.local にマウントコマンドを書き込んでおけば起動時に自動で実行してくれる。

$ sudo vi /etc/rc.local

以下の内容をrc.localに追記する

# s3fs mount

# umount /mnt/s3
s3fs s3-bucket1-gpu /mnt/s3 -o rw,allow_other,uid=1000,gid=1000,default_acl=public-read,iam_role=access-s3-role

これでインスタンスを再起動しても自動でマウントされる。