はじめに
Amazon Linux 2023 の EC2 インスタンスに S3 のバケットをマウントしたい。
選択肢としては goofys や s3fs 、最近出てきたAWS謹製の Mountpoint for Amazon S3 の3つが思い浮かぶ。
Mountpoint for Amazon S3 はまだ read only な使い方しかできないみたいなので、今回は更新が活発な s3fs の方を使ってみたいと考えた。
リポジトリどこ?
s3fs 関連の記事を探していると Amazon Linux 2 向けの記事が多く見受けられる。
参考にしたいところだけど、Amazon Linux 2 は RHEL/CentOSベースだったので EPEL リポジトリが使用できたが、Amazon Linux 2023 は Fedora 34〜36 がベースなので使えない...
そこで別ルートを探すと、Fedoraのリポジトリが使えるような記事を見つけた。
インストール
記事通り、リポジトリの登録をしてみる。
# vi /etc/yum.repos.d/fedora.repo
[fedora]
name=Fedora 36 - $basearch
#baseurl=http://download.example/pub/fedora/linux/releases/36/Everything/$basearch/os/
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-36&arch=$basearch
enabled=0
countme=1
metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=https://getfedora.org/static/fedora.gpg
skip_if_unavailable=False
そしてリポジトリを指定してインストールを実行したら、無事に成功した。
# dnf --enablerepo=fedora install s3fs-fuse
マウントしてみる
S3のバケットを作成し、EC2のインスタンスを立てて、以下のポリシーを持つIAMロールをアタッチする。(権限はもう少し絞りたいけど、必要なものが分かったら随時変更したい)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<<YOUR_BUCKET_NAME>>",
"arn:aws:s3:::<<YOUR_BUCKET_NAME>>/*"
]
}
]
}
EC2のインスタンス内にSSH接続し、マウント設定をする。
# mkdir /mnt/s3bucket
# echo "<<YOUR_BUCKET_NAME>> /mnt/s3bucket fuse.s3fs _netdev,uid=1000,gid=1000,nonempty,allow_other,endpoint=ap-northeast-1,iam_role=auto 0 0" | tee -a /etc/fstab
# mount -a
無事マウント完了
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 951M 0 951M 0% /dev/shm
tmpfs 381M 5.2M 376M 2% /run
/dev/nvme0n1p1 8.0G 5.9G 2.2G 74% /
tmpfs 951M 0 951M 0% /tmp
s3fs 16E 0 16E 0% /mnt/s3bucket
tmpfs 191M 0 191M 0% /run/user/1000
( ゚ω゚ )o0O(サイズの単位に「E」って出てるけど、エクサ(10の18乗)のこと???)
マネコンからファイルをアップロードしてインスタンス内から参照したり、インスタンス内からファイルを保存してS3に反映されることを確認できた。