A New Hope for Object Storage: R2 enters open beta

9月に、当社独自のオブジェクトストレージソリューションCloudflare R2を構築中だと発表しました。R2は、現行クラウドプロバイダーからの法外なエグレス料金請求に対する当社の解決策で、開発者がデータアクセスのコストを心配することなく好きなだけデータを保存できるようにしています。

この発表はものすごい反響を呼びました。

  • 独立系の開発者は、請求額が少なすぎるために、クラウドプロバイダーが公正なエグレス料金の交渉に応じてくれませんでした。それらの開発者にとって、エグレス料金はクラウド料金の内訳で最大の項目であり、サイドプロジェクトや新事業の開発を圧迫していました。
  • 大企業はそれまで、マルチクラウドストレージ(そしてマルチクラウド自体)を非現実的だとして無視してきました。それが発表後は、パートナー企業とデータ統合する新製品を当社へ熱心に提案してきたのです。
  • 非営利の研究機関は、実験データを共有するだけで多額のエグレス料金を支払っていました。エグレス料金はそれら機関の共同研究能力に実際に影響を及ぼしていました。各機関のサイロ化が進み、実行可能な実験や分析が制限されていたのです。

Cloudflareは、より良いインターネットの構築を支援すべく存在しています。そして本日、インターネットにあって然るべき支援、R2がオープンデータ版として提供されます。

セルフサービスのお客様は、CloudflareダッシュボードでR2を有効化できます。Enterpriseのアカウントでしたら、担当のCSMにオンボーディングをお申し付けください。

内部APIと外部API

R2には2つのAPIがあります。Workers内からしかアクセスできないAPI(In-Worker API)と、bucket.account.r2storage.comの形のURLでバケットを表示するS3互換APIです。R2へのリクエストを行う前に認証が必要です。R2バケットはデフォルトでプライベートになっているからです。

In-Worker API

In-Worker APIでは、バケットが特定のWorkerに「バインド」されて、そのバケットに対するPUT、GET、DELETE、LISTの操作が可能になります。

S3互換性API

S3互換APIの場合、認証はS3と同じ方法で行われます。すなわち、署名バージョン4(SigV4)とR2のURLを照合する形です。SigV4は秘密鍵を使ってリクエストに署名し、R2に対して認証します。つまり、インターネットを介したR2へのパブリックアクセスは現在、WorkerをホストしてR2へ接続し、R2経由でリクエストをルーティングする方法でのみ可能になっています。

S3互換APIの最も簡単なテスト方法は、S3クライアントを使うことです。最もよく使われるS3クライアントの1つがboto3 SDKです。

Pythonで次のスクリプトをコピーし、account_idaccess_keysecret_access_keyのフィールドにR2アカウントの資格情報を入力します。

main.py
import boto3

s3 = boto3.resource('s3',
  endpoint_url = 'https://<accountid>.r2.cloudflarestorage.com',
  aws_access_key_id = '<access_key_id>',
  aws_secret_access_key = '<access_key_secret>'
)

print('Buckets:')
for bucket in s3.buckets.all():
  print(' - ', bucket.name)

bucket = s3.Bucket('my-bucket-name')

print('Objects:')
for item in bucket.objects.all():
  print(' - ', item.key)

Features

R2には、S3のすべての基本機能(作成、読み込み、更新、削除)について両方のAPIを介したサポートが付いています。

当社では、オープンデータ期間中に、R2でバケットあたり毎秒1000回のGET操作と毎秒100回のPUT操作をこなすことを目標としています。R2は、サイズが約5TBまでのオブジェクトをサポートしており、各部のデータ量は5GBを上限としています。

R2は、一貫性に優れたデータアクセスを提供します。R2がPUTをいったん確認すれば、その後のGET操作ではその新しい鍵または価値のペアが常に反映されます。唯一の例外はバケットの削除です。削除後しばらくは、バケットがまだ存在し、読み込みや書き込みを許可し続ける場合があります。

