rcloneを使用してAmazonS3からDigitalOceanSpacesに移行する方法
序章
DigitalOcean Spacesは、大量のデータを簡単かつ費用効果の高い方法で保存および提供できるように設計されたオブジェクトストレージサービスです。 以前に他のオブジェクトストレージサービスに依存していた場合は、データをSpacesに移行することが最初のタスクの1つになる可能性があります。
このガイドでは、rcloneユーティリティを使用してAmazonのS3ブロックストレージサービスからDigitalOceanSpacesにデータを移行する方法について説明します。 rclone
のインストール方法、両方のストレージサービスにアクセスするために使用する構成設定、およびファイルを同期してSpaces内での整合性を検証するために使用できるコマンドについて説明します。
APIキーの作成とバケットプロパティの検索
オブジェクトをSpacesにコピーするためのrclone
のインストールと構成を開始する前に、AmazonS3およびDigitalOceanSpacesアカウントに関する情報が必要になります。 ツールが使用できる両方のサービスのAPIキーのセットが必要になり、バケットの地域と場所の制約値を知る必要があります。
DigitalOceanSpacesAPIキーの生成とAPIエンドポイントの検索
DigitalOcean Spaces APIキーを作成するには、 DigitalOcean Spaces and APIKeyチュートリアルの「アクセスキーの作成」セクションに従ってください。
アカウントにアクセスするようにrclone
を構成できるように、アクセスキーIDと秘密キーを保存します。
次に、適切なAPIエンドポイントを見つける必要があります。 オブジェクトの転送先のDigitalOceanスペースを既に作成している場合は、スペースを選択して設定タブを表示することにより、DigitalOceanコントロールパネル内でスペースのエンドポイントを表示できます。
スペースをまだ作成していない場合、rclone
は、コピープロセスの一部として選択したスペースを自動的に作成できます。 その場合のエンドポイントは、使用するSpacesリージョンの後に、.digitaloceanspaces.com
が続きます。 スペースの作成ページで選択オプションを表示すると、DigitalOceanコントロールパネルでスペースに使用できる領域を見つけることができます。 この記事の執筆時点では、「nyc3」領域のみが使用可能です(エンドポイントはnyc3.digitaloceanspaces.com
)。
AmazonS3APIキーの生成
S3アセットを管理する権限を持つAmazonAPIキーをまだ持っていない場合は、ここでそれらを生成する必要があります。 AWSマネジメントコンソールで、アカウント名をクリックし、ドロップダウンメニューから My SecurityCredentialsを選択します。
次に、左側のメニューでユーザーを選択し、ユーザーの追加ボタンをクリックします。
ユーザー名を入力し、アクセスタイプセクションでプログラムアクセスを選択します。 次へ:権限ボタンをクリックして続行します。
次のページで、上部にある既存のポリシーを直接アタッチするオプションを選択し、ポリシータイプフィルターにs3readと入力します。 AmazonS3ReadOnlyAccess ポリシーボックスをオンにしてから、次へ:レビューボタンをクリックして続行します。
次のページでユーザーの詳細を確認し、準備ができたらユーザーの作成ボタンをクリックします。
最後のページに、新しいユーザーの資格情報が表示されます。 シークレットアクセスキー列の下にあるShowリンクをクリックして、資格情報を表示します。
アクセスキーIDとシークレットアクセスキーを安全な場所にコピーして、これらの資格情報を使用するようにrclone
を構成できるようにします。 Download .csv ボタンをクリックして、資格情報をコンピューターに保存することもできます。
AmazonS3バケットのリージョンと場所の制約を見つける
次に、S3バケットのリージョンとロケーションの制約値を見つける必要があります。
トップメニューのサービスをクリックし、表示される検索バーにS3と入力します。 S3 サービスを選択して、S3管理コンソールに移動します。
転送するバケットのリージョン名を探す必要があります。 リージョンはバケット名の横に表示されます。
バケットの領域に関連付けられている領域文字列と一致する場所の制限を見つける必要があります。 Amazon のこのS3リージョンチャートでバケットのリージョン名を探して、適切なリージョンと場所の制約文字列を見つけます。 この例では、地域名は「US East(N. バージニア)」なので、リージョン文字列としてus-east-1
を使用し、場所の制約は空白になります。
Amazonアカウントから適切な情報を取得したので、この情報を使用してrclone
をインストールおよび構成できます。
ローカルコンピュータにrcloneをインストールします
これで、ローカルコンピューターにrcloneをインストールする準備が整いました。
プロジェクトのWebサイトのダウンロードセクションにアクセスして、さまざまなプラットフォーム用にコンパイルされたユーティリティのバイナリを見つけてください。 コンピュータのオペレーティングシステムに一致するzip形式のバイナリをDownloadsディレクトリにダウンロードして開始します。
rclone
zipファイルをコンピューターにダウンロードしたら、プラットフォームに一致する以下のセクションに従ってください。
Linux
アーカイブを抽出する前に、unzip
ユーティリティが使用可能であることを確認する必要があります。
UbuntuまたはDebianを実行している場合は、次のように入力して、ローカルパッケージインデックスを更新し、unzip
をインストールできます。
- sudo apt-get update
- sudo apt-get install unzip
CentOSまたはFedoraを実行している場合は、次のように入力してunzip
をインストールできます。
- sudo yum install unzip
unzip
がインストールされている状態で、rclone
zipファイルをダウンロードしたディレクトリに移動します。
- cd ~/Downloads
次に、アーカイブを解凍して、新しいディレクトリに移動します。
- unzip rclone*
- cd rclone-v*
ここから、バイナリを/usr/local/bin
ディレクトリにコピーして、システム全体で使用できるようにすることができます。
- sudo cp rclone /usr/local/bin
次に、マニュアルページをシステムに追加して、コマンド構文と使用可能なオプションに関するヘルプを簡単に入手できるようにします。 必要なローカル手動ディレクトリが使用可能であることを確認してから、rclone.1
ファイルをコピーします。
- sudo mkdir -p /usr/local/share/man/man1
- sudo cp rclone.1 /usr/local/share/man/man1
man
データベースを更新して、新しいマニュアルページをシステムに追加します。
- sudo mandb
最後に、構成ディレクトリを作成し、構成ファイルを開いて、S3とSpacesのクレデンシャルを定義できます。
- mkdir -p ~/.config/rclone
- nano ~/.config/rclone/rclone.conf
これにより、新しい空白のファイルでテキストエディタが開きます。 オブジェクトストレージアカウントの定義のセクションに進んで続行してください。
マックOS
macOSを実行している場合は、ターミナルでrclone
zipファイルをダウンロードしたディレクトリに移動することから始めます。
- cd ~/Downloads
次に、ファイルを解凍して、新しいディレクトリレベルに移動します。
- unzip -a rclone*
- cd rclone-v*
次に、/usr/local/bin
ディレクトリが使用可能であることを確認してから、rclone
バイナリを次の場所に移動します。
- sudo mkdir -p /usr/local/bin
- sudo cp rclone /usr/local/bin
最後に、構成ディレクトリを作成し、構成ファイルを開いて、S3とSpacesのクレデンシャルを定義できます。
- mkdir -p ~/.config/rclone
- nano ~/.config/rclone/rclone.conf
これにより、新しい空白のファイルでテキストエディタが開きます。 オブジェクトストレージアカウントの定義のセクションに進んで続行してください。
ウィンドウズ
Windowsを実行している場合は、Windowsファイルエクスプローラーのダウンロードディレクトリに移動することから始めます。 rclone
zipファイルを選択して右クリックします。 表示されるコンテキストメニューで、すべて抽出…をクリックします。
プロンプトに従って、zipアーカイブからファイルを抽出します。
rclone.exe
ユーティリティは、コマンドラインから実行する必要があります。 新しいコマンドプロンプト(cmd.exe
プログラム)ウィンドウを開きます。左下隅にあるWindowsボタンをクリックし、 cmd と入力して、コマンドプロンプトを選択します。 。
内部で、次のように入力して抽出したrclone
パスに移動します。
- cd "%HOMEPATH%\Downloads\rclone*\rclone*"
ディレクトリの内容を一覧表示して、正しい場所にいることを確認します。
- dir
Output10/23/2017 01:02 PM <DIR> .
10/23/2017 01:02 PM <DIR> ..
10/23/2017 01:02 PM 17 git-log.txt
10/23/2017 01:02 PM 296,086 rclone.1
10/23/2017 01:02 PM 16,840,192 rclone.exe
10/23/2017 01:02 PM 315,539 README.html
10/23/2017 01:02 PM 261,497 README.txt
5 File(s) 17,713,331 bytes
2 Dir(s) 183,296,266,240 bytes free
rclone.exe
コマンドを使用するときは、常にこのディレクトリにいる必要があります。
注: macOSおよびLinuxでは、rclone
と入力してツールを実行しますが、Windowsでは、コマンドはrclone.exe
と呼ばれます。 このガイドの残りの部分では、コマンドをrclone
として提供するため、Windowsで実行する場合は、必ずrclone.exe
に置き換えてください。
次に、構成ディレクトリを作成し、構成ファイルを開いて、S3とSpacesのクレデンシャルを定義できます。
- mkdir "%HOMEPATH%\.config\rclone"
- notepad "%HOMEPATH%\.config\rclone\rclone.conf"
これにより、新しい空白のファイルでテキストエディタが開きます。 構成ファイルでオブジェクトストレージアカウントを定義する方法を学習するために先に進んでください。
S3アカウントとSpacesアカウントを構成する
rclone
が2つのアカウント間のコンテンツを管理できるように、新しいファイルでAmazonS3とDigitalOceanSpacesの構成を定義できます。
S3アカウントを定義することから始めましょう。 次のセクションを構成ファイルに貼り付けます。
[s3]
type = s3
env_auth = false
access_key_id = aws_access_key
secret_access_key = aws_secret_key
region = aws_region
location_constraint = aws_location_constraint
acl = private
ここでは、s3
と呼ばれる新しいrclone
「リモート」を定義します。 type
をs3
に設定して、rclone
がリモートストレージリソースと対話して管理する適切な方法を認識できるようにします。 構成ファイル自体でS3クレデンシャルを定義するため、env_auth
をfalse
に設定します。
次に、access_key_id
変数とsecret_access_key
変数をそれぞれS3アクセスキーとシークレットキーに設定します。 必ず、アカウントに関連付けられているS3クレデンシャルに値を変更してください。
Amazonリージョンチャートで見つけたS3バケットのプロパティに従ってリージョンと場所の制約を設定します。 最後に、アクセス制御ポリシーを「プライベート」に設定して、アセットがデフォルトでパブリックにならないようにします。
これで、DigitalOceanSpaces構成に同様のセクションを定義できます。 次のセクションを構成ファイルに貼り付けます。
. . .
[spaces]
type = s3
env_auth = false
access_key_id = spaces_access_key
secret_access_key = spaces_secret_key
endpoint = nyc3.digitaloceanspaces.com
acl = private
このセクションでは、「スペース」と呼ばれる新しいリモコンを定義します。 ここでも、SpacesはS3互換のAPIを提供しているため、type
をs3
に設定しています。 env_auth
をオフにして、構成ファイル内でSpacesクレデンシャルを定義できるようにします。
次に、access_key_id
変数とsecret_access_key
変数をDigitalOceanアカウント用に生成された値に設定します。 endpoint
を、前に決定した適切なSpacesエンドポイントに設定しました。 最後に、acl
をprivate
に再度設定して、資産を共有するまで資産を保護します。
終了したら、ファイルを保存して閉じます。
macOSおよびLinuxでは、クレデンシャルが内部にあるため、構成ファイルのアクセス許可を必ずロックダウンしてください。
- chmod 600 ~/.config/rclone/rclone.conf
Windowsでは、明示的に許可されていない限り、管理者以外のユーザーへのアクセス許可は拒否されるため、アクセスを手動で調整する必要はありません。
S3からスペースへのオブジェクトのコピー
構成が完了したので、ファイルを転送する準備が整いました。
rclone
で構成されたリモートを確認することから始めます。
- rclone listremotes
Outputs3:
spaces:
定義した両方のセクションが表示されます。
rclone
にs3
リモートに関連付けられた「ディレクトリ」を一覧表示するように依頼すると、利用可能なS3バケットを表示できます(リモート名の末尾にコロンを追加してください)。
- rclone lsd s3:
Output -1 2017-10-20 15:32:28 -1 source-of-files
上記の出力は、source-of-files
という1つのバケットがS3アカウントで見つかったことを示しています。
すでにDigitalOceanSpaceを作成している場合は、手順を繰り返してSpaceを表示できます。
- rclone lsd spaces:
Output -1 2017-10-25 19:00:35 -1 existing-space
S3バケットまたはDigitalOceanSpaceのコンテンツを表示するには、tree
コマンドを使用できます。 リモート名に続けて、コロンとリストする「ディレクトリ」の名前(バケットまたはスペース名)を渡します。
- rclone tree s3:source-of-files
Output/
├── README.txt
├── demo_dir
│ ├── demo1
│ └── demo2
└── media
├── Social Rebrand Presentation 032815.ppt
├── TechnicLauncher.jar
├── nda_template.docx
├── textfile.txt
└── the_mother_of_all_demos.mp4
2 directories, 8 files
準備ができたら、次のように入力して、S3バケットからDigitalOceanSpaceにファイルをコピーできます。
- rclone sync s3:source-of-files spaces:dest-of-files
選択したスペースを以前に作成していない場合、rclone
は指定された名前でスペースを作成しようとします。 指定された名前がすでに別のアカウントで使用されている場合、または名前がDigitalOcean Spacesの名前付け要件(小文字、数字、ダッシュのみ)を満たしていない場合、これは失敗します。
すべてがうまくいったと仮定すると、rclone
はS3からSpacesへのオブジェクトのコピーを開始します。
転送が完了したら、tree
サブコマンドでオブジェクトを表示することにより、オブジェクトが転送されたことを視覚的に確認できます。
- rclone tree spaces:dest-of-files
Output/
├── README.txt
├── demo_dir
│ ├── demo1
│ └── demo2
└── media
├── Social Rebrand Presentation 032815.ppt
├── TechnicLauncher.jar
├── nda_template.docx
├── textfile.txt
└── the_mother_of_all_demos.mp4
2 directories, 8 files
より堅牢な検証を行うには、check
サブコマンドを使用して、両方のリモートのオブジェクトを比較します。
- rclone check s3:source-of-files spaces:dest-of-files
Output2017/10/25 19:51:36 NOTICE: S3 bucket dest-of-files: 0 differences found
2017/10/25 19:51:36 NOTICE: S3 bucket dest-of-files: 2 hashes could not be checked
これにより、両方のリモートの各オブジェクトのハッシュ値が比較されます。 一部のハッシュを比較できなかったことを示すメッセージが表示される場合があります。 その場合、--size-only
フラグ(ファイルサイズに基づいて比較する)または--download
フラグ(両方のリモートから各オブジェクトをダウンロードしてローカルで比較する)を使用してコマンドを再実行し、確認することができます。転送の整合性。
結論
このガイドでは、AmazonS3からDigitalOceanSpacesにオブジェクトを転送する方法について説明しました。 両方のサービスのAPIクレデンシャルを作成し、ローカルコンピューターにrclone
ユーティリティをインストールして構成し、すべてのオブジェクトをS3バケットからDigitalOceanSpaceにコピーしました。
rclone
クライアントは、ファイルのアップロードまたはダウンロード、ローカルファイルシステムへのバケットのマウント、追加のバケットの作成または削除など、他の多くのオブジェクトストレージ管理タスクに使用できます。 ツールが提供する機能の詳細については、man
ページを確認してください。