R2 は S3 互換 API に対応しています。そのため、任意の S3 SDK、ライブラリ、ツールでバケットを操作できます。既存の S3 向けコードがある場合は、エンドポイント URL を変えるだけで R2 に使えます。
バケットは R2 上でオブジェクトを保存します。新しい R2 バケットを作成する手順は次のとおりです。
-
Cloudflare アカウントにログインします。
npx wrangler login -
my-bucketという名前のバケットを作成します。npx wrangler r2 bucket create my-bucket求められた場合は、バケットを作成するアカウントを選びます。
-
バケットが作成されたことを確認します。
npx wrangler r2 bucket list
-
Cloudflare ダッシュボードで R2 object storage を開きます。
Overview を開く ↗ -
Create bucket を選びます。
-
バケット名を入力します。
-
バケットの ロケーション と デフォルトのストレージクラス を選びます。
-
Create bucket を選びます。
S3 API を使うには、認証情報 を生成し、Access Key ID と Secret Access Key を取得します。
- Cloudflare ダッシュボード ↗ を開きます。
- Storage & databases > R2 > Overview を選びます。
- API Tokens の Manage を選びます。
- Create Account API token または Create User API token を選びます。
- Object Read & Write 権限を選び、Apply to specific buckets only でアクセスするバケットを選びます。
- Create API Token を選びます。
- Access Key ID と Secret Access Key をコピーします。シークレットは再表示できないため、安全に保管します。
S3 API のエンドポイント URL も必要です。トークン作成後の Create API Token 確認ページの下部か、R2 Overview ページで確認できます。
https://<ACCOUNT_ID>.r2.cloudflarestorage.com次の例では、Python と JavaScript の SDK の使い方を示します。ほかの言語は S3 互換 SDK の例 を参照してください。Go、Java、PHP、Ruby、Rust があります。
-
boto3 ↗ をインストールします。
pip install boto3 -
アップロード用のテストファイルを作成します。
echo 'Hello, R2!' > myfile.txt -
認証情報を使って S3 クライアントを作成し、バケットを操作します。
import boto3 s3 = boto3.client( service_name='s3', # Provide your R2 endpoint: https://<ACCOUNT_ID>.r2.cloudflarestorage.com endpoint_url='https://<ACCOUNT_ID>.r2.cloudflarestorage.com', # Provide your R2 Access Key ID and Secret Access Key aws_access_key_id='<ACCESS_KEY_ID>', aws_secret_access_key='<SECRET_ACCESS_KEY>', region_name='auto', # Required by boto3, not used by R2 ) # Upload a file s3.upload_file('myfile.txt', 'my-bucket', 'myfile.txt') print('Uploaded myfile.txt') # Download a file s3.download_file('my-bucket', 'myfile.txt', 'downloaded.txt') print('Downloaded to downloaded.txt') # List objects response = s3.list_objects_v2(Bucket='my-bucket') for obj in response.get('Contents', []): print(f"Object: {obj['Key']}") -
この内容を
example.pyとして保存し、実行します。python example.pyUploaded myfile.txt Downloaded to downloaded.txt Object: myfile.txt
ほかの操作は boto3 の例 を参照してください。
-
@aws-sdk/client-s3 ↗ パッケージをインストールします。
npm install @aws-sdk/client-s3 -
認証情報を使って S3 クライアントを作成し、バケットを操作します。
import { S3Client, PutObjectCommand, GetObjectCommand, ListObjectsV2Command, } from "@aws-sdk/client-s3"; const s3 = new S3Client({ region: "auto", // Required by AWS SDK, not used by R2 // Provide your R2 endpoint: https://<ACCOUNT_ID>.r2.cloudflarestorage.com endpoint: "https://<ACCOUNT_ID>.r2.cloudflarestorage.com", credentials: { // Provide your R2 Access Key ID and Secret Access Key accessKeyId: "<ACCESS_KEY_ID>", secretAccessKey: "<SECRET_ACCESS_KEY>", }, }); // Upload a file await s3.send( new PutObjectCommand({ Bucket: "my-bucket", Key: "myfile.txt", Body: "Hello, R2!", }), ); console.log("Uploaded myfile.txt"); // Download a file const response = await s3.send( new GetObjectCommand({ Bucket: "my-bucket", Key: "myfile.txt", }), ); const content = await response.Body.transformToString(); console.log("Downloaded:", content); // List objects const list = await s3.send( new ListObjectsV2Command({ Bucket: "my-bucket", }), ); console.log( "Objects:", list.Contents.map((obj) => obj.Key), ); -
この内容を
example.mjsとして保存し、実行します。node example.mjsUploaded myfile.txt Downloaded: Hello, R2! Objects: [ 'myfile.txt' ]
ほかの操作は AWS SDK for JavaScript の例 を参照してください。