確認環境
- Rocky Linux release 8.5
goofysとは
goofys
はAmazon S3をファイルシステムとしてマウントするためのツール。
POSIX互換のファイルシステムとして動作し、LinuxやmacOSなどのUnix系OSで使用できる。goofys
を使ってS3のバケットをマウントすると、S3上のファイルをローカルのファイルシステムと同様に扱える。
そのため、LinuxのコマンドでS3上のファイルを直接操作できる。
必要なソフトのインストール
fuseのインストール
$ sudo yum install fuse
goofysのインストール
Releases · kahing/goofysより最新のバイナリをダウンロードする。
curl
コマンドでダウンロードする場合は以下のようにする。
$ curl -O -L https://github.com/kahing/goofys/releases/download/vバージョン/goofys
バージョンは最新のものを指定する。
実行権限をつけてパスの通った場所に置く。
$ sudo cp goofys /usr/bin/goofys
$ sudo chmod +x /usr/bin/goofys
EC2インスタンスの場合はIMDSv2を無効にする
EC2インスタンスの場合はIMDSv2をOptionalにする必要がある。
» 参考: IMDSv2必須のときはgoofysでS3をマウントできなくなる
S3のバケットにアクセスできる権限を与える
S3のバケットにアクセスできる権限を設定する。
/root/.aws/credentialsでアクセスキーとシークレットキーを設定するか、 EC2の場合はインスタンスプロファイルに適切なロールを付与する。
ポリシーの例。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:ListBucket",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::バケット名/*",
"arn:aws:s3:::バケット名"
],
}
]
}
fstabでgoofysを使ってS3のフォルダをマウントする
/usr/bin/goofys#<バケット名>:<パス> <マウント先フォルダ> fuse _netdev,allow_other,--file-mode=0666,--dir-mode=0777 0 0
適切に設定したらmount
コマンドでマウントする。
$ sudo mount -a
動作確認
マウントしたフォルダにファイルを作成する。
$ cd マウント先フォルダ
$ mkdir test
$ echo "Hello, goofys" > test/hello.txt
S3を確認するとファイルが作成されている。
上記のとおり、通常のLinuxコマンドでS3上のファイルを直接操作できる。
トラブルシューティング
マウントできない場合のログの確認
syslogに出力されているので/var/log/messages
を確認する。
NoCredentialProviders: no valid providers in chain. Deprecated.
NoCredentialProviders: no valid providers in chain. Deprecated.
というエラーが出る場合は以下を確認する。
- S3バケットへのアクセス権限(IAM Policy)は適切か
- バケット名が間違っていないか
- アクションに不足はないか
- /root/.aws/credentialsを設定している場合
- アクセスキーとシークレットキーは適切か
- EC2の場合
- インスタンスプロファイルに適切なロールを付与しているか
- IMDSv2を無効にしているか
wrong fs type, bad option, bad superblock on …
mount -a
コマンドで以下のエラーメッセージが出る場合はfuse
がインストールされていない可能性がある。
mount: /.../... : wrong fs type, bad option, bad superblock on ...., missing codepage or helper program, or other error.
yumでfuseをインストールする。
.aws/credentialsの場所
OS起動時にfstabによるマウントがうまく行かない場合、.aws/credentialsの場所が原因である可能性を調べる。
rootで実行されるため、/root/.aws/credentials
に設定する必要がある。
fstabではなくgoofysコマンドを直接実行して一時的に動作確認する
goofysコマンドを直接実行して一時的に動作確認できる。
fstabでうまく行かない場合、直接実行して動作確認すると問題の切り分けができる。
$ sudo /usr/bin/goofys <バケット名>:<パス> <マウント先フォルダ>