LoginSignup
3
4

More than 5 years have passed since last update.

goofysを使ってs3をNASのストレージのように使う

Posted at

やりたいこと

s3の単価がかなり安くなってきたので,ストレージとして使いたい

環境

最初はraspbian on raspberry pi3で動作させようとしていた…ものの,armアーキテクチャにgoofysを導入するのが難しくて諦めた.
普通のノートPCにdebian 9.7を入れて動かすことにする.

導入

goofys

色々と試してみたが,debianではgoofysのmakeを通せなかった.

てことで,x64のハードを用意し,goofys/README.md at master · kahing/goofysにあるように,
pre-built binariesからリンクを張られた最新版のバイナリを落としてlinuxでpathを通す.
ここでは,~/binにpathが通ってるものとする.

wget http://bit.ly/goofys-latest -O ~/bin/goofys
chmod 755 ~/bin/goofys

なお,配布されているバイナリは,arm非対応.(←ここでraspberry pi3での運用を諦めた)

aws cli

コマンド一発.
ただしpipのインストールが必須.

sudo apt install python3 python3-pip
python3 -m venv py3
. py3/bin/activate
pip install awscli

AWSの設定

S3バケットの設定

ちょっと画面のコピペがないので操作は省略.
最終的に以下の権限に落ち着いた.
置く物によるけど,アクセス元の制限はかけた方がいい気がする.私はsource ipで制限.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:HeadBucket"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:IpAddress": {
                    "aws:SourceIp": [
                        "xxx.xxx.xxx.xxx/32"
                    ]
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::your-backet-name",
                "arn:aws:s3:::your-backet-name/*"
            ],
            "Condition": {
                "ForAnyValue:IpAddress": {
                    "aws:SourceIp": [
                        "xxx.xxx.xxx.xxx/32"
                    ]
                }
            }
        }
    ]
}

IAMのアクセスキー発行

AWS → IAM → policy で対象バケットのアクセス権をつけたポリシーを作って IAM User にセット.
IAM User の Security credentials でアクセスキーとシークレットを発行.

awscliの設定

これを設定ファイルに書き込む.

aws configure

なお region は s3 でバケットを作る際に指定するはず.
もし,あなたがいくつかプロジェクトを持っていて請求の内訳を知りたい場合にリージョンを分けると分計できたりする.
いい方法とは思わんけど…

EC2 など他の AWS の機能を使ってる場合,リージョン間の転送量などに注意.
s3 は作成後にリージョンを移せない(削除して別リージョンに作り直し.名前のリースタイムがあるのですぐに作り直せない)ので,注意すること.

できた設定はこちら.

.aws/config

[default]
output = json
region = ap-northeast-1

.aws/credentials

[default]
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX

ここで,[default]のとこを変えてプロファイル名を付けられる.それを<profile_name>表記で以降を記述する.

で,動作を試してみる.

aws s3 --profile <profile_name> ls  # バケット一覧が出ればOK
aws s3 --profile <profile_name> ls s3://your-backet-name  # バケット内のファイルがあれば,ファイル一覧

バケット内のlsは,credentialの指定を間違えているとAccess Deniedが返るので,ファイルがなくても正常かどうか判定できる.

goofysの操作

実はawscliのオプションを受け付けてくれることを覚えておくと楽チン.

マウントポイントを作って,マウントしてみる.

sudo mkdir /mnt/s3
sudo chown -R $(id -un):$(id -gn) /mnt/s3
goofys -o allow_other --uid $(id -u) --gid $(id -g) --cheap your-backet-name /mnt/s3
df -h

こんな感じの出力が出ればOK.

your-backet-name 1.0P 0 1.0P 0% /mnt/s3

アンマウントしてみる.

fusermount -u /mnt/s3

sambaの設定

普通のディレクトリと思って設定すれば良いので省略.

起動時自動マウント

goofys/README.md at master · kahing/goofysのUsageにあるように,fstabで自動化できるらしい

…んだけど,私の場合は,常にs3に疎通が通ってるとは限らないので,設定はしてない.

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4