Object Storage

Cloud(n) ObjectStorageマイグレーションツール

動作環境

以下の環境で動作確認をしておりますが、環境、依存関係について厳密なチェックは行っておりませんので、動作を保証するものではありません。また、本スクリプトの利用、および、その結果については、サポート対象外になります。利用者の判断/責任のもとでご利用下さい。

• CentOS 7.5以降
• Ubuntu 18.04以降

注意点

• Dockerがインストールされていない場合、Yumまたはapt-getが走る可能性があります。
• オブジェクトのダウンロードを行う際は、保存先の空き容量をご確認の上、実施してください。
• 事前にECL2.0、またはWebARENAにてWasabiのサービスを開始してください。
• WasabiはBucket名に使用できる文字が限られているため、アップロードの前にご確認ください。

事前準備

マイグレーション初期設定を行う前に以下の情報が必要となりますので、ご確認ください。

Cloud(n)

- アカウント名
- Access Key ID
- Secret Key

Wasabi

- Access Key ID
- Secret Key
- Endpoint URL
・東京リージョンの場合: https://s3.ap-northeast-1-ntt.wasabisys.com/
・その他リージョンについては こちら をご参照ください。

導入手順

a) install_s3operation.shのダウンロード

install_s3operation.shをダウンロードし、 作業ディレクトリに配置します。 以降の作業は、install_s3operation.shを配置した作業ディレクトリをカレントディレクトリとして実施します。

# sudo curl -o install_s3operation.sh 'https://s3operation.str.cloudn-service.com/install_s3operation.sh'

b) 初期設定

下記のように初期設定が必要となりますので、アカウント名、APIアクセスキー、秘密鍵、 などの情報を入れてください。

# bash install_s3operation.sh
----------------------------------------------------------------------------------------------------------------
Please enter your cloud(n) account name. (example: cln100000000)
----------------------------------------------------------------------------------------------------------------
==> cln100000000


----------------------------------------------------------------------------------------------------------------
Please enter Access Key ID for cloud(n) Object Storage
----------------------------------------------------------------------------------------------------------------
==> xxxxxxxxxxxxx


----------------------------------------------------------------------------------------------------------------
Please enter Secret Key for cloud(n) Object Storage
----------------------------------------------------------------------------------------------------------------
==> XXXXXXXXXXXXXX


----------------------------------------------------------------------------------------------------------------
Please enter absolute path of a directory to download objects. (recommend using: /mnt/downloads)
----------------------------------------------------------------------------------------------------------------
==> /mnt/downloads


----------------------------------------------------------------------------------------------------------------
Please enter endpoint URL for the new Object Storage, such as Wasabi. (example: https://s3.ap-northeast-1-ntt.wasabisys.com)
----------------------------------------------------------------------------------------------------------------
==> https://s3.ap-northeast-1-ntt.wasabisys.com


----------------------------------------------------------------------------------------------------------------
Please enter Access Key ID for the new Object Storage, such as Wasabi.
----------------------------------------------------------------------------------------------------------------
==> yyyyyyyyyyyyyy


----------------------------------------------------------------------------------------------------------------
Please enter Secret Key for the new Object Storage, such as Wasabi.
----------------------------------------------------------------------------------------------------------------
==> YYYYYYYYYYYYYYYYYYY

初期設定が終わりましたら、以下のように確認を行ってください。

# sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
5a6ec5703452        s3operation-image   "/bin/bash /opt/scri…"   10 minutes ago      Up 10 minutes

上記のように作成したコンテナが起動していることが確認できれば初期設定完了となります。

利用手順

a) バケット一覧の取得

以下の通り、コマンドを実行すると、指定したアカウントで保持しているバケット一覧が表示されます。

# sudo docker exec s3operation s3operation.py listBuckets

注釈

パケットが表示されない場合、account name、Access Key ID若しくはSecret Keyが誤っている可能性がありますので、下記手順を実施後、再度初期設定から実施してください。

# sudo docker stop s3operation
# sudo docker rm s3operation
# sudo docker rmi s3operation-image

b) オブジェクト一覧の取得

Cloud(n) ObjectStorageのbucket内のobjectリストを出力します。

# sudo docker exec s3operation s3operation.py listObjects {BucketName} {Option}

Option: --prefix [PREFIX], --marker [MARKER], --count [COUNT]

以下のオプションを指定して、範囲を絞ることができます。 オプションは組み合わせて実行可能です。

–count N : 最大 N 件を対象とする

–prefix dirA/dirB/ : オブジェクト名(パス)が「dirA/dirB/」で始まるものを対象とする

–marker dirA/dirB/obj1 : オブジェクト名(パス)が「dirA/dirB/obj1」よりも、 名前順で後ろのオブジェクトを対象とする

注意

全ての操作においてprefixやmarkerオプションを使用する際は、オブジェクト名にスペースが入っている場合、シングルクォーテーションで括って指定する必要があります。

c) オブジェクトのダウンロード

Cloud(n) ObjectStorageのbucket内のobjectをダウンロードします。

# sudo docker exec s3operation s3operation.py downloadObjects {BucketName} {Option}

Option: --prefix [PREFIX], --marker [MARKER], --count [COUNT], --progress

