別のS3バケットへの移動

How do I move my s3 upload bucket from one provider to another? の議論を続けます:

GCP バケットから AWS S3 バケットへの移行を試みています。古いシステムでは S3 CDN は使用されていませんでした(設定した人は、どうやら何をしていたのかよく分かっていなかったようです)。

s3cmd を使って古い GCP バケットをローカルファイルシステムに同期し、その後再度使用してアセットを新しい S3 バケットにプッシュしました。現在は、Using Object Storage for Uploads (S3 & Clones) で説明されている通り、S3 とサイト CDN を正しく設定してシステムが動作しています。

上記のトピックでは、投稿を更新するために rake posts:remap を使用することを提案していました(おそらくすべての投稿を再 Bake すべきでしょうか?少なくとも古いバケットに一致する投稿は?)。

posts:remap を実行したところ、1 つの投稿だけがマッピングされました。

 Upload.order(Arel.sql('RANDOM()')).limit(10).pluck(:id, :url)

これを見ると、すべてが古いバケットを持っていることがわかります……ああ、これが問題ですね。rake posts:remap ではなく、Change the domain name or rename your Discourse で説明されている discourse remap が必要です。

はい、そう思います。

すぐに行うようにします。@Falco さん、大まかな流れは以下のようになります:

  • 新しいバケットと CDN を作成し、新しいバケット/CDN を使用するようにコンテナを再構築して動作確認を行う
  • 古いバケット用に s3cmd を設定し、データをローカルに同期する
  • 新しいバケット用に s3cmd を設定し、データを新しいバケットに同期アップする
  • discourse remap OLD-BUCKET-DOMAIN-NAME NEW-BUCKET-DOMAIN-NAME を実行する
  • 再 Bake する

これで合っていますか?

もし古いバケットと新しいバケットで同じ CDN を使用する場合、再 Bake を省略できるかもしれませんが、タイミングを完璧に合わせるのは少し難しいようです(データが新しいバケットに入らない限り CDN のオリジンを変更できませんが、同期中に古いバケットに何もアップロードされないようにする必要があります)。つまり、それは可能であると述べるだけでもよいかもしれません。

「いいね!」 2

ガイドには、公式の AWS CLI を使用した方がよいかもしれません。

ここでは DbHelper.remap を使用してください。

不要です。

同じ CDN を使用して CDN パネルでソースを変更するか、新しい CDN を使用して DbHelper.remap でマッピングし直してください。どちらの場合も rebake は不要です。

「いいね!」 2

ああ、わかりました。確認してみます。AWS CLI を AWS 以外のバケットでも動作させることは可能でしょうか?

こんにちは、ラファエルさん。だいぶ近づいてきました。現在のこのハウツーのバージョンでは、古い場所からローカルへ、そしてローカルから新しい場所への同期に aws cligsutil を使用しています(これらのツールへのリンクと、バケット名をプレースホルダーで埋め込んだコマンドラインコマンドを提供するだけです)。その後、DbHelper を使ってテーブルを更新します。中規模のサイトでも非常に高速に動作します。素晴らしいですね。

現在の唯一の問題は、古い設定に s3_cdn_url が含まれていなかったため、投稿内の画像がまだバケット(CDN ではない)に直接リンクされていることです。リベイクでは解決しません。新しいアップロードは正しく CDN にリンクされます。DISCOURSE_S3_ENDPOINT: '' を設定しても効果がないため、データベースを復元した後に SiteSetting をクリアする必要がありました。それほどひどいことではありませんが、そのことに気づくまで何度もリビルドを繰り返すことになりました。

古い設定には S3 CDN が定義されていませんでした。これに対し、バケット URL/ホスト名が含まれる 1250 件の投稿すべてをリベイクすることで修正できますが、これによりそれらの画像がすべてダウンロードされ最適化されてしまいます(古いサーバーは 2.7.0.beta5 で動作しているため、すでに最近の再最適化が何らかの形で完了しているかと思ったのですが)。これにより、私の貧弱な 2GB サーバー(Postgres と Redis が RDS と ElastiCache 上で動作)がしばらくの間、負荷平均 10〜20 で過負荷状態になります。このサイトにはそもそもより大きな EC2 インスタンスが必要なのかもしれませんが、このリベイクでサーバーが完全にダウンし(UX で 500 エラーが発生)、少し驚いています。

それとも、これらの投稿の cooked 内で、バケットホスト名から CDN URL への置換を行うように工夫すべきでしょうか?

@pfaffman 導いていただきありがとうございます。
ただし、私の問題は最後の 2 段階でさらに複雑化しています。

現在の問題:一部の画像が欠落しており、その代わりに小さなアイコンが表示されています。マウスカーソルをそれらの上に置くと、‘olds3bucket’ アドレスが表示されます。しかし、クリックすると正しく全サイズで表示され、URL バーには ‘news3bucket’ のパスが表示されます。

  1. 主に古いバケットのデータを新しいバケットに同期するよう指示されましたが、これはすでに正常に完了しています。
  2. 次に、Discourse の Web UI で新しいバケットの設定を入力しますが、これはすでに 1 年間使用しています。
  3. そして、古いバケットの URL を新しいものに「リマップ」し、その後リベイクを行うよう指示されています。ここに問題があります。これを実行すると(「リマップ」を行わずに単に「リベイク」しても、投稿設定メニューから「HTML を再構築」しても同様です)、アイコンとして表示されていた画像が完全に消えてしまいます。その場所には「空白」のみが表示されます。そのため、すぐに元に戻しています。

改めてありがとうございます。
(私は非常に小さなウェブサイトを持っており、同様に…)

rclone は複数のバックエンドと同期できる優れたツールです。現在、バックアップ用に使用しています。

こんにちは、ジェイさん。

少し追跡してすみませんが、ガイドについて進展はありましたか?ありがとうございます!