こんにちは、自宅の新調したモニタでコードを書くと解像度が高くて、表示される情報量が多く助かっている山田です。
普段インフラばかり触っているので、Dockerによる開発環境を作ったことはなかったのですが、実際に環境を作って みると思いのほか環境用意に時間かかりました。
(Dockerは聞いたことあったのですが、本格的に使ったことがなくDockerfile、Docker Compose何それ状態でした)
さて、EBSの容量を縮小してみたという記事を先日アップしたのですが、やはり個人的に利用する上では、EBSの料金高いです。
そこで、ほぼアーカイブに近いようなログファイル等はS3に移動して費用を抑えたいなと考えました。
AWS CLIを使ってS3にファイル移動することも、可能ですがファイル操作レベルでS3に展開したいので、 S3をファイルシステムとしてマウントする方法を紹介します。
目次
使用した環境
- EC2
- S3
- OS: CentOS7
- goofys
実際の作業内容
- 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で変更を加えようと思っても変更されないので、注意が必要
プロフィール
テクニカルサポートは卒業して、フロントサイドでお客様環境の構築をさせていただいております。
たまに、テクニカルサポートでご対応させていただくことがあるかもしれませんが、その際はよろしくお願いいたします。
インフラ系のエンジニアですが、時々休日プログラマー(Python、PHP)をやっております。
LINK
クラウドベリージャム:プロフィールページ