Amazon Simple Storage Service

goofysを使ってS3バケットをマウントしてみた

こんにちは、自宅の新調したモニタでコードを書くと解像度が高くて、表示される情報量が多く助かっている山田です。

普段インフラばかり触っているので、Dockerによる開発環境を作ったことはなかったのですが、実際に環境を作って みると思いのほか環境用意に時間かかりました。

(Dockerは聞いたことあったのですが、本格的に使ったことがなくDockerfile、Docker Compose何それ状態でした)

さて、EBSの容量を縮小してみたという記事を先日アップしたのですが、やはり個人的に利用する上では、EBSの料金高いです。

そこで、ほぼアーカイブに近いようなログファイル等はS3に移動して費用を抑えたいなと考えました。

AWS CLIを使ってS3にファイル移動することも、可能ですがファイル操作レベルでS3に展開したいので、 S3をファイルシステムとしてマウントする方法を紹介します。

使用した環境

実際の作業内容

  • EC2は既に構築済みであると仮定します。

保存先となるS3バケットを作成

データの保存先となるS3バケット(yamada.techblog.test)を作成します

IAMポリシーを作成

IAMポリシーで、"yamada.techblog.test"を操作可能なポリシーを作成します

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::yamada.techblog.test"
            ]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": [
                "arn:aws:s3:::yamada.techblog.test/*"
            ]
        }
    ]
}

IAMロールを作成

先ほど作成したIAMポリシーをIAMロールに割り当てて作成する

EC2にIAMロールを割り当てる

先ほど作成したIAMロールをEC2に割り当てる

Go関連のミドルウェアをインストール

Go言語を利用するにあたって必要なミドルウェアをインストールする

# yum install epel-release
# yum install --enablerepo=epel golang fuse git

Gitからソースをダウンロード

Gitからgoofysのソースコードをダウンロードする

# export GOPATH=${HOME}/go
# cd /usr/local/src/
# go get github.com/kahing/goofys

goofysをインストール

goofysをインストールする

# go install github.com/kahing/goofys

S3をテスト的にマウント

S3がマウント可能か検証する

# cd /root/go/bin/
# mkdir /mnt/s3_bucket
# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        210M     0  210M   0% /dev
tmpfs           233M     0  233M   0% /dev/shm
tmpfs           233M  8.4M  225M   4% /run
tmpfs           233M     0  233M   0% /sys/fs/cgroup
/dev/nvme0n1p1  8.0G  3.5G  4.6G  44% /
tmpfs            47M     0   47M   0% /run/user/1000

# ./goofys yamada.techblog.test /mnt/s3_bucket/

# df -h
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              210M     0  210M   0% /dev
tmpfs                 233M     0  233M   0% /dev/shm
tmpfs                 233M  8.4M  225M   4% /run
tmpfs                 233M     0  233M   0% /sys/fs/cgroup
/dev/nvme0n1p1        8.0G  3.5G  4.6G  44% /
tmpfs                  47M     0   47M   0% /run/user/1000
yamada.techblog.test  1.0P     0  1.0P   0% /mnt/s3_bucket

# umount /mnt/s3_bucket/

# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        210M     0  210M   0% /dev
tmpfs           233M     0  233M   0% /dev/shm
tmpfs           233M  8.4M  225M   4% /run
tmpfs           233M     0  233M   0% /sys/fs/cgroup
/dev/nvme0n1p1  8.0G  3.5G  4.6G  44% /
tmpfs            47M     0   47M   0% /run/user/1000

インストールしたgoofysをコピー

/usr/local/src/配下から、/usr/local/bin/配下にコピーする

# cp -a goofys /usr/local/bin/

fstabにも記述して自動マウントを試す

fstabを利用して自動的にマウントされるように設定する

# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        210M     0  210M   0% /dev
tmpfs           233M     0  233M   0% /dev/shm
tmpfs           233M  8.4M  225M   4% /run
tmpfs           233M     0  233M   0% /sys/fs/cgroup
/dev/nvme0n1p1  8.0G  3.5G  4.6G  44% /
tmpfs            47M     0   47M   0% /run/user/1000

# cp -p /etc/fstab{,_date +'%Y%m%d'}

# vi /etc/fstab
/usr/local/bin/goofys#yamada.techblog.test /mnt/s3_bucket/ fuse _netdev,allow_other,--file-mode=0644,--uid=0,--gid=0 0 0

# mount -a
# df -h
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              210M     0  210M   0% /dev
tmpfs                 233M     0  233M   0% /dev/shm
tmpfs                 233M  8.4M  225M   4% /run
tmpfs                 233M     0  233M   0% /sys/fs/cgroup
/dev/nvme0n1p1        8.0G  3.5G  4.6G  44% /
tmpfs                  47M     0   47M   0% /run/user/1000
yamada.techblog.test  1.0P     0  1.0P   0% /mnt/s3_bucket

オプションの説明

  • _netdev : ネットワークアクセスが必要なデバイスであることを明示
  • allow_other : 他のユーザでも利用可能
  • file-mode : ファイルのパーミッション
  • uid : 設置されるファイルの所有者
  • gid : 設置されるファイルのグループ

実際にデータが保存して、保存されたことを確認

# echo -e "TestData\ndate\nTestData" > /mnt/s3_bucket/hogehoge.txt
# ls -la /mnt/s3_bucket/hogehoge.txt
-rw-r--r-- 1 root root 47 Jul  1 16:05 /mnt/s3_bucket/hogehoge.txt

# cat /mnt/s3_bucket/hogehoge.txt
TestData
Wed Jul  1 16:05:22 JST 2020
TestData

AWSマネジメントコンソール上からもファイルが一覧できることを確認

S3上にファイルが存在することを確認する

AWSマネジメントコンソール上から削除するとマウント領域上からも消えることを確認

# ls -la /mnt/s3_bucket/hogehoge.txt
ls: cannot access /mnt/s3_bucket/hogehoge.txt: No such file or directory

まとめ

  • S3を疑似的にファイルシステムとしてマウントしたことで、OSレベルでのファイル操作でファイルをS3上に展開可能
  • IAMロールを割り当てるだけで利用可能
  • chownやchmodで変更を加えようと思っても変更されないので、注意が必要

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA