おひとりさまmastodonサーバのメディアをCloudFront経由に変更
Overview
メディアをオブジェクトストレージに移行しました | 茜の鯖缶日誌
を読んで思いついたため。
元々
元々はS3へ直接アクセスしており、ちゃんとログ見たわけではありませんが大体月に$5ほどmastodonのメディア用bucketだけで使っていたようです。
CostExplorerの使い方がわからずbucketごとの料金の見方がわからない…。
目的
以前から画像の表示遅いなーと感じることがちょいちょいあったため。
カスオメスクショとか見る時は結構変わったと実感しています。
下の計測結果では60ミリ秒の差がありますね。
やり方
CloudFrontでS3をキャッシュする設定にはいくつか種類があるようで、
- このブログのようにS3バケット側で静的サイトホスティングの設定を入れてCloudFrontのOriginに設定。独自ドメインにしたければRoute53でaliasレコードを書く
- CloudFrontからバケットを直接指定して、もしやりたければDNSはCNAMEで対応
- and more?(多分色々あるんでしょうが知らんわからん)
今回はindex.htmlなんかへの転送機能も必要ありませんので、2つ目の方法を取っています。
ちなみに作業中これだとaliasレコードが使えないということを知らず困惑しておりました。
また元々はS3バケットへのaliasも使っていなかったのですが、せっかくならサイト内で統一しようと思いCloudFrontへは独自ドメインへアクセスするようにしています。
実作業
- 既にmastodonのメディアを保存しているS3バケットをOriginとしたCloudFrontディストリビューションを作成
- その他設定はデフォ(一応ロギングだけはしてます)
- asterism.xyzのドメインはRoute53で管理しているので、Route53でCNAMEレコードを作成
- mastodonの.env.production内にS3_ALIAS_HOSTの設定を記述
証明書はACMで作成した「*.asterism.xyz」のものを利用しています。(このブログと同じものですね)
始めはCloudFrontへは「media.mstdn.asterism.xyz」などとするつもりでしたが、上記の証明書だと「*.*.asterism.xyz」では無いためCloudFrontに使わせることができません。
ACMから作ればよかったのですが、それもちょっと面倒だなーというのと末代でも似たような事情から「media-mstdn.maud.io」として動いているようですのできっと大丈夫でしょう。
ダメなら作り直せばいいだけです。
ディストリビューションのデプロイとCNAMEレコードの準備が終わったら、mastodonの設定ファイルを書き換えます。
弊鯖の場合はdocker-composeを使った構成ですので、
%echo "S3_ALIAS_HOST=media-mstdn.asterism.xyz" >> .env.production
%sudo docker-compose down
%sudo docker-compose -f docker-compose.override.yml up -d
といった具合でした。
RDSを使っているので公式のdocker-compose.ymlから書き換えてるので-fでファイル指定しています。
お金とか
料金的にはほぼ変わりないはずです。
S3へのGetリクエスト料金が少し減るくらい?
只今Gsuite契約したのもありバックアップ環境とか色々調整中なので単純に今回の作業での金額差分は見れないか。