🦔

(小ネタ)Cloudflare R2 で一括でオブジェクトを消す方法

2023/02/12に公開

このハンズオン(WorkersとR2)で気づいたのですが、R2はWrangler経由でオブジェクトの中身を一括削除するコマンドがない模様。(20230212現在)

オブジェクトが残っているとバケットを消せないため、テストなどで少し不便です。このため以下のコードをWorkersで実行することで一括削除が可能です。

export default {
	async fetch(request, env, ctx) {
		const list = await env.MY_BUCKET.list();

  		if (!list) return null;

		console.log(JSON.stringify(list))
		const obj = JSON.parse(JSON.stringify(list));
		const keys = obj.objects.map(o => o.key);
		for (const key of keys) {
			console.log(key)
			await env.MY_BUCKET.delete(key); 
		}
		return new Response("Deleted!");
	},
};

なお何の確認もなく冷酷にすべてのオブジェクトを消しますので気を付けてください。この操作は破壊的であり元に戻ることはありません。

LISTコマンドは1000件の上限があります。オブジェクト数が1000件を超える場合は複数回実行するなりソースを改修するなりが必要です。

Discussion