S3 の画像帯域幅コストが面倒になってきている

当サイトの S3 画像サービスの帯域幅(転送)コストが上がり続けています。料金は 1GB につき 0.09 ドルで、これがすぐに積み上がってしまいます。私だけがこの問題を抱えているわけではないと思いますか?現在、転送だけで Amazon に月額 70 ドルを支払っており、それは VM のコストよりも高いです。S3 のストレージコストは月額 5 ドルに過ぎず、問題のすべては転送料金にあります。

CDN やキャッシングの設定は行っておらず、S3 画像バケットを使用する Linode VM 上で動作する完全に標準的な Discourse 環境です。画像を大量に扱う大規模サイトではどのような対策を講じているのでしょうか?CDN(コスト削減に役立つと推測します)?Digital Ocean Spaces や Minio の利用?他に何か見落としていることがあるのでしょうか?

S3 に CDN を利用するのは正しいアプローチです。これにより転送コストを大幅に削減できます。

予算が厳しい場合は、Cloudflare のサブドメインを利用することも可能です。

うーん…Fastly や Amazon CloudFront(他社も含む)の帯域幅コストを見ると、現在支払っている 0.09 ドル/GB とほぼ同じですね :frowning:

Cloudflare は帯域幅に対して課金していないようです?? それなら試してみる価値がありそうです。Discourse 上で S3 画像の CDN として Cloudflare を設定する方法についての投稿はありますか?s3_cdn_url は見つけましたが、設定方法の指示が見つかりません(設定後、画像を再構築する必要があることはわかります)。Cloudflare を見ると、DNS を変更する必要があるため、独自ドメインが必要のようです。つまり、s3-cloudflare.mydomain.com のような CNAME を作成して、S3 バケットの IP を指し示し、Cloudflare にその URL で処理を行わせ、s3_cdn_url をそれに設定してから再構築する必要があるということでしょうか?

Cloudflare のサポートページに、この方法が機能する可能性があるという記事を見つけました:

https://support.cloudflare.com/hc/en-us/articles/360013791312-Fetching-object-storage-assets-through-the-Cloudflare-CDN-using-a-Cloudflare-Worker

これを実践している方はいますか?少なくとも私の場合、月額費用が倍以上に跳ね上がっているため、この問題を抱えるサイトがあまりないことに少し驚いています。

私は Discourse サイト で Cloudflare を使用していますが、問題なく動作しています。基本的には、すべてのトラフィックを Cloudflare に経由させ、どの処理やキャッシュを行うかを設定するだけです。ただし、いくつか注意点があります:

  1. Cloudflare が何もキャッシュしないように設定してください(ページルールを使用して例外を設定します。詳細は後述)。
  2. Cloudflare が JavaScript に干渉しないようにしてください。具体的には、Rocket Loader を無効にしてください。
  3. Brotli 圧縮についてはまだ確信がありませんが、私は無効にしています。
  4. 以下のように、アバターとアップロードディレクトリをキャッシュするためのページルールを設定してください(ルール #1 はサイト固有のものなので無視してください)。

現在、Cloudflare は私のために月に 3TB 以上のデータをキャッシュしており、大規模なグラフィックも非常に高速に配信しています。

CDN に関心がある場合は、https://www.belugacdn.com/ もお勧めします(私は同社とは無関係です)。私は大規模な WordPress プラットフォームでこれを利用しており、パフォーマンスは良好です。また、私が検討した他の CDN プラットフォームに比べてコストのほんの一部で済みます(それらの方がさらに高性能な可能性もありますが、Beluga は私の要件を満たしています)。

結局、@scottfsmith さんは Amazon CloudFront から移行されたのでしょうか?

私も同様に支出が増加している状況にあります。

CloudFront は私にとって比較的新しいものです。ここ数年は S3 バケットのみを運用していましたが、ここでの推奨に基づき、先月に CloudFront を設定しました。

これによって、S3 のデータ転送コストが CloudFront のデータ転送コストに置き換わっただけで、毎月の請求総額は変わっていません。

データ転送の月額請求額が持続不可能な水準に近づいていると感じています。

同じ状況です。私も最近 CloudFront に移行しましたが、コストは同様のようです。ローカルキャッシングによる何らかの節約があるかと思っていました。つまり、同じ画像が同じ地理的場所から繰り返し読み込まれる場合、帯域幅は少なくなるだろうと。しかし、今のところそうはなっていないようです。

CloudFront の代わりに機能する他の CDN が何かあるはずです。Discourse が行っているのは画像 URL の書き換えだけなので、かなり汎用的な仕組みのようです(少なくともそう見えます)。もしかすると、画像のみには Cloudflare を使えるかもしれません。

私もまさに同じ理解をしていました。

トラフィックの98%以上がイギリス発であり、当然ながらCloudFront経由のS3 egressの98%もイギリス向けです。

今のところ、CDNを導入しても何のメリットも感じていません。もしトラフィックが世界中に広がっていたら、状況は違ったかもしれません。

今後、Cloudflareについて調べてみます(なぜこの2社がこれほど似た名前を名乗っているのか不思議です!)。何かメリットがあるか確認してみます。

ありがとうございます :+1:t2:

何か見つかった場合は、こちらでフォローアップしてください。私も本来は自分で確認するつもりでした。

@Richie さん、@scottfsmith さん、

https://www.stackpath.com/ のように月額 10 ドルで固定費の CDN があります。以前は アップロードにオブジェクトストレージを使用する (S3 とクローン) のテストにすべてこれを使用していました。コミュニティにはこちらの方が適しているかもしれません。

Stackpath CDN は月額20ドルで、1TBまでが上限ですが、多くの月でそれを超えてしまいます。すると、20TBまでの上限で月額200ドルに跳ね上がり、これはAmazonが私に請求している月額100ドル程度よりも高くなってしまいます。

もしかしたら、そのリストの中にもっと良いものがあるかもしれませんね。リストのことを思い出させていただき、ありがとうございます。

Imgur は誰でも無料で利用できますが、これに対応するプラグインはありません。

Tobey Maguire Reaction GIF

そのようなプラグインは何を行うのでしょうか?単にIMGURのプラグインをダウンロードしないだけなのか、それとも現在のシステムと同様に、おそらく存在する何らかのAPIインターフェースを介してすべての画像をIMGURにアップロードするのでしょうか?

あなたにとってそれはどれだけの価値がありますか?CDCKのビジネスモデルにとって理にかなったものではないと思います。彼らの有料ホスティングがDiscourseを私たち全員にとって可能にしているものであり、IMGURプラグインがなくても彼らのホスティングは問題なく機能しています。

この設定は2022年でも問題なく動作するか、どなたか確認していただけますか? :slight_smile:

Cloudflareのセットアップはまだ使用しています。

ご確認ありがとうございます。

お使いの設定はフルページキャッシュではありませんよね?

それとも、Cloudflare CDN を他のものより使用する特別なメリットはありますか?

いいえ、アップロードとアバターのディレクトリのみをキャッシュしています。上記のルールを参照してください。それ以外のことを試すと、Discourseが壊れる可能性があります。

無料だからです :slight_smile:

JSやCSSのような静的アセットについてはどうですか?

こちらのガイド を使用してCDNを利用する場合、アップロードやアバター(私の認識が正しければ)とともに静的アセットも配信されます。

では、なぜCloudflare経由で全ての静的アセットを配信するとDiscourseが壊れるのでしょうか?

思い出せません、もう何年も前のことです。試してみて、結果を報告してくれませんか?

このスレッドが再びアクティブになったので、フォローアップします。Amazon CloudFront が大幅に値下げしたようです。何をしたのか全く分かりませんが、私の平均的な AWS コストは月額約 80 ドルから 15 ドルに下がりました。これは、S3 と CloudFront の両方で、大量の画像があるサイトの画像(のみ)に使用しています。

Cloudflareは問題ありません。Rocket Loader機能を無効にするだけです。

設定の手間なしに、サーバーへの帯域幅を半分節約できます。

数年前はCloudflareがDiscourseとうまく連携していなかったかもしれませんが、今日ではそうではありません。それについての疑念が継続して見られるのは残念です。もし特定の問題がある場合は、ここでサポートスレッドを開始し、何が機能していないかを説明してください。