今回の内容
EC2はgoofysを使用してS3をマウントすることが可能。
Oracle Cloud InfrastructureのObject StorageもS3互換APIを持ち合わせているため
goofysをインストールして、マウントできるかを確かめてみた。
前提
- Computeインスタンスが作成されていること
この時に作ったインスタンスを使用 - Object StorageのBucketが作成されていること
この時に作ったBucketを使用、画面ショット等は特に無し - API実行用ユーザーが作成されていて、S3互換APIに必要なKeyが設定されていること
※今回は上記のS3互換APIに必要なKey作成についても記載する。
1. S3互換API用ユーザー作成
1-1. ユーザーの作成
Identity
> Users
と進みCreate User
を押す
[Create User画面]
NAME
に任意の名前(goofysなど)、DESCRIPTION
にも任意の値(For goofysなど)を入れてCreate
を押す
1-2. グループの設定
Identity
> Users
> 1-1で作成したユーザー名
> Groups
と進み、Add User to Group
を押す
[Add User to Group画面]
GROUPS
にAdministrators
を選択し、Add
を押す
※本来はObject Storageしか触れないPolicyが設定されたGroupを作成して設定する方が良いが今回は省略する。
1-3. Keyの作成
Identity
> Users
> 1-1で作成したユーザー名
> Customer Secret Key
と進み、Generate Secret Key
を押す
[Generate Secret Key画面]
NAME
に任意の名前(goofysなど)を入れてGenerate Secret Key
を押す
そうすると下記のSecret Keyが表示される。
※1度しか表示されないため、コピーしておくこと! ---★1
また、下記画面も今後の設定に必要なためコピーしておくこと! ---★2
※Name
が作成した内容の個所でCopyを押す。
2. goofysのインストール
作成してあるComputeのインスタンスにgoofysをインストールする。
goofysを使用可能にするには以下が必要。
- golang (実際はgoofysをbuildするために必要)
- fuse (マウントするために必要)
- git (実際はgoofysをgitからダウンロードしてくるために必要)
Computeインスタンスに必要なのは、goofysとfuseのコマンドだけなので
どこかworkサーバーでコンパイルしたものを配布した方がgolang、gitをインストールしなくて綺麗かも。。今回はそこまで考えずに実行していく。
2-1. golang、fuse、gitのインストール
### golang、fuseのインストール
[opc@hostname ~]$ sudo yum install golang fuse
~省略~
========================================================================================================================
Package Arch Version Repository Size
========================================================================================================================
Installing:
fuse x86_64 2.9.4-1.0.4.el7 ol7_latest 86 k
golang x86_64 1.9.4-1.el7 ol7_optional_latest 610 k
Installing for dependencies:
cpp x86_64 4.8.5-36.0.1.el7 ol7_latest 5.9 M
gcc x86_64 4.8.5-36.0.1.el7 ol7_latest 16 M
glibc-devel x86_64 2.17-260.0.15.el7_6.3 ol7_latest 1.1 M
glibc-headers x86_64 2.17-260.0.15.el7_6.3 ol7_latest 685 k
golang-bin x86_64 1.9.4-1.el7 ol7_optional_latest 48 M
golang-src noarch 1.9.4-1.el7 ol7_optional_latest 5.1 M
kernel-headers x86_64 3.10.0-957.5.1.el7 ol7_latest 8.0 M
libmpc x86_64 1.0.1-3.el7 ol7_latest 49 k
mpfr x86_64 3.1.1-4.el7 ol7_latest 198 k
Updating for dependencies:
glibc x86_64 2.17-260.0.15.el7_6.3 ol7_latest 3.7 M
glibc-common x86_64 2.17-260.0.15.el7_6.3 ol7_latest 12 M
Transaction Summary
========================================================================================================================
Install 2 Packages (+9 Dependent packages)
Upgrade ( 2 Dependent packages)
Total download size: 101 M
Is this ok [y/d/N]: y
~省略~
Installed:
fuse.x86_64 0:2.9.4-1.0.4.el7 golang.x86_64 0:1.9.4-1.el7
Dependency Installed:
cpp.x86_64 0:4.8.5-36.0.1.el7 gcc.x86_64 0:4.8.5-36.0.1.el7
glibc-devel.x86_64 0:2.17-260.0.15.el7_6.3 glibc-headers.x86_64 0:2.17-260.0.15.el7_6.3
golang-bin.x86_64 0:1.9.4-1.el7 golang-src.noarch 0:1.9.4-1.el7
kernel-headers.x86_64 0:3.10.0-957.5.1.el7 libmpc.x86_64 0:1.0.1-3.el7
mpfr.x86_64 0:3.1.1-4.el7
Dependency Updated:
glibc.x86_64 0:2.17-260.0.15.el7_6.3 glibc-common.x86_64 0:2.17-260.0.15.el7_6.3
Complete!
[opc@hostname ~]$
### gitのインストール
[opc@hostname ~]$ sudo yum install git
~省略~
========================================================================================================================
Package Arch Version Repository Size
========================================================================================================================
Installing:
git x86_64 1.8.3.1-20.el7 ol7_latest 4.4 M
Installing for dependencies:
perl-Error noarch 1:0.17020-2.el7 ol7_latest 31 k
perl-Git noarch 1.8.3.1-20.el7 ol7_latest 55 k
perl-TermReadKey x86_64 2.30-20.el7 ol7_latest 30 k
Transaction Summary
========================================================================================================================
Install 1 Package (+3 Dependent packages)
Total download size: 4.5 M
Installed size: 22 M
Is this ok [y/d/N]: y
~省略
Installed:
git.x86_64 0:1.8.3.1-20.el7
Dependency Installed:
perl-Error.noarch 1:0.17020-2.el7 perl-Git.noarch 0:1.8.3.1-20.el7 perl-TermReadKey.x86_64 0:2.30-20.el7
Complete!
[opc@hostname ~]$
2-2. 取得とbuild
buildする場所は特にどこでも良いので適当に実施。
### goパスの設定
[opc@hostname ~]$ mkdir ~/go
[opc@hostname ~]$ export GOPATH=~/go
### 取得とbuild
[opc@hostname ~]$ go get github.com/kahing/goofys
[opc@hostname ~]$ echo $?
0
[opc@hostname ~]$ go install github.com/kahing/goofys
[opc@hostname ~]$ echo $?
0
### buildの確認
[opc@hostname ~]$ ls -l ~/go/bin/goofys
-rwxrwxr-x. 1 opc opc 14040170 Feb 4 11:36 /home/opc/go/bin/goofys
2-3. ファイルの配置
goofysのファイルをPATHが通る所に配置する。
[opc@hostname ~]$ sudo cp /home/opc/go/bin/goofys /usr/local/bin
[opc@hostname ~]$ sudo chown root:root /usr/local/bin/goofys
[opc@hostname ~]$ sudo chmod 775 /usr/local/bin/goofys
[opc@hostname ~]$ ls -l /usr/local/bin/goofys
-rwxrwxr-x. 1 root root 14040170 Feb 4 11:40 /usr/local/bin/goofys
3. 環境設定
goofysは基本的にはawscliを使用する。しかし、今回はOracle Cloud Infrastructureを使用するため細工が必要。awscliのcredentialsファイルを手動で作成する。
また、自動起動可能にするために、/etc/fstabにも設定を追加する。
3-1. 環境変数の設定
今回必要な環境変数は以下となる。
- aws_access_key_id <=== ★2で確認した値
- aws_secret_access_key <=== ★1で確認した値
再起動時にも自動でmountさせたいために、rootのhomeディレクトリに作成する。
### credentialsファイルの作成
[opc@hostname ~]$ sudo mkdir -p /root/.aws
[opc@hostname ~]$ sudo vi /root/.aws/credentials
### 以下を追記
[default]
aws_access_key_id = XXX <=== ★2で確認した値
aws_secret_access_key = XXX <=== ★1で確認した値
### ここまで
[opc@hostname ~]$
3-2. /etc/fstabの設定
最低限必要な追加内容としては以下と考える。
[opc@hostname ~]$ sudo cp -p /etc/fstab /etc/fstab.`date "+%Y%m%d%H%M%S"`
[opc@hostname ~]$ sudo vi /etc/fstab
### 以下を追記
goofys#<bucket名> <mountディレクトリ> fuse _netdev,allow_other,--endpoint=<Object Storageのエンドポイント>,--region=<リージョン> 0 0
### ここまで
もしも、IFやり取りするために使用したい場合は--dir-mode=0755
,--file-mode=0666
を入れた方が良いかもしれない。
4. テストの実施
設定が完了したため、テストを実施してみる。
4-1. コマンドのテスト
[opc@hostname ~]$ sudo mount -a
[opc@hostname ~]$ echo $?
0
[opc@hostname ~]$ df -h
df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.2G 0 7.2G 0% /dev
tmpfs 7.3G 0 7.3G 0% /dev/shm
tmpfs 7.3G 8.6M 7.3G 1% /run
tmpfs 7.3G 0 7.3G 0% /sys/fs/cgroup
/dev/sda3 39G 5.0G 34G 13% /
/dev/sda1 200M 9.6M 191M 5% /boot/efi
tmpfs 1.5G 0 1.5G 0% /run/user/1000
<bucket名> 1.0P 0 1.0P 0% <mountディレクトリ> ←☆出来ている!
[opc@hostname ~]$ cd <mountディレクトリ>
[opc@hostname ~]$ sudo touch test.log
[opc@hostname ~]$ ls -l
-rw-r--r--. 1 root root 0 Feb 4 12:52 test.log ←☆ちゃんと出来ている!
[opc@hostname ~]$ sudo mkdir test
[opc@hostname ~]$ ls -l
drwxr-xr-x. 2 root root 4096 Feb 4 12:52 test ←☆ディレクトリも出来ている!
-rw-r--r--. 1 root root 0 Feb 4 12:52 test.log
[opc@hostname ~]$ sudo touch test/test2.log
[opc@hostname ~]$ ls -l test/test2.log
-rw-r--r--. 1 root root 0 Feb 4 12:53 test/test2.log ←☆これも出来ている!
4-2. 画面からの確認
Object Storage
> Object Storage
> 作成したBucket名
を押す
Object
の画面で
- test.log
- testディレクトリ
- test/test2.log
が作成されていることを同じく確認。
※testディレクトリに関しては作成されないと考えていた。。。
画面からtestディレクトリを削除してみると、testディレクトリは削除され、test/test2.logは残ったままとなった。
しかし、コマンドで確認してみるとディレクトリは残っている状態となった。
[opc@hostname ~]$ ls -l
drwxr-xr-x. 2 root root 4096 Feb 4 12:52 test ←☆ディレクトリは残っている!
-rw-r--r--. 1 root root 0 Feb 4 12:52 test.log
上記を考えると、goofysを使用した場合は、ディレクトリ作成とかはあまり実施しない方が良い気がする。