R2は、Cloudflare™が提供するAmazon S3互換のオブジェクトストレージで、データ転送料金がかからないのが大きな特徴です。S3はストレージとしては良いのですがとにかく転送料金がバカ高いから...
基本的な読み書きのAPIは互換対応されており、endpointを指定することでAWS SDKからアクセスできるのが大変便利です。ローカル開発でminioを使っているような感覚で、dev環境だけR2にしてみたり、段階的に移行したりなどもお手軽にできそうです。
バケット名のルール
そんなR2ですが、タイトル通りバケット名にドット(ピリオド) .
が使えません。意外と書かれていなくて実際作ろうとしてから気づきました。
細かいルールは見つけられなかったのですが、以下のようなエラーがあるのは確認しました。
- バケット名に使用できるのは、小文字 (a ~ z)、数字 (0 ~ 9)、およびハイフン (-) のみです。
- バケット名の先頭または末尾にハイフン(-)を使用することはできません。
- バケット名は 3 ~ 63 文字で指定してください
Amazon S3の場合、バケットの名前付けによると以下の記載があります。ドット以外は、概ね似たような制限に見えます。
バケット名は、小文字、数字、ドット (.)、およびハイフン (-) のみで構成できます。
より一般的に重要な違いとしては、S3のバケット名は全世界でユニークなのに対して、R2はアカウント内でユニークであれば良く、 dev
や test
と言ったバケットが普通に作れるというのも挙げられます。このため、S3で使っているバケット名はドットが含まれない限り基本的にR2の自分のアカウントでも使えます。
何が困るのか
S3 Static Website Hostingで独自ドメインを使う場合、バケット名をドメイン名と完全一致させておく必要があります。この都合により、ドットが含まれるバケットが多数ありました。
あるプロジェクトで、データをS3とR2に多重化して段階的にR2に切り替えようとしていたのですが、設定ファイルの複雑さや管理の手間を増やしたくないので同じバケット名とするルールで実装したところ今回の問題を踏みました。仕方ないので、R2のときだけバケット名を変える実装をして凌ぐことにしました。
ちなみに、R2では任意のドメインで任意の名前のバケットを公開できます。S3のようにバケット名をドメイン名にするという妙な制約もないので、R2だけ使っているぶんには、特に問題は起きません。
その他の注意点
当然ですがAWSのサーバからアクセスする際はS3に比べれば遅いです。PUTリクエストは小さいファイルでも300~500msくらいはかかる印象でした。
またR2に限らずCloudflareサービス全般ですが、Enterprise以外の全プラン(Free, Pro, Business)では権限という概念がなく、メンバー全員が全ドメインの全権限を持ち、アクセストークンも全バケットが対象になります。このあたりはEnterpriseに誘導したい差別化なのでしょうけど、やや辛いところです。
全体的にまだ若いサービスですし、知見も浅いですが、今後に期待して広く使っていきたいです。