確認環境

  • 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をマウントできなくなる

IMDSv2 optional

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を確認するとファイルが作成されている。

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 <バケット名>:<パス> <マウント先フォルダ>