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