AWS CDNとS3に関する問題

,

@Falco これはまだ事実ですか? AWSの使用に関する最近の問題について読んだように思いますが、トピックが見つかりません。

関連するトピックをガイドとして使用して、AWS S3の使用で多くの問題が発生しています。

バックアップは期待どおりに機能していますが、CloudfrontをCDNとして使用するか、DISCOURSE_USE_S3やDISCOURSE_S3_BUCKETのコメントを外すと、永久にローディングアイコンが表示され続けます。

アップロードバケットやCloudfrontディストリビューションに何か誤った設定があるのではないかと疑っていますが、間違いを見つけることができませんでした。アップロードとバックアップの両方のバケットはディストリビューションの背後にあり、バックアップは正常に機能しているので???

discourse-cdn.repealobbba.org CNAME —> amazonassigned.cloudfront.net

DISCOURSE_CDN_URL: https://discourse-cdn.repealobbba.org

## S3 storage config
#  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: ACCESS_KEY_ID
  DISCOURSE_S3_SECRET_ACCESS_KEY: SECRET_ACCESS_KEY
  DISCOURSE_S3_CDN_URL: amazonassigned.cloudfront.net  or
#  DISCOURSE_S3_BUCKET: repeal-obbba-discuss-uploads
  DISCOURSE_S3_BACKUP_BUCKET: repeal-obbba-discuss-backups
  DISCOURSE_BACKUP_LOCATION: s3

さらに、configにこれを追加すると

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

FAILED TO BOOTSTRAPエラーが発生します

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -E -u discourse bundle exec rake s3:upload_assets failed with return #<Process::Status: pid 8484 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec failed with the params {"cd"=>"$home", "cmd"=>["sudo -E -u discourse bundle exec rake s3:upload_assets", "sudo -E -u discourse bundle exec rake s3:expire_missing_assets"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

いつものように… 何かご意見やご提案があれば幸いです。

S3 にアセットをアップロードするためのスタンザを追加する必要があります。

ああ。間違っていました、あなたがやっていますね。

それはバケットの設定に何か問題があることを示唆しています。

バケットを設定するための JSON を生成するトピックが以前あったと思いますが、まだ存在するかどうかはわかりません。

「いいね!」 1

同意します。
バックアップバケットではバケットポリシーは使用されていませんでしたが、アップロードバケットにポリシーを追加したことでブートストラップの失敗が解消されました。

ポリシーのJSONは、CloudFront > Distributions > ご利用のディストリビューション > Originの編集 で確認できます。
Screenshot 2025-12-10 141220

残念ながら、永続的な点滅アイコンは解消されません。

オブジェクト所有権とACLを調整しても結果は変わりません。
Screenshot 2025-12-10 141936

現在の設定です。推奨設定だと思いますが、もしかしたら勘違いしているかもしれません。
Screenshot 2025-12-10 141702
Screenshot 2025-12-10 141835

設定を変更した後、アセットをアップロードするためにrantタスクを実行する必要があります。

また、開発者コンソールを開いて、ファイルがアクセスしようとしているものがバケットに存在するか、またはCDNに問題がないかを確認できます。

「いいね!」 1

継続していただきありがとうございます…

はい、rakeタスクは実行しましたが、何も変わりません。

./launcher enter app
rake posts:rebake
rake uploads:migrate_to_s3
rake posts:rebake_uncooked_posts

スロバーは残っています。

rake uploads:migrate_to_s3 はエラーを返します

Migrating uploads to S3 for 'default'...
Some uploads were not migrated to the new scheme. Running the migration, this may take a while...
rake aborted!
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:156:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3

少なくとも1つのCDNチェッカーでは、discourse-cdn.repealobbba.org → Amazon CloudFront と表示されています

そしてコンソールでは、画像とjsファイルが引き続きCDNから呼び出されていることが示されています
Screenshot 2025-12-10 192413

アセットはCDNから呼び出されていますが、そこにありますか?もしなければ、バケットにありますか?バケットからアクセス可能ですか?

おそらく、アップロードが別のバケットにあるか、アセットが期待される場所にないようにしているものがあると思われます。その場合は、記載されているように手動で修正する必要があります。コンソールにアクセスして、アップロードレコードのどこにあるかを確認する必要があります。

アップロードアセットタスクは機能しているように見えますか?他のアセットが読み込まれていないため、点滅表示が実行され続けています。

「いいね!」 2

はい、ファイルはアセットとしてバケット内にあります。
アクセス可能: https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/logo-815195ae.png

バケットはアップロードとバックアップの2つだけです。バックアップは正常に動作しています。

rake s3:upload_assets はエラーを返しました:
rake aborted!
Aws::S3::Errors::AccessControlListNotSupported: The bucket does not allow ACLs (Aws::S3::Errors::AccessControlListNotSupported)

ACLを有効に切り替えて、再度 s3:upload_assets 編集: uploads:migrate_to_s3 を実行しましたが…
FileStore::ToS3MigrationError: 一部のアップロードを新しいスキームに移行できませんでした。手動で修正する必要があります。(FileStore::ToS3MigrationError)

??? 手動で修正する必要があります。(FileStore::ToS3MigrationError)

バケットを修正し、アセットをアップロードできるようになったため、サイトは動作するはずです。移行しないアップロードを処理するのは、別の(複雑な)問題です。

提供しようとしているアセットの1つは次のとおりです。

https://discourse-cdn.repealobbba.org/assets/start-discourse-6f03a463.br.js

証明書が壊れているため、それが問題です。証明書はありますが、URLと一致していません。

以前提案したように、ブラウザの開発者ツールのネットワークタブを見て、これを確認してください。

「いいね!」 1

