Help us understand the problem. What is going on with this article?

goofysの設定手順

目的

EC2インスタンスをS3にマウントするソフトウェアであるGoofyの設定手順について解説します。

前提

この手順を実施する前に以下条件が整っていることを確認します。

  • EC2: Amazon Linux 2をAMIとしたEC2インスタンスが起動していること。
  • S3: EC2にアクセスができるバケットを作成し、権限が設定してあること。
  • IAM: アクセスキー&シークレットキーなどの接続情報が払い出されていること。

設定手順(一時利用)

1. 前提ソフトウェアのインストール

前提ソフトウェアである以下パッケージ一覧についてインストールします。

  • golang
    • goofyがGO実行環境で動作するため
  • Filesystem in Userspace (FUSE) :
    • Unix系コンピュータオペレーティングシステム用のソフトウェアインタフェース。goofyはこの仕組みを利用している。
  • git
    • GitHub上のgoofyをインストールする時に必要。
sudo yum install golang fuse git -y

各前提ソフトウェアのバージョンは以下の通り。

go version
go version go1.13.4 linux/amd64
git --version
git version 2.14.5
fusermount -V
fusermount version: 2.9.4

2. GOPATHを設定する

GOPATHを設定します。GOPATHとは Go言語では、環境変数GOPATHに保存されたパス(以降、単にGOPATHと呼びます)を開発時の作業ディレクトリとして扱います

export GOPATH=${HOME}/go

3. goofysをGitHubからインストール

Github上からgoofysをインストールします。

go get github.com/kahing/goofys
go install github.com/kahing/goofys

4. goofysにマウントするディレクトリを作成

goofysにマウントするディレクトリを作成します。他ユーザーからアクセスすることを想定して、root権限でしかアクセスできない階層にはマウントすディレクトリを作成しないように注意してください。 作者の設定手順のページには記載がありませんでしたが、読み書きの権限で怒られることもあるので、chmodで適切に権限を付与します(ここはオプションなので、場合に応じて設定してください)。

mkdir /home/ec2-user/mount-goofys
chmod 777 /home/ec2-user/mount-goofys

5. awsの認証情報(aws credentials)を設定

aws credentialsを直接編集しても良いですが、aws configureコマンドを使用すれば、簡単に編集できるので、今回はこちらを利用します。AMIによっては、aws cliが入っていない場合もあるので、その場合はaws cliをインストールする必要があります。aws credentialsの詳細な設定手順は、こちらをご参照願います。
なぜ、sudo aws configureも実行する必要があるかと言うと、自動マウントの設定(fstab)を利用する際に利用するためです(fstabはroot権限でしか利用できない)。作者のページにも、To mount an S3 bucket on startup, make sure the credential is configured for rootとの記述があります。sudo aws configureを実行することで、rootユーザーのaws credentialsも設定することが可能です。

aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXX
Default region name [None]: XXXXXXXXXXXXXXXXX
Default output format [None]: XXXXXXXXXXXXXXXXX

sudo aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXX
Default region name [None]: XXXXXXXXXXXXXXXXX
Default output format [None]: XXXXXXXXXXXXXXXXX

6. マウントコマンドの実行

以下コマンドを実行して、既に作成済みのbucket(bucket-XXX )に対して、ディレクトリ(/home/ec2-user/mount-goofys)をマウントします。

$GOPATH/bin/goofys bucket-XXX /home/ec2-user/mount-goofys
```bash
df
Filesystem         1K-blocks    Used     Available Use% Mounted on
devtmpfs            16451592       0      16451592   0% /dev
tmpfs               16469640       0      16469640   0% /dev/shm
tmpfs               16469640     492      16469148   1% /run
tmpfs               16469640       0      16469640   0% /sys/fs/cgroup
/dev/xvda1           8376300 3089196       5287104  37% /
tmpfs                3293932       0       3293932   0% /run/user/1000
tmpfs                3293932       0       3293932   0% /run/user/0
bucket-XXX    1099511627776       0 1099511627776   0% /home/ec2-user/mount-goofys ←ここです。

設定手順(恒久利用)

7. fstabを編集して、再起動後もマウントされるように設定

fstabを編集することで、EC2が再起動した後も、S3にマウントするように設定します。
その前に手順6で設定したマウントをumountコマンドで解除します。

sudo umount /home/ec2-user/mount-goofys/

ここは一般的なfstabの設定と基本的には同様です。uidとgidを設定する場合は、idコマンドを利用して、それらを確認する必要があります。私の場合、該当ユーザーのuidとgidが共に1000であったため、これらの情報をfstabに設定します。

id
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal)

次に、/etc/fstabを編集します。Githubのページと上記で確認したコマンドを参考に、設定する必要があります。

sudo vim /etc/fstab 
/home/ec2-user/go/bin/goofys#bucket-XXX /home/ec2-user/mount-goofys fuse _netdev,allow_other,--dir-mode=0777,--file-mode=0777,--uid=1000,--gid=1000 0 0

mount -aすることで設定は完了です。

sudo mount -a

ここで、golangの環境変数も永続化しておきます。Githubには記載がありませんでしたけど、念のためです。

vim /home/ec2-user/.bash_profile 
export GOPATH=${HOME}/go

再起動します。

sudo reboot

ここで問題が発生します。dfコマンドでマウントしていることは確認ができたのですが、なぜか書き込みを行うことができません。。Github issueを確認すると、ftabを利用した方法だとRead-onlyとなってしまう事象が発生していることが記載してあります。どうやらレグレッションっぽいですね。

8. bash_profileで自動起動を設定

仕方なしにbash_profileに直接書き込むことで、自動起動を設定することに。これで設定完了。

vim /home/ec2-user/.bash_profile
$GOPATH/bin/goofys bucket-XXX /home/ec2-user/mount-goofys

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした