Cloudflare R2を画像配信サーバーにする
要件
- 独自ドメイン
- https
- 全画像ファイルの容量は64GB。年5GB~6GBほど増えていく
S3との費用比較
- R2 https://developers.cloudflare.com/r2/pricing/
- S3 https://aws.amazon.com/jp/s3/pricing/
- CloudFront https://aws.amazon.com/jp/cloudfront/pricing/
S3はhttps化にCloudFrontを利用するのが一般的なので、CloudFront前提で比較する
ストレージ費用
- R2 GBあたり0.015/月 + 10GB無料
- S3 GBあたり$0.023/月
リクエスト費用
- R2 月1000万reqまで無料 + $0.36/100万req
- CloudFront 月1000万reqまで無料 + $0.90/100万req($0.009/1万req)
転送量
- R2 無料
- CloudFront 月1TBまで無料 + $0.114/GB(日本からのアクセス)
- S3とCloudFront間は無料
画像のサイズはサムネイル、小、中、大、オリジナルがある。
サイトが月間5万PVでPVあたり10の中画像を読み込むとするとリクエスト回数は50万/月。
画像1枚1MBとして1*500000=500GB/月。
オリジナル画像は10MBを超えるものが多くあるが、どれくらいアクセスされるものかデータがなくよく分からない。
そのためCloudFrontの無料枠内に収まるか不安(最大で33MBのものがあるので画像の中のひとつが軽く注目されて1000アクセスとか行ってしまうだけでも33GB)
リクエスト費用と転送費用に関しては意外とS3+CloudFrontでも無料範囲で行けるかと思ったが、スパイクで死ぬ要素があるのは避けておきたい。
ちなみに今後サイトのアクセスが増える見込みはほぼない。むしろ減少傾向。
ただしオリジナルの画像サイズはさらに大きくなる可能性がある。
計算が間違っていなければR2で行く判断が正しそうだ
Cloudflare使ったことがなかったのでアカウントを作るところから。
サインアップしてR2を利用するためにクレカを登録した。コンソールの言語を日本語にしているとクレカ登録がエラーになって進まなかったので、英語にしたらうまく行った。
以下の通り進めてみる。
Wranglerを使った認証。
ターミナルからwranglerを入れる。
npm install -g wrangler
wranglerを実行する。
wrangler login
zsh: command not found: wrangler
why?
よく分からないので適当にnpxする。
npx wrangler login
⛅️ wrangler 2.14.0
--------------------
Attempting to login via OAuth...
(略)
ブラウザCloudflareのOAuthの画面に遷移して以下のように聞かれる
Allow Wrangler to make changes to your Cloudflare account?
おもむろにallow
をポチ。ターミナルに以下のように表示されてログイン成功。
Successfully logged in.
バケットを作る
CloudflareのコンソールからR2のバケットを作る。
バケットの名前を入れるだけでほかに設定することはない。S3に比べて楽だ。
アップロードはコマンドラインからやりたいが設定すればs3 syncとかできるのか?
できた。
awsコマンドの実行のやり方は以下を参考にすると分かりやすい。
おっと、独自ドメイン使うにはCloudflareで管理されてるやつじゃないとダメなんだ。
しかもjpドメインは扱ってないということオワタ。
へーへーへー。
これは今踏んどいてよかったやつかもしれん。
まあ独自ドメインじゃなくてもええか?うーん。
R2.devサブドメインで公開するようにしてCORS設定してみたけど、どこのドメインからでも読めるな。
画像URLのドメインからどのサイトに所属する画像なのか分からないうえで、よそのドメインから読み込まれ放題になるのはちょっと嫌な気がする。
となるとS3+CloudFrontにして様子を見ようかなー
S3+CloudFrontは1TB超えるリスクがけっこう高そうなのでレンサバにした。
ブログ用途でさくらのレンタルサーバー借りてるからそれに相乗りさせればいいやってなった。