はじめに
こんにちは、CCIのkssです。
社内のファイルサーバよりAWS上にあるシステムへファイルの連携を行っておりました。
ファイルサーバのリプレースにともないBoxへ移行することになりました。
そのためファイルの連携を見直す必要となりました。
その際にrcloneを使い、Boxとのシステムとのファイル連携を実施した際の話となります。
Box CLI
はじめはBoxCLIにて、実装を考えてました。 検証を行ったところ、ファイル数が多い場合時間が掛かってしまうことがわかりました。 約2,000ファイル、33GBのファイルをダウンロードするのに約127分掛かりました。
BoxCLI には、同期機能が無かったため、ダウンロード後に差分チェックなどを行う実施する必要がありそうでした。 そのため別の手段として「rclone」を利用しました。
rclone とは
BoxやS3などのクラウドストレージ上のファイルを管理するためのCLI ツールです。
Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces. Over 40 cloud storage products support rclone including S3 object stores, business & consumer file storage services, as well as standard transfer protocols. https://rclone.org/
rclone インストール
インストールについては、yumインストールで行っております。
sudo yum install rclone
Box 認証情報
Boxのアプリや認証方法については公式のドキュメントをご確認下さい。 https://ja.developer.box.com/guides/authentication/client-credentials/
今回はカスタマアプリのクライアント資格情報許可を利用して作業を行いました。
クライアントIDとクライアントシークレットを利用します。また、アクセストークンを発行するためにbox_subject_id
(Enterprise ID
)が必要になりますのでメモしておきます。
box_subject_id
は、Box開発者コンソールから確認出来ます。
rlcone を利用する際にはBoxのアクセストークン発行。
curl -i -X POST "https://api.box.com/oauth2/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id=[CLIENT_ID]" \ -d "client_secret=[CLIENT_SECRET]" \ -d "grant_type=client_credentials" \ -d "box_subject_type=enterprise" \ -d "box_subject_id=[ENTERPRISE_ID]"
https://ja.developer.box.com/guides/authentication/client-credentials/
rclone 認証
rclone 認証情報の対話形式で登録していきます。
rclone config name> box-remote Storage> box client_id> [CLIENT_SECRET] client_secret> [CLIENT_SECRET] box_config_file> access_token> [ACCESS TOKEN] box_sub_type> user n) No (default) y) Yes this is OK (default)
認証情報はデフォルトではユーザ毎に以下のフォルダに格納されます。 ~/.config/rclone/rclone.conf
Box 同期
rclone コマンドのsycn を使って同期を行いました。 コマンドhttps://rclone.org/commands/rclone_sync/
rclone sync source:path dest:path オプション --create-empty-src-dirs:同期時に空のソース ディレクトリを作成する --progress:リアルタイムの転送状況を表示する
実際にBox から EC2へ同期を行い、実行時間の確認
rclone sync box-remote:/folder /home/ec2-user/box-sync/ --progress --create-empty-src-dirs Transferred: 33.400 GiB / 33.400 GiB, 100%, 9.664 MiB/s, ETA 0s Transferred: 1959 / 1959, 100% Elapsed time: 26m34.7s
33GBのファイルが26分で初回同期することが出来ました。 また、差分同期については、約9分で完了しました。
最後に
日次にて同期処理を行うため、バッチを作成しcronにて同期を行いました。
BoxでのAPI利用については契約プランによって月当たりのAPIコール数が決まってますので、 rclone などを使ってBoxのAPIを利用する場合はお気をつけ下さい。