メインコンテンツまでスキップ

EC2上の外部RcloneによるAWS S3とCloudflare R2間の高性能ファイル転送

現代のチームは複数のオブジェクトストレージプラットフォームを併用することが多く、大規模なデータセットをローカルデスクトップ経由で転送する際に、帯域幅・レイテンシ・データ送信料が重大なボトルネックになることにすぐ気づきます。Rcloneをクラウドインスタンス上で直接実行し、RcloneViewで制御することで、大量のトラフィックをクラウドの高速バックボーンに流し、ノートPCをデータ経路から切り離すことができます。

transfer files between aws s3 and cloudflare r2 with external rclone

以下の手順は「EC2経由でAWS S3とGoogle Driveを同期する」ガイドの構成を踏襲し、S3 ↔ R2のシナリオに拡張したものです。この手順では以下を行います。

  1. AWS EC2サーバー上でRcloneをリモート制御デーモン(rcd)として起動する。
  2. 別のRcloneViewウィンドウを開き、その外部Rcloneに接続する。
  3. EC2上でホストされているRclone内にAWS S3とCloudflare R2のリモートを追加する。
  4. ローカルの帯域幅制約を受けずに、完全にクラウド間で転送・同期・ジョブのスケジュールを行う。
AWSデータ転送料金

同一アベイラビリティーゾーン内のトラフィックは無料ですが、AZ間およびインターネットへのデータ送信には料金が発生します(一般的にAZ間で$0.02/GB、インターネットへは$0.09/GB)。 参照: AWS料金 – データ転送

外部Rcloneを使う理由

ローカル組み込みRcloneEC2上の外部Rclone
トラフィック経路: S3 → ローカルPC → R2 — 二重ホップで、自宅のアップロード速度に律速される。トラフィック経路: S3 → EC2 → R2 — クラウドバックボーン内の単一ホップで、多くの場合10〜25Gbit/sを実現。
自宅ISPの上限や非対称帯域が大規模移行を遅くする。はるかに高いスループット。ローカル側の上限なし。
ローカルのCPU・RAMがすべてのバイトをハッシュ計算する必要がある。CPU処理をクラウドVMにオフロードでき、必要に応じて大きめのインスタンスサイズを選択可能。
NAT/ファイアウォールの問題が発生する可能性がある。ポート5572を開放したパブリックIP(またはSSH経由のトンネル)を使用。

パート1. EC2にRcloneをデプロイする(外部Rclone)

  1. Ubuntu EC2インスタンスを起動する(マルチスレッドアップロードにはt3.medium以上を推奨)。
  2. セキュリティグループでTCP 5572を開放する(またはSSHトンネルを使用)。
  3. Rcloneをインストール:
curl https://rclone.org/install.sh | sudo bash
  1. Basic認証付きでrcdデーモンを実行:
rclone rcd --rc-addr=0.0.0.0:5572 --rc-user=admin --rc-pass=admin --log-level INFO

--rc-addrフラグは、RcloneViewが呼び出すためのHTTPエンドポイントを公開します。

  1. ノートPCからヘルスチェックを行う:
   curl -u admin:admin -X POST "http://<EC2-IP or DNS-NAME>:5572/rc/noop"

JSONの{}レスポンスが返れば、デーモンが正常にリッスンしていることが確認できます。

👉 詳しくはこちら: AWS EC2サーバーでRcloneを実行する方法

パート2. 新しいRcloneViewウィンドウを開く

接続を整理しやすくするため、RcloneViewでは各ウィンドウが独自のRcloneエンジンで動作できます。

  1. RcloneViewを起動する
  2. Homeメニューの**New Window**ボタンをクリックする。
  3. 新しいアプリケーションウィンドウが開きます。このインスタンスはメインウィンドウとは独立しており、独自の接続コンテキストを保持します。

📌 次のステップで、このウィンドウを外部Rclone(EC2)に接続します。

👉 詳しくはこちら: New Windowで複数のRclone接続を使う

パート3. EC2上のRcloneに接続する

新しく開いたウィンドウで、以下の手順に従ってEC2上の外部Rcloneに接続します。

  1. 新しいウィンドウで、設定 → Connection Managerを開く。
  2. New Connectionをクリックし、フォームに入力する:
項目
Display Nameec2-rclone
Remote Addresshttp://<EC2-IP or DNS-NAME>:5572
Usernameadmin
Passwordadmin
  1. **Test Connection**をクリックして設定を確認する。 接続成功のレスポンスが表示されるはずです。
  2. テストに合格したら**Saveをクリックし、続けてConnect**をクリックする。
  3. これでEC2上で実行中の外部Rcloneインスタンスに接続され、ウィンドウ上部に接続状態が表示されます。
Create EC2 connectionConnected to EC2

パート4. AWS S3とCloudflare R2のリモートを追加する(外部Rclone経由)

➕ AWS S3リモートを追加する

  1. **Remoteタブに移動し、+ New Remote**をクリックする。
  2. ProviderタブでAmazon S3を選択する。
  3. **Options**タブで:
    • providerAWSに設定
    • Access Key IDSecret Access Keyを入力
    • リージョンとエンドポイントは、カスタマイズしない限りデフォルトのままで構いません
  4. Saveをクリックして設定を完了する。

👉 詳しくはこちら:

