[Mastodon]さくらのオブジェクトストレージからAmazon S3に移行する方法
はじめに
Mastodon のメディアファイルの保存先としてさくらのオブジェクトストレージを利用していたのですが、2017年9月9日から、2017年9月17日現在、障害から復旧の目途が立たずまともに利用することができません。
[参考] メンテナンス・障害情報・機能追加|さくらインターネット公式サポートサイト
http://support.sakura.ad.jp/mainte/mainteentry.php?id=22606
自分のインスタンスだけ問題が起きているのなら我慢もできたのですが、トゥートの配信の遅延など他のインスタンスへの影響も出始めたため、従量課金の怖さはありますが、Amazon S3 の信頼性を取り移行することにしました。
Amazon S3 バケットの作成
なにはともあれ、移行先の Amazon S3 バケットの作成を行う必要があります。
基本的には、Amazon Web Service のアカウントを作成して、以下の記事を参考に Amazon S3のバケット(保存先)を作成します。
Mastodon の設定も記載がありますが、はまりどころもあるので、Amazon S3 のバケットの作成まで行ってください。
Mastodon で Amazon S3 を使えるようにする
Mastodon で Amazon S3 を利用できるようにするためには、.env.production ファイルに設定を記述し、Mastodon サービスを再起動する必要があります。
以下は、東京リージョン(ap-northeast-1)で設定した場合のサンプルになります。リージョンについてはこちらを参照してください。特に、S3_ENDPOINT の設定方法ははまりどころなので注意してください。
S3_ENABLED=true
S3_BUCKET=bucketname
AWS_ACCESS_KEY_ID=AAAAAAAAAAAAAAAAAAAAA
AWS_SECRET_ACCESS_KEY=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
S3_REGION=ap-northeast-1
S3_PROTOCOL=https
S3_ENDPOINT=https://s3-ap-northeast-1.amazonaws.com
当然ですが、さくらのオブジェクトストレージの設定はコメントアウトしておいてください。
設定が済んだら、Mastodon のサービスを再起動します。CentOS7 では以下のようなコマンドを実行します。
$ sudo systemctl restart mastodon-*
適当な画像をアップロードして、画像が登録されれれば Mastodon の Amazon S3 の設定は終了です。
さくらのオブジェクトストレージから Amazon S3 にメディアファイルの移行
この内容がこの記事の一番のキモ?になります。
Amazon S3 に移行した段階だと、Mastodon がキャッシュしたメディアファイルが移行されないため、アイコンや画像といったメディアファイルが表示されなくなってしまいます。
そこで、さくらのオブジェクトストレージからメディアファイルをダウンロードし、Amazon S3 にアップロードする必要があります。
この作業を行うツールとしては、Windows では「S3 Browser」というフリーウェアが使えます。Macでは有償版ですが、「Transmit」というツールがあります。4100円のツールですが、サイトに行くと1週間の体験版を入手することができます。
今回は、Windows 環境の「S3 Brower」で移行方法を解説します。といっても簡単なのでご自身でできると思いますが。
「S3 Brower」を起動すると以下の画面が表示されるので、Mastodon の .env.production で設定している内容を入力します。
すると、以下の画面が表示されるので 「accounts/」を選択して「Download」をクリックします。 これでアイコンとヘッダー画像をダウンロードできます。「media_attachments/」にはキャッシュした画像ファイルが保存されていますが、時間がかかりすぎるので今回は見送ります。
なお、ファイルのダウンロードは500MBで20時間ぐらいかかりましたので、気長に待ってください。
ダウンロードが終了したら、今度は Amazon S3 のアカウントを作成して、ダウンロードした「accounts/」フォルダをそのままルートにアップロードします。これも時間がかかるので、気長に待ってください。
これらの処理が完了すると、アイコンが画面で表示されるようになります。
後始末
このまま放っておくと、さくらのオブジェクトストレージから課金が発生してしまいますので、さくらのオブジェクトストレージのコントロールパネルから、バケットを削除します。
これでようやく、Amazon S3 への移行が完了しました。
おわりに
本当はさくらのオブジェクトストレージの復活を待ちたかったのですが、復旧に時間がかかりすぎることと他のインスタンスに迷惑をかけてしまう現象が起きたために Amazon S3 への移行を決断しました。
具体的には、メディアファイルがらみのエラーで Sidekiq の再試行タスクが異常に増え、通常のトゥートが配信されず、20時間以上も経ってから配信されて問い合わせを多く受けるということになりました。
他のインスタンスの方に心配をかけるのはよくないですよね。
この記事が同じ問題に困っている人の参考になれば幸いです。
スポンサーリンク
Twitter ではブログにはない、いろんな情報を発信しています。
@fnyaさんをフォロー
コメント