📝

(Cloudflare R2)バケット内のオブジェクトを一括ですべて削除する方法

2023/07/13に公開

結論

記事の執筆時点ではダッシュボードから一括削除する機能は提供されていません。そこで、AWS CLIを使って削除します。

次のコマンドを実行するとバケット内のオブジェクトがすべて削除されます。削除対象のオブジェクトを確認したら、--dryrunフラグを外して再実行してください。

$ aws s3 rm 's3://バケット名' \
  --profile 'r2' \
  --endpoint-url 'Cloudflareのダッシュボードに表示されているURL' \
  --dryrun \
  --recursive

注意点

--endpoint-urlフラグに渡す値はCloudflareのダッシュボードに表示されています。Home→R2→バケット名と進むと、https://アカウントID.r2.cloudflarestorage.com/バケット名という形式のURLが見つかるはずです。

ただし、このURLをそのまま使うとs3 rmは失敗します。URL末尾の/バケット名は除去してください。

(おまけ)認証情報を設定する手順

認証情報の設定は以下の手順で行います。

  1. Cloudflareのダッシュボードを開き、Home→R2→Manage R2 API Tokensと進みます。
  2. Create API tokenボタンを押します。
  3. 権限は「Edit: Allow edit access of all objects and List, Write, and Delete operations」を選びます。
  4. 有効期限を設定してください。万が一、作業中にトークンが漏洩した場合に備えて最短の有効期限を設定することをお勧めします。
  5. Client IP Address Filteringは空欄で構いません。
  6. Create API Tokenボタンを押します。
  7. Access Key IDとSecret Access Keyが作成されます。この画面を閉じると二度と閲覧できなくなるのでメモします。
  8. Finishボタンを押して完了です。

準備は整いました。次のコマンドを実行して認証情報を設定しましょう。

$ aws configure --profile 'r2'

コマンドを実行すると次のような入力が求められます。

AWS Access Key ID [None]: <先ほどメモしたAccess Key ID>
AWS Secret Access Key [None]: <先ほどメモしたSecret Access Key>
Default region name [None]:
Default output format [None]: json

以上で認証情報の設定は完了です。Default regionは空欄で構いません。

認証エラーが発生する場合の確認事項

AWS CLIの認証情報は~/.aws/configファイルと~/.aws/credentialsファイルに保存されます。内容は次のとおりです。

~/.aws/configファイル

[profile r2]
output = json

~/.aws/credentialsファイル

[r2]
aws_access_key_id = aaa
aws_secret_access_key = bbb

認証エラーが発生する場合、~/.aws/credentialsファイルの内容を確認してみてください。値は'"で囲まず、そのまま書き込まれているのが正しい状態です。

(おまけ)Dockerを使ってawsコマンドを実行する

開発用マシンの環境を汚したくない場合、Dockerを利用してAWS CLIを実行するのがお勧めです。AWSの認証情報とCloudflare R2を操作するための認証情報を隔離する場合にも便利です。

まずはカレントディレクトリに.awsディレクトリを作成します。

$ mkdir .aws

次のコマンドを実行すると、カレントディレクトリの.awsに認証情報が保存されます。

$ docker run --rm -it \
  --volume "$PWD/.aws:/root/.aws" \
  amazon/aws-cli \
  configure --profile 'r2'

オブジェクトの削除コマンドは次のとおりです。

$ docker run --rm -it \
  --volume "$PWD/.aws:/root/.aws" \
  amazon/aws-cli \
  s3 rm 's3://バケット名' \
  --profile r2 \
  --endpoint-url 'Cloudflareのダッシュボードに表示されているURL' \
  --dryrun \
  --recursive

参考資料お

  1. [Amazon S3とAPIの互換性があるCloudflare R2をAWS CLIから使ってみる - DevelopersIO]((https://dev.classmethod.jp/articles/using-cloudflare-r2-compatible-with-amazon-s3-api-from-aws-cli/)

Discussion