Workers ではエッジでコードを実行できます。R2 バケットを Worker にバインドすると、Workers API でオブジェクトを直接読み書きできます。
バケットは 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 を選びます。
-
新しい Worker プロジェクトを作成します。
npm create cloudflare@latest -- r2-workeryarn create cloudflare r2-workerpnpm create cloudflare@latest r2-workerプロンプトでは、テンプレートとして Hello World example と JavaScript(または TypeScript)を選びます。
-
プロジェクトディレクトリに移動します。
cd r2-worker -
Wrangler 設定ファイルに R2 バインドを追加します。
my-bucketは自分のバケット名に置き換えます。{ "r2_buckets": [ { "binding": "MY_BUCKET", "bucket_name": "my-bucket" } ] }[[r2_buckets]] binding = "MY_BUCKET" bucket_name = "my-bucket" -
(任意)TypeScript を使っている場合は、型を再生成します。
npx wrangler types
バインドを使ってバケットを操作します。この例では、URL パスに基づいてオブジェクトを保存および取得します。
export default {
async fetch(request, env) {
// Get the object key from the URL path
// For example: /images/cat.png → images/cat.png
const url = new URL(request.url);
const key = url.pathname.slice(1);
// PUT: Store the request body in R2
if (request.method === "PUT") {
await env.MY_BUCKET.put(key, request.body);
return new Response(`Put ${key} successfully!`);
}
// GET: Retrieve the object from R2
const object = await env.MY_BUCKET.get(key);
if (object === null) {
return new Response("Object not found", { status: 404 });
}
return new Response(object.body);
},
};export default {
async fetch(request, env): Promise<Response> {
// Get the object key from the URL path
// For example: /images/cat.png → images/cat.png
const url = new URL(request.url);
const key = url.pathname.slice(1);
// PUT: Store the request body in R2
if (request.method === "PUT") {
await env.MY_BUCKET.put(key, request.body);
return new Response(`Put ${key} successfully!`);
}
// GET: Retrieve the object from R2
const object = await env.MY_BUCKET.get(key);
if (object === null) {
return new Response("Object not found", { status: 404 });
}
return new Response(object.body);
},
} satisfies ExportedHandler<Env>;-
Worker をローカルでテストします。
npx wrangler dev -
開発サーバーが起動したら、オブジェクトの保存と取得をテストします。
# Store an object curl -X PUT http://localhost:8787/my-file.txt -d 'Hello, R2!' # Retrieve the object curl http://localhost:8787/my-file.txt -
本番へデプロイします。
npx wrangler deploy -
デプロイ後、Wrangler は Worker の URL を出力します(例:
https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev)。オブジェクトの保存と取得をテストします。# Store an object curl -X PUT https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev/my-file.txt -d 'Hello, R2!' # Retrieve the object curl https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev/my-file.txt
完全な API リファレンスは、Workers R2 API のドキュメント を参照してください。