–count N : 最大 N 件を対象とする

–prefix dirA/dirB/ : オブジェクト名(パス)が「dirA/dirB/」で始まるものを対象とする

–marker dirA/dirB/obj1 : オブジェクト名(パス)が「dirA/dirB/obj1」よりも、 名前順で後ろのオブジェクトを対象とする

–progress : 進捗状況を表示する

注意

ObjectStorageの負荷状況によって、ダウンロードが失敗する可能性があります。 失敗した場合はダウンロード途中で失敗したfileを削除し、再度ダウンロードを実施してください。

d) アップロード可能ファイルリスト表示

マイグレ先のWasabiオブジェクトストレージへアップロード可能なファイルのリストを表示します。

# sudo docker exec s3operation s3operation.py listBaseFiles {BucketName} {Option}

Option: --prefix [PREFIX], --marker [MARKER], --count [COUNT]

–count N : 最大 N 件を対象とする

–prefix /dirA/dirB/ : オブジェクト名(パス)が「dirA/dirB/」で始まるものを対象とする

–marker /dirA/dirB/obj1 : オブジェクト名(パス)が「dirA/dirB/obj1」よりも、 名前順で後ろのオブジェクトを対象とする

注意

・ここでのBucketNameは任意です。指定しない場合は、download directory 配下の全バケット分のファイルを表示します。

・オブジェクトが無いディレクトリについては、アップロード対象外になります。

e) ファイルのアップロード

マイグレ先のWasabiオブジェクトストレージへファイルをアップロードします。

(アップロード前に使用不可文字がBucket名に使われていないかご確認ください)

# sudo docker exec s3operation s3operation.py uploadObjects {BucketName} {Option}

Option: --prefix [PREFIX], --marker [MARKER], --count [COUNT], --progress, --file [FILE NAME]

–count N : 最大 N 件を対象とする

–prefix dirA/dirB/ : オブジェクト名(パス)が「dirA/dirB/」で始まるものを対象とする

–marker dirA/dirB/obj1 : オブジェクト名(パス)が「dirA/dirB/obj1」よりも、 名前順で後ろのオブジェクトを対象とする

–progress : 進捗状況を表示する

–file [FILE NAME]: 特定のファイルアップロードしたい場合、ファイルを指定することができます
(ファイルは絶対パスで指定し、BucketName のdirectory配下に存在する必要があります。)

注意

WasabiはBucket名にいくつか制限があります、Bucket名の命名規則は以下の通りとなります。

1.半角英語(小文字):a-z

2.半角数字:0-9

3.ハイフン: -

4.最初の文字は半角英語(小文字)で始まること

5.3〜63文字以内であり、ユニークであること

※Bucket名に半角英語(大文字)、アンダーバーを使用している場合はアップロード前にBucket名を変更してください。

 例)Bucket名修正が必要な場合

Bucket(x) -> bucket(o) : 大文字を小文字に修正

NG_sample(x) -> ng-sample(o) : 大文字とアンダーバーを小文字とハイフンに修正

以下、Linux環境でのBucket名変更例です。

・Bucketをダウンロード
$ sudo docker exec s3operation s3operation.py downloadObjects Bucket_Name
・Bucket名を確認
$ ls /mnt/downloads/
Bucket_Name
・Bucket名を修正(大文字とアンダーバーを使用可能文字に修正)
$ sudo mv /mnt/downloads/Bucket_Name /mnt/downloads/bucket-name
$ ls /mnt/downloads
bucket-name
・アップロード
$ sudo docker exec s3operation s3operation.py uploadObjects bucket-name

注釈

・Wasabiオブジェクトストレージへアップロード後のリスト表示は、S3APIなどで確認できます。

f) オブジェクトの削除

危険

一度オブジェクトの削除を行うと戻すことができなくなりますのでご注意ください。

Cloud(n) ObjectStorageのbucket内のobjectの削除を行います。

# sudo docker exec s3operation s3operation.py deleteObjects {BucketName} {Option}

Option: --prefix [PREFIX], --marker [MARKER], --count [COUNT], --progress

–count N : 最大 N 件を対象とする

–prefix dirA/dirB/ : オブジェクト名(パス)が「dirA/dirB/」で始まるものを対象とする

–marker dirA/dirB/obj1 : オブジェクト名(パス)が「dirA/dirB/obj1」よりも、 名前順で後ろのオブジェクトを対象とする

–progress : 進捗状況を表示する

一覧取得により、オプションを試し、削除したいオブジェクトのみを指定できることを確認してか ら削除コマンドを実行することをおすすめします。

Cloud(n) ObjectStorageマイグレーションツール改定履歴

  1. 2020.06.05
マイグレーションツールの利便性向上のため、以下の変更を行いました。

[改訂前]
- 特定のオブジェクトのダウンロードが途中で失敗した際、自動リトライに失敗する場合があった。
- 自動リトライに失敗した場合、対象のオブジェクトに対し、最初から再度ダウンロードする必要があった。

[改定後]
- 自動で20回までリトライが可能になった。
- リトライ実行日時が標準出力されるようになった。
- リトライ時は、最初からではなく失敗した点の続きからダウンロードされるようになった。