タイトルの通りで、mstdn.maud.io のメディアファイルを今度は Wasabi (+ Cloudflare) へ移行したので、その記録です。
あれ、去年オブジェクトストレージ事業者引っ越したばかりですよね?
はい(メディアをAmazon S3に移行しました | 茜の鯖缶日誌)。
Amazon S3 + CloudFront 構成はほぼ無敵と言った感じで、丸一年(S3+Cloudflareの期間含めると1年半)続けて使用感において不満はありませんでした。使用においては。
何がよくなかった?
問題は(やっぱり)金銭的コストで、とりあえず1年やってみたんですが CloudFront は高い…。あんまり連合してない個人サーバならまだ勧められるレベルで済むかもですが、弊サーバの場合は外向きの配信量が月に 1TB 以上あるのでメディアだけで毎月 $110-150 の請求が来ていました。連合リレーに参加するのをやめてこれなので、参加していた場合のコストは考えたくもないですね…
CloudFront の代わりに別のサーバーを用意して Nginx や Varnish でキャッシュするとか、そこに Cloudflare 挟むとかも一瞬考えましたが、個人的には S3 のオリジンアクセスを絶対に無くしたかったのでオブジェクトを公開可能に落とすのが許容できませんでした。こんなことで神経質になるくらいなら転送料であんまり心配しなくていい他の事業者に乗り換えるほうが金銭的にも精神的にも楽になれるのでは、という感じで今回に至ります。
もはや毎年恒例、再検討
Backblaze B2
- 保存 $0.005/GB, 転送料 $0.01/GB
- S3互換API を提供するようになった
- B2 <-> Cloudflare 間では 転送料課金無し
- 独自ドメイン非サポートらしい
- 採用事例が少なすぎて情報に乏しい
- なくはない: MastodonでBackblaze B2を使う
- ところでどこにあるの?
Wasabi
ap-northeast-*
は $6.99/TB (ほかは $5.99/TB), 転送料なし- 法人オンリーだった東京リージョンが個人も WebARENA から申し込めるようになったり
- 良くも悪くも、為替による請求額の変動がない
- SLAやサポートなし
- 年明けてからいつの間にか本家サイトからも東京リージョン触れるようになり
- 東京に APAC オフィスが生えたり
- 東京に続き、大阪リージョン (
ap-northeast-2
) が 開設された - USしか使えなかった頃からちょこちょこ採用例はある
- 国内リージョンでの話はあんまり聞かないしTwitterでも見ない…
- 実はテスト環境
staging.mstdn.maud.io
が使ってる - テスト環境で大きな問題は起きてなかったので採用
選外
GCP, Azure
いや使ったところで誤差でしょ
その他安いやつ
- DigitalOcean Spaces
- もうシンガポールはこりごりだよ~
- Linode
- お前も 最寄りシンガポール なのか
- Vultr
- まだ New Jersey しかない…
- Scaleway
- Paris, Amsterdam, Warsaw
- 全部遠い
そんな感じで Wasabi にしました。
メディアの転送
バケット名を使用するドメインに揃えておくと CNAME 向けるだけで済んでお得。ドメインは前回と同じで、 s3-mstdn.maud.io
です。 前回はご迷惑おかけしました…
容量削減
まず tootctl media remove-orphans
でどこからも参照されずゴミになっているメディアを消して回ります。
$ tootctl media remove-orphans |
… なんで 23.1 GB も減るんですか。
あとはいつも通り tootctl media remove
を活用して転送前に可能な限り減らしておきます。
$ tootctl media remove |
そうはならんやろ(なっとるやろがい)。
preview_cards
も tootctl から削除できますが、今回も転送しないため触らないでおきます。削除もめちゃ時間かかるので(二回目)。
いざ転送
前回や前々回同様に対話型セットアップが便利な rclone を使います。これも使い方は前々回くらいを見てください。
rclone setup
では番号をぽちぽち選ぶだけで Wasabi の東京リージョンを設定でき、あの長ったらしいエンドポイントを入力する手間が 省けます 。 数ヶ月前にPR投げといて正解でしたね!
今回も Filter rule をめちゃくちゃ雑に書いて使用しました。
前回から変わった点として、リモートサーバーからのキャッシュ分は cache/media_attachments/
みたいに分かれるようになったのでフィルターもぐちゃぐちゃになってきます。
転送しないやつ
index.html
とerror.html
- 書き直したので
- キャッシュした添付メディア
- リンクのプレビューカード用画像
転送するやつ
- ローカルのアカウント画像
- アイコンとバナー
- リモートのアカウント画像のキャッシュ
- アイコンとバナー
- ローカルのカスタム絵文字
- リモートのカスタム絵文字のキャッシュ
- ローカルの添付メディア
- サイト用画像
結果
- *.html |
そんで --filter-from <filter-file>
でこう。
$ rclone copy s3:s3-mstdn.maud.io wasabi:s3-mstdn.maud.io -P --filter-from s3filter.txt --s3-no-head |
12時間半で212GiBくらいを転送しました。速いですね。
切り替え
今回はドメインが同じなのもあって、差分が増えないうちに見える方から切り替えてしまいます。適当な告知をして、もう使わないDNSレコードを削除し、 CNAME を新しいエンドポイントに向けたらいつものオレンジの雲を有効にしておわり。SSL/TLS encryption modeは Full
で動きましたね。
index.html
にサービス名を入れているので、浸透の確認に使えました。
アップロードする側はいつも通りで、 .env.production
の項目を書き直してサービス再起動で反映。おわり。今回はついでに Mastodon のアップデートも行いました。
その後
使用感
- 東京にあるおかげか、極端にメディアのアップロードが遅いということは無いと思います
- 気持ち遅くなったかもしれないというか、なってても文句言えない
- ダウンロードは(今のところ)遜色ないように見えます
後は、かつての Spaces や Wasabi の USリージョンみたいに障害が頻発しなければよいですね…
コスト
- AWS から出ていくときにかかった費用は
後で決まったら書きます60ドルちょいでした。
service | data | price |
---|---|---|
Wasabi (Tokyo) | ~1TB | 6.99 USD |
Cloudflare Pro | - | 20.00 USD |
せーの、 予測可能なコスト、最高~~~!