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)
ファイルが表示されれば成功です
参考記事:















