S3アップロードの設定後、画像が読み込まれませんでした

こんにちは。Discourse を EC2 から ECS(コンテナサービス)へ移行しました。EC2 時代は S3 アップロードの設定がまだ行われていませんでした。移行前に、EC2 上のすべての画像を(パブリックアクセス付きで)S3 バケットにコピーしました。しかし、S3 アップロードを有効にして(CDN は未設定のまま)移行を行ったところ、画像やアバターが一切表示されなくなりました。

app.yml の設定は以下の通りです:

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: aws_access_key
  DISCOURSE_S3_SECRET_ACCESS_KEY: aws_secret_key
  DISCOURSE_S3_BUCKET: <uploads-bucket>
  DISCOURSE_S3_BACKUP_BUCKET: <backups-bucket>
  DISCOURSE_BACKUP_LOCATION: s3

hooks:
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets

コンテナ内で以下のコマンドを実行しても改善しませんでした:

rake posts:rebake
rake posts:missing_uploads
rake avatars:refresh

また、画像の URL に違いがあることも確認しました(Discourse はまだ「EC2 上のローカルアップロード」の URL を使用しています)。

S3 上のリンク:https://[s3-bucket].s3.amazonaws.com/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

Discourse 上のリンク(EC2 アップロードの URL のまま):https://[domain]/uploads/default/original/1X/831092e27d6c066c3618a587a5c378e1c794f2c6.png

ブラウザのエラー:404 NOT FOUND

Discourse を設定して、画像に正しい S3 URL を使用させるにはどうすればよいでしょうか?

S3へのマイグレーションを行うrakeタスクを実行しましたか?

EC2上でのマイグレーション前に、それを実行することをお勧めします。

「いいね!」 1

Jay さん、こんにちは。ECS でコマンドを実行しようとしましたが、エラーが発生しました。

一点確認させてください。これは EC2 でのみ実行すべきでしょうか?アップロードの移行や画像 URL の更新には、他に方法がありますか?現在、EC2 インスタンスは停止しており、現在の ECS 環境はドメイン、データベース、キャッシュを既に使用しています。そのため、ダウンタイムなしでドメインとデータベース/キャッシュを古い EC2 へ戻し、再構築できるかどうかわかりません。よろしくお願いいたします。

画像にアクセスできるインスタンスでコマンドを実行する必要があります。ただし、自分で手動で S3 に移動させた場合は、アップロードテーブルに対して何らかの修正を行う必要があるかもしれません。

バケット間での移動に関する手順書を作成中です。これはあなたの問題解決に役立つかもしれませんが、バケット間ではなくローカルからバケットへの移動という点を考慮して、手順を調整する必要があります。

この作業に対して定額で請求するとしたら、おそらく 4 時間分になるでしょうが、時間課金であれば 1 時間程度で済むかもしれません。

あっ、すみません。これに気づきました。EC2 が同じデータベースを使用している場合、ECS はそのままにして EC2 を再起動し、そこで migrate-to-s3 タスクを実行できる可能性があります。その前に、アップロード用のオブジェクトストレージの使用 (S3 とクローン) で説明されているように、すべての S3 関連の設定を ENV 変数に設定する必要があります。これが最も簡単な解決策である可能性が高いです。作業開始前に、データベースのみをバックアップすることを推奨します。

「いいね!」 1

こんにちは、Jay さん。返信ありがとうございます。わかりました。それで問題ないと思います。

「いいね!」 1