➕ Cloudflare R2リモートを追加する

  1. 再度、Remoteタブで**+ New Remote**をクリックする。
  2. ProviderタブでS3を選択する(そう、また「S3」です。R2はS3プロトコルを使用します)。
  3. **Options**タブで:
    • providerCloudflareに設定
    • Cloudflare R2 Access KeySecret Keyを入力
    • endpointhttps://<accountid>.r2.cloudflarestorage.comに設定
  4. SaveをクリックしてR2リモートの設定を完了する。

👉 詳しくはこちら:

open aws s3 and cloudflare r2 remotes

パート5. AWS S3とCloudflare R2間でファイルを同期する

🔁 方法A: SyncまたはJobを使う

  1. Explorerペインで、同期したいCloudflare R2フォルダとAWS S3フォルダを選択する。
  2. homeメニューの**Sync**ボタンをクリックする。
  3. 同期オプション(片方向または双方向)を選択し、実行内容をプレビューして確認する。
  4. RcloneViewが同期を実行し、**transfer**ログタブに進捗を表示します。
  • 繰り返しまたはスケジュール転送を行う場合:
    1. Syncモーダルで**Save to Jobsをクリックするか、Job Manager** → **Add Job**を開く。
    2. 転送元、転送先、オプションを設定する。
    3. 保存して手動実行するか、スケジュールを設定する。

👉 詳しくはこちら:


⏰ 方法B: 定期的な同期ジョブをスケジュールする

  1. Explorerペインで、同期を維持したいCloudflare R2AWS S3のフォルダを選択する。
  2. **HomeまたはRemoteメニューからJob Managerを開き、Add Job**をクリックする。
  3. 転送元と転送先を確認する。
  4. スケジュールエディタを使ってジョブの実行タイミングを設定する。保存前にスケジュールをプレビューする。
  5. 保存してスケジュール済みジョブを有効化する。

RcloneViewは指定した時刻に同期を実行します。実行の詳細やログは**Job History**で確認でき、完了時には通知を受け取れます。

👉 詳しくはこちら: ジョブのスケジュールと実行

⚡ パフォーマンスチューニング・チートシート

パラメータ推奨値影響度理由
--s3-chunk-size50M*****パーツを大きくすることでR2上のClass-Aオペレーションを減らし、速度を向上させます1
--s3-upload-concurrency32–64***R2向けのマルチパートスレッド数を増やします。
--transfers32–64*並列オブジェクトアップロードにより、10Gbitリンクでのスループットが向上します1
--s3-disable-checksum外部でチェックサムを照合する場合のみ追加****パートごとのハッシュ計算というボトルネックをスキップします—注意して使用してください1

📈 実環境でのチューニング結果

クラウド間転送のパフォーマンスを最大化するため、以下のようにCloudflare R2リモートの設定をチューニングしました。

あくまで実験結果です

RcloneViewはRcloneのGUIフロントエンドです。ここで紹介するパフォーマンスチューニングのヒントとベンチマークは、コミュニティの投稿(Cloudflare R2へのマルチパートアップロード速度を最大化する方法)を参考にした実験的なテストに基づくものであり、お使いのクラウド環境、リージョン、ネットワーク状況、ユースケースによって結果が異なる場合があります。

これらの結果は保証されるものではなく、あくまで参考としてご利用ください。

🔧 R2リモート設定の更新方法

対象のR2リモートの設定を変更するには:

  1. Explorerペインで、Cloudflare R2リモートの横にある歯車アイコンをクリックするか、Remote Manager → Editに移動する。
  2. **OptionsタブでShow advanced options**をクリックする。
  3. 以下の値を設定する:
    • chunk_size = 50Mi
    • upload_concurrency = 32
  4. 変更を保存する。

disable_checksumオプションも転送速度に大きな影響を与える可能性がありますが、今回のテストでは、ファイル転送時の整合性チェックを維持するためデフォルト値(false)のままにしています。

chunk size and upload concurrency settings

📉 ベースライン: デフォルト設定でのパフォーマンス

デフォルト設定を使用した場合:

- chunk_size = 5Mi 
- upload_concurrency = 4.

EC2上のRclone経由でAWS S3からCloudflare R2へ大容量ファイルを移動した際、転送速度は約114 MB/sでした。

transfer speed with default options

🚀 チューニング後: 4倍のパフォーマンス向上

Cloudflare R2リモートを最適化された設定で更新した結果:

- chunk_size = 50Mi 
- upload_concurrency = 32

disable_checksum = falseを維持したまま、約440 MB/sの速度を達成しました—デフォルトと比較して4倍の向上です。

high transfer speed with chunk size and upload concurrency

✅ まとめ

クラウド間転送は、もはやノートPC経由でのろのろと進める必要はありません。重い処理をEC2上の外部Rcloneデーモンにオフロードすることで、回線速度に近い移行スピードを実現し、想定外のAWSデータ送信料を回避しながら、RcloneView上で完全にビジュアルなワークフローを維持できます。自信を持って次のS3 ↔ R2移行を始め、ローカルのボトルネックにさよならしましょう。


🔗 関連ガイド

対応クラウドプロバイダー

Local Files
WebDAV
FTP
SFTP
HTTP
SMB / CIFS
Google Drive
Google Photos
Google Cloud Storage
OneDrive
Dropbox
Box
MS Azure Blob
MS File Storage
S3 Compatible
Amazon S3
pCloud
Wasabi
Mega
Backblaze B2
Cloudflare R2
Alibaba OSS
Ceph
Swift (OpenStack)
IBM Cloud Object Storage
Oracle Cloud Object Storage
IDrive e2
MinIO
Storj
DigitalOcean Spaces