料金設定

R2の当初の発表には、仮の料金設定が含まれていました。R2に関する当社の主目標の1つは、クラウドベンダーと大型割引を交渉できない開発者のお役に立つことです。その目標に向けて、開発者がR2を使った構築を無償で始められるように、Forever Free(永久無料)の帯を設けたことを今回併せて発表します。

R2の利用料金は、保存するデータの総量と、データに対して行う操作のタイプによって決まります。

  • ストレージ 月額 \$0.015 / GB
  • クラスA操作(書き込みと一覧取得を含む)\$4.50 / 100万回
  • クラスB操作 \$0.36/ 100万回

クラスA操作は、バケットの作成、バケット内のオブジェクトの一覧取得、オブジェクトの書き込みなど、状態を変更する傾向があります。クラスB操作は、バケットからのオブジェクト読み込みなど、既存の状態を読み込む傾向があります。料金の詳細と操作タイプの全リストについては、docsをご覧ください。

もちろん、R2からのエグレスの消費帯域幅については料金はかかりません。ご自分のバケットに存分にアクセスしていただけます。

R2のForever Free帯に含まれるのは:

  • データ保存 10GB / 月
  • クラスA操作 100万回 / 月
  • クラスB操作 1000万回 / 月

月ごとのデータ使用量リセット 無料。オープンデータ期間中は、Free帯の範囲を超えるR2利用にのみ課金します。

今後の計画

当社は過去6か月、数社のデザインパートナーとクローズドベータテストを実施し、独自のストレージソリューションを構築してきました。Durable ObjectsでサポートされたR2の斬新なアーキテクチャは、高い可用性と一貫したパフォーマンスを提供します。

R2は大いに進歩しましたが、これから数か月で構築しなければならないものがまだまだあります。

パフォーマンス向上

第一優先事項はパフォーマンスと信頼性の向上です。社内での利用を重ね、当社デザインパートナーの要望を反映してきたR2ですが、やはり本番トラフィックに優るものはありません。

オープンベータ期間中は、R2でバケットあたり最高で毎秒1000回のGET操作と毎秒100回のPUT操作をこなすことができます。システム運営に慣れるにつれて、この限度を上げていくつもりです。お客様のニーズが限度より高い場合は、ご連絡ください。

バケットを作成する際、地域セレクターは表示されません。R2に関する当社のビジョンは、ストレージの自動グローバル分散、つまりリクエスト元に最も近いストレージ地域にシームレスに各オブジェクトを置くという機能も含んでいるからです。現在、R2は主に北米にデータを保存しています。そのため、他の地域からコンテンツにアクセスすると高遅延となる可能性があります。当社はこの問題を解決するため、まずはオブジェクト作成が可能な地域を追加し、それから既存オブジェクトの地域間自動移動機能を追加していきます。Durable Objectsに法域による制限を組み込んだのと同様に、R2バケットがデータを置く場所についても、プライバシー規制に順じた制限を可能にする予定です。

R2の機能セットを拡大

次に、R2の機能を基本的なS3API以外にも拡大していくことに注力します。短期的には、以下の実現に焦点を絞ります。

  • TTLのサポート。これにより、時間が経過するとバケットからデータが自動的に削除されます。
  • パブリックバケット。これにより、Workerを書くことなく、バケットをインターネットに公開することができます。
  • 署名付きURLのサポート。特定キーへのアクセス(読み取り、書き込み)をトークンに委任します。
  • Cloudflareのキャッシュと統合。読み込みリクエストを拡張し、グローバルなデータ分散を実現します。上記以外の追加機能のご要望がございましたら、ぜひお聞かせください。Discordに参加いただき、R2をエグレス料金がかからない新しいオブジェクトストレージとしてご利用いただくために必要な機能について、「r2-open-beta」チャンネルで情報共有をお願いいたします。