October 12, 2022

Cloudflare R2 を使ってみた

R2が一般提供されたという事なのでちょっとだけ試してみました


無料で使える範囲は

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

とかなり寛容な設定になってます

R2 プランの購入

まずはダッシュボードからR2プランを購入


注文に進み


支払い情報を入力


購入完了しました。この時点では支払いは 0$ です


バケットの作成

ダッシュボードに戻りバケットを作成します


バケット名を入力しバケットを作成


バケットの作成が完了しました


設定を見てみると、パブリックアクセスはデフォルトでブロックするようになっているみたいです


ブラウザからのアップロード

ブラウザからファイルをアップロードしてみます

画像を3つアップロードしました


R2 API トークンの作成

R2 は S3 API と互換性があるようなのでさっそく試してみます

まずはR2トップの「R2 API トークンの管理」からAPI トークンを作成


トークン名とアクセス許可、TTLを設定。アクセス許可は「編集」TTLは24時間に設定しました


「アクセス キー ID」と「シークレット アクセス キー」を取得


API トークンの作成が完了しました


S3 API を使った操作

今回は python の boto3 を使います。他の言語の使い方は公式ドキュメントに掲載されています

まずは boto3 をインストールし

pip install boto3

公式ドキュメントからコードをコピーします

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)
  • endpoint_url の <accountid>
  • <access_key_id>
  • <access_key_secret>
  • バケット名

をそれぞれ置き換えてスクリプトを実行します


バケット名とキーを取得できました


オブジェクトのアップロード

次はオブジェクトをアップロードしてみます

「robots.txt」を用意してコードを追加します

with open("robots.txt", "rb") as data:
  bucket.put_object(Key="robots.txt", Body=data)

スクリプトを実行してからバケットを見てみると

無事にアップロードできてました

エラーが出るときはトークンのアクセス許可が「Read」ではなく「編集」になっているか確認してみましょう


オブジェクトのダウンロード

次は先程ブラウザからアップロードした「cat.png」をダウンロードしてみます

with open("cat.png", "wb") as data:
  bucket.download_fileobj("cat.png", data)

ファイルが表示されれば成功です


参考記事: