やりたいこと
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に疎通が通ってるとは限らないので,設定はしてない.