オブジェクトストレージwasabiがアツい! aws cliからwasabiを使ってみよう!


■ Wasabi側の準備

こちらを参考に、以下の順序で作業しました。バケット名、ユーザー名ともに example.blogcube.info で作成します。

  1. wasabiのコンソールに Root ユーザでログイン
  2. バケット名を example.blogcube.info として作成する
    • バケットのバージョニングはしない
    • バケットのロギングはしない
  3. ポリシー名をバケット名と同じにして作成する
    • ポリシーの中身は以下の通り
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::example.blogcube.info"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::example.blogcube.info/*"
    }
  ]
}
  1. Users / example.blogcube.info の「User Details」でPathを「/example.blogcube.info/」に変更する。

あとはアクセスキーとシークレットキーを控えておきましょう。

■ Ubuntu側の準備

aws-cliはaptからもインストールできますが、awscli-plugin-endpointを使いたいので、pipからインストールすることにします。すでにaptでaws-cliをインストールしている場合は、aptコマンドでremoveし、${HOME}/.aws ディレクトリを削除します。なお、この場合、awsコマンドのPATHが通ってしまっているので、一旦シェルから抜けましょう。

pipのインストール

最初にpipをインストールするのですが、pip3だけではうまくaws-cliをインストールできなかったのと、自分だけで利用する(他のユーザーを作成してもawsコマンドを個別に使わせたい)ので、最初にpython-pip と python3-pip の両方をインストールします。※ python-pip は不要でした。。。というかインストールできません。

sudo apt install python3-pip

ここまでがroot作業で、以降はsudoをつけずに自ユーザーで作業します。

awscliのインストール

pip3 install awscli
pip3 install awscli-plugin-endpoint

awscli-plugin-endpoint をインストールすることで、aws以外のオブジェクトストレージも触ることができるようになります。

■ エンドポイントの設定

プロファイル名を任意に決めてプロファイルを設定します。

aws configure --profile example.blogcube.info

ここでアクセスキーとシークレットアクセスキーを入力、リージョンは us-west-1 にしてoutput formatは空エンターします。次に ${HOME}/.aws/config の先頭に以下を追記します。

[plugins]
endpoint = awscli_plugin_endpoint

次に、endpoint_urlを設定します。

aws configure --profile example.blogcube.info set s3.endpoint_url https://s3.us-west-1.wasabisys.com

こうして出来上がった ${HOME}/.aws/config は以下になります。

[plugins]
endpoint = awscli_plugin_endpoint
[profile example.blogcube.info]
region = us-west-1
s3 =
    endpoint_url = https://s3.us-west-1.wasabisys.com

次の export AWS_DEFAULT_PROFILE はシェルへログインのたびに行います。私は面倒なので、 ${HOME}/.bashrc の最下部に追記して、ログインのたびに環境変数設定をしないで済むようにしました。

export AWS_DEFAULT_PROFILE=example.blogcube.info

それでは手元のディレクトリを同期してみましょう。

aws s3 sync WORKDIR s3://example.blogcube.info/WORKDIR/
aws s3 ls s3://example.blogcube.info/
                           PRE WORKDIR/
aws s3 ls s3://example.blogcube.info/WORKDIR/
2020-04-30 13:30:25      37812 WorkLog_20191225.txt
2020-04-30 13:30:25       4219 WorkLog_20191225.zip
2020-04-30 13:30:41   15889170 WorkLog_20200121.txt
2020-04-30 13:30:44   21181617 WorkLog_20200221.txt
2020-04-30 13:30:25      28569 WorkLog_20200309.zip
2020-04-30 13:30:25      50340 WorkLog_20200325.zip
2020-04-30 13:31:54   16285647 WorkLog_20200326.txt
2020-04-30 13:30:42   13526552 WorkLog_20200330.txt
2020-04-30 13:30:27    1149931 WorkLog_20200330.zip

アップロードされましたね。

■ wasabiを使ってみた感想とハマりどころ

1ヶ月近くwasabiを使ってみて思ったのが

  • 安いねえ
  • us-west、案外遅くないねえ
  • aws cliから使うのが一番ラクちんですねえ
  • エクスプローラーっぽくGUIから使いたいならFileZilla Proが捗るよ
    • 他のGUIツールからはうまくAPI叩けなかった
    • FileZilla Pro、OneDriveも対応してるから買っておいて損しない

でした。あと、ハマりどころとしては

  • 長いファイル名 ディレクトリ名が苦手
    • cliからコマンド叩いたときに出るエラーはたいてい長い名前
  • オブジェクト数が増えたらページサイズ調整したほうがいい
    • サブディレクトリまでrecursiveにlsするときとか

こんな感じで --page-size オプションつけてあげるとよいです。数字はエラーがでなくなるまで適宜調整します。

aws s3 ls s3://example.blogcube.info/ --recursive --human --sum  --page-size 1000000

オブジェクト数と容量だけ見たいときはこうします。

time aws s3 ls s3://example.blogcube.info/ --recursive --human --sum  --page-size 1000000 | egrep -v ^[0-9]

Total Objects: 37295
   Total Size: 979.5 GiB

real    1m52.159s
user    0m7.375s
sys     0m1.109s

だいたい37000オブジェクト数、980GBくらいの容量であることが2分ほどかけてわかりました。軽率にバシバシとAPI呼べるあたりが精神衛生上よきですね。