上記からの編集
ACLを有効にして、s3:upload_assets 編集: uploads:migrate_to_s3 を再度実行しました

s3:upload_assets は現在、問題なく完了します

ネットワークエラーが見られます。証明書はAWSの問題でしょうか?

この度はご協力いただき、重ねてお礼申し上げます!!

はい。証明書がホスト名と一致していません。*.cloudfront.netと一致しています。

これは機能します: https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/logo-815195ae.png

これは機能しません: https://discourse-cdn.repealobbba.org/assets/start-discourse-6f03a463.br.js

これは機能します: https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/start-discourse-6f03a463.br.js

したがって、S3 CDNをhttps://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.comに変更する必要があります。ああ、それはバケットアドレスのようですね。理想的ではないかもしれませんが、機能するでしょう。

「いいね!」 1

「so that wouldn’t be ideal」(それは理想的ではないでしょう)という表現にはあまり乗り気ではありませんね :wink:

AWSの代替ドメイン名(Alternate domain names)を解決策として検討しています。

私だけかもしれませんが、@Discourse が内部的に使用する CDN を追加するのは、@pfaffman のような方々の親切なサポートを必要とするほど難しくあるべきではないと思います。

@Falco@sam、そして @team(teamはメンションできません)も意見を述べてくれるでしょうか??

はい、私たちがホストしているすべてのサイトはS3とCloudFrontの組み合わせを使用しています。今ご覧になっているこのサイトも同様です。

「いいね!」 2

ご確認ありがとうございます!これを確認した後、DISCOURSE_S3_CDN_URLamazonassigned.cloudfront.net に戻すように再調整しました。これにより、証明書と URL の問題が解消されることを期待しています。
Screenshot 2025-12-11 133250

再構築し、ドキュメントで言及されているすべての rake コマンドを再度実行しました。
rake posts:rebake
rake uploads:migrate_to_s3 はまだ FileStore::ToS3MigrationError を生成します
rake posts:rebake_uncooked_posts

rake s3:upload_assets
rake s3:expire_missing_assets

サイトを読み込ませるには、まだうまくいきません。

何か提案はありますか?

これは役に立ちました。
Screenshot 2025-12-12 001849

@chapoi さん、このスレッドをサポートのために分割していただけますでしょうか。
おそらく、より見やすくするために @JammyDodger さんが「インストール」セクションに移動したのかもしれませんが、フォーラムは何ヶ月も問題なく稼働していました。

いずれにせよ、ご配慮ありがとうございます!

インストールはフォーラムのセットアップだけではありません

「いいね!」 1

了解しました、ご説明ありがとうございます。

「いいね!」 1

上記で述べたように、代替ドメインのヘルプを追加してください。
サイトは読み込まれますが、スタイルシートがなく…

バケットの中を見ると、stylesheets/ フォルダが見当たりません

Screenshot 2025-12-12 120937

s3:upload_assets が不完全なようです。

そして、CORS の問題がありますか?
Screenshot 2025-12-12 121734

BBS(掲示板システム)のことがあるため、ドキュメントの誤解を招く、紛らわしい、または情報量が多すぎる部分をいくつか理解した後、前進しています。 :distorted_face:

BBSの私たちのような人々のために、これを点滅する赤色で表示すると、「2つのCloudfrontディストリビューションが必要」であることが伝わりやすくなります。

そして、どのようにするかについての指示も必要です

S3関連のトピックをいくつか更新・統合していただけると非常にありがたいです。AWS S3 CDNとバックアップに関する現在のデータを含むマスターとなるトピックが1つあると素晴らしいと思います。

次に進みます…

現在、2つのCloudfrontディストリビューションがありますが、次の問題があります。

すべてのrakeコマンドはエラーなく実行され、
これによりブートストラップの失敗はもう発生しません。

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

CDNチェッカーは、より望ましい結果のように見えます

全体として前進していますが、Discourseインフラストラクチャチームからのいくつかのヒントが非常に役立ちます。

ふう!かなりの時間と、非常に親切なAmazonのエンジニアとの電話での数時間(2回の通話で8時間)を費やしましたが、ようやく理解できたと思います。RepealOBBBAサイトではすべてが順調に動作しており、私のプロセスは他のサイトにも再現可能です。

書き留めるかもしれませんが、今のところいくつかのメモです。

  1. DISCOURSE_CDN_URL(AWS S3を使用している場合)とDISCOURSE_S3_CDN_URLは、それぞれ独自のCloudfrontディストリビューションを必要とします。
  2. DISCOURSE_CDN_URLはバケットを使用しません。
  3. DISCOURSE_CDN_URLは非AWS CDNにすることができます。Bunny.netはうまく機能します。(S3サポート付きのBunny Storageが2026年第1四半期にリリースされる予定だと聞きました)
  4. DISCOURSE_CDN_URLとDISCOURSE_S3_CDN_URLのCDNは、適切なDNS設定によりブランド化されたURLにすることができます。
  5. DISCOURSE_S3_CDN_URLはアップロードバケットを必要とします。
  6. アップロードバケットはACLを有効にし、「Everyone (public access)」を「Read」に設定する必要があり、バケットのポリシーを設定する必要があります。
  7. バックアップバケットはACLやポリシーを必要としません。

編集

  1. S3で「すべてのアップロードにCDN URLを使用する」のチェックボックスをオンにする:画像だけでなく、S3にアップロードされたすべてのファイルにCDN URLを使用します。これを有効にしないと、私の場合、常に失敗しました。

上記のことを読んで、「ふむ、フィル、当たり前じゃないか」と思う人が多いでしょうが…私のBBSの頭はすぐには理解できませんでした。

「いいね!」 1