rcloneを用いてCloudflare R2 のバケットに大容量ファイルをアップロードしました。Cloudflare R2 は、S3互換APIを備えたストレージサービスで、10GB/月までの保存と100万回までのクラスA操作が無料で利用可能です。さらに、外部へのダウンロード(egress)も完全無料で、r2.dev サブドメインを用いた限定公開URLの発行も簡単に行えます。これにより、コストを抑えつつ柔軟なファイル共有が可能です。

rcloneのインストール・設定

1. rclone のインストール

curl https://rclone.org/install.sh | sudo bash

2. rclone configの実行

rclone configを最初に実行して、リモートストレージとの接続設定(=リモートの定義)を行います。 rcloneは、多種多様なクラウドストレージに対応していますが、今回はCloudflare R2を使用するリモート設定を作成します。

rclone configを実行して、以降プロンプトに従って順番に設定します。

e/n/s/q> n
name> cloudflare
Storage> s3
provider> 6 (Cloudflare R2)
env_auth> false
access_key_id> (CloudflareのAPIトークン)
secret_access_key> (CloudflareのAPIトークン)
endpoint> https://<アカウントID>.r2.cloudflarestorage.com
region>
location_constraint>
acl>

これで、cloudflareという名前のリモート設定が作成されます。

アップロード実行

リモート設定ができたら、以下のコマンドを実行してアップロードします。 Cloudflare R2 に rclone を使用してファイルをアップロードする際、–s3-no-check-bucket フラグを指定することが推奨されます。R2 が API 経由でのバケット作成をサポートしていないため、 rclone がデフォルトで行うバケットの存在確認や作成の試行が失敗し、アクセス拒否(403 Forbidden)エラーとなる可能性があるためです。

rclone copy largefile.zip cloudflare:bucketname --s3-no-check-bucket -P

👉チャンク分割の前処理
約50GBのファイルでは、rcloneが入力ファイルを小さいチャンクに分割するため、コマンド実施後の最初の数分間、「0B」表示のまま動かなく見えることがあります。
  • rcloneでファイルをアップロードした結果(-vv で詳細表示) アップロード結果

  • 50GBのファイルアップロード時のオペレーション回数 ファイルアップロード時のオペレーション

ファイルの削除

利用が終わったら、ファイルを削除します。

rclone delete cloudflare:temp-beautiful-share-0001/largefile.zip --s3-no-check-bucket

時間があいてしまったのでうろ覚えです。。 アップロード前にチャンク分割を行うとのことで、アップロードがなかなか始まらず焦りました。

👉 RCLONE - documentation