構成
以下のような構成で、「rclone」というプログラムを使ってデータをコピーしてみます。
今回は「rclone」を使うための Linux サーバーを IBM Cloud 上に用意しました。
IBM Cloud Object Storage では、Swift と S3 に関わらず、Private Endpoint を提供しています。
Private 経由では、ネットワーク通信量に対する課金は発生しない ので、安心してください。
Swift API と S3 API の違いは下記リンクを参照してください。
https://console.bluemix.net/catalog/infrastructure/object-storage-group
認証情報の取得
接続に使う認証情報をポータルから取得しておきましょう。
Swift API
以下の3つの情報を使います。
- Private Endpoint
- Username
- API Key (Password)
S3 API
以下の3つの情報を使います。
- Private Endpoint
- Access Key ID
- Secret Access Key
rclone を Linux サーバーにインストール
「unzip」等がないと、「None of the supported tools for extracting zip archives (unzip 7z) were found. Please install one of them and try again.」と怒られるので、入れておきます。
「rclone」のインストール自体は、2行目のコマンドだけなので非常に簡単です。
yum install unzip -y
curl https://rclone.org/install.sh | sudo bash
rclone の設定
rclone config
のコマンドで設定ファイルを生成できるので、そこから適当なファイルをつくります。
設定ファイルは ~/.config/rclone.conf
に保存されるので、以下の設定として書き直します。
- 使いたいリージョンによって、適宜 Endpoint を変更します
- S3 API の設定では、Endpointの設定に加えて「region = other-v4-signature」とします
- S3 API の設定では、「location_constraint」のパラメータで以下の場所を指定します(https://rclone.org/s3/)
- us-standard / us-vault / us-cold / us-flex
- us-east-standard / us-east-vault / us-east-cold / us-east-flex
- us-south-standard / us-south-vault / us-south-cold / us-south-flex
- eu-standard / eu-vault / eu-cold / eu-flex
- ap-standard / ap-vault / ap-cold / ap-flex
[SWIFT]
type = swift
env_auth = false
user = IBMxxxxxx:xxxxxx
key = xxxxxx
auth = https://tok02.objectstorage.service.networklayer.com/auth/v1.0/
user_id =
domain =
tenant =
tenant_id =
tenant_domain =
region =
storage_url =
auth_token =
endpoint_type = private
[COS-TOK-AP]
type = s3
env_auth = false
access_key_id = xxxxxx
secret_access_key = xxxxxx
region = other-v4-signature
endpoint = s3.tok-ap-geo.objectstorage.service.networklayer.com
location_constraint = ap-flex
acl = private
server_side_encryption =
storage_class =
#設定確認
以下のコマンドで、コンテナやバケットのリストが出てくれば、問題なく設定されてることが確認できます。
rclone lsd SWIFT:
rclone lsd COS-TOK-AP:
[root@khayama-test rclone]# rclone lsd COS-TOK-AP:
-1 2017-08-09 06:50:19 -1 apictest
-1 2018-03-22 12:58:23 -1 khayama-test2
-1 2018-03-28 13:09:53 -1 khayama-test3
#ドライラン
以下のコマンドで、どのファイルがコピーされる対象となっているか、確認できます。
コピー先となる S3 API 側のバケットを新規に作る場合は、バケット名が全ユーザーの中で一意である必要ありますので、注意します。
rclone --dry-run copy SWIFT:khayama COS-TOK-AP:khayama-test4
[root@khayama-test rclone]# rclone --dry-run copy SWIFT:khayama COS-TOK-AP:khayama-test4
2018/04/03 03:49:58 NOTICE: vyatta-vrouter-5.2R5S3_B_amd64.iso: Not copying as --dry-run
オブジェクトストレージ間のコピー
以下のコマンドで実施できます。
rclone -v copy SWIFT:khayama COS-TOK-AP:khayama-test4
100 Mbps の Linux サーバーで実行した場合、これくらいの速度感でした。
[root@khayama-test rclone]# rclone -v copy SWIFT:khayama COS-TOK-AP:khayama-test4
2018/04/03 04:09:49 INFO : S3 bucket khayama-test4: Modify window is 1ns
2018/04/03 04:09:50 INFO : S3 bucket khayama-test4: Waiting for checks to finish
2018/04/03 04:09:50 INFO : S3 bucket khayama-test4: Waiting for transfers to finish
2018/04/03 04:10:26 INFO : vyatta-vrouter-5.2R5S3_B_amd64.iso: Copied (new)
2018/04/03 04:10:26 INFO :
Transferred: 335 MBytes (9.108 MBytes/s)
Errors: 0
Checks: 0
Transferred: 1
Elapsed time: 36.7s
このコマンドでは、ファイルはコピーされるだけで、削除はされません。
ターゲット側の S3 API の設定で「location_constraint」のパラメータを「ap-standard / ap-vault / ap-cold / ap-flex」の中で変えてみると、反映されていることがわかります。
#さいごに
「rclone」は「rsync」のようなコマンドが使え、たとえばオブジェクトストレージ間のデータ同期、ローカルPC-オブジェクトストレージ間のデータ同期にも有効です。
ぜひ使ってみてください。