LocalからIBM Cloud IaaS(SoftLayer)への巨大ファイル送信


はじめに

IBM Cloud IaaS(以後SoftLayer)に限らず、クラウド環境への巨大ファイル送信は面倒ですよね。
Public Network経由で送信可能な踏み台サーバーを作るのも予算的に厳しいし、VPN経由でPrivate Newtorkで転送すると速度が出ない上にVPN Clientが落ちてファイル転送が異常終了してしまうことも。
そんな時の対応策として、IBM Cloud Object Storage(以後ICOS)を介したファイル送信方法をご紹介します。
Local-ICOS間はPublic Networkで接続できるし、ICOS-SoftLayerも内部接続(だと思われるため)高速にファイルのやり取りができます。

概要

大まかに以下の手順で進めて行きます。
1.ICOSの作成
2.ICOSへのファイル送信
3.SoftLayer環境からICOS上のファイル入手

手順

1.ICOSの作成
IBM Cloudのカタログから、オブジェクト・ストレージを選択します。

任意のサービス名とプランを選択します。

サービス資格情報→新規資格情報を選択します。
アクセス役割をManagerにした上で、インラインの構成パラメーターの追加に{"HMAC":true}と入力して追加を選択します。

資格情報の表示を選択して、access_key_idとsecret_access_keyを確認します。

2.ICOSへのファイル送信
と、この後はS3 APIを介してICOSにファイルを転送する方法を書く予定だったのですが。。。
なんとICOSのファイル送受信にAsperaが使えるようになったのですね。
検証してみたところ、こちらの方法のほうがはるかに速くファイルを送れるうえに、S3 APIのPUTの5GB制限が無いため、Asperaでのファイル送信をお勧めします。

8GB程度のファイルを送信中の様子。

以下の記事がとても分かりやすいので、そちらを参考にファイルを転送してください。
IBM Cloud Object Storage(ICOS)へのファイルアップロードをAsperaで高速化!

3.SoftLayer環境からICOS上のファイル入手
ICOS→SoftLayerのファイルのやり取りまでAsperaでできるとこの記事の意味が無くなってしまうのですが、ICOSからのAsperaでのDownloadは有料のようで、S3 CLI経由でICOSのファイルを入手する方法をご紹介します。

まずSoftLayer環境にAWS CLIを導入します。
AWS CLI のインストールと設定

続けて、~/.aws/credentialsを以下の中身で作成します。
XXX...には資格情報の表示で確認したaccess_key_idを、aws_secret_access_keyにはsecret_access_keyを入力してください。

[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYY

続けて、バケットが見れることを確認します。以下のコマンドで確認できます。
aws --endpoint-url=https://<endpoint_url> s3 ls

<endpoint_url>はEndpointから確認できます。
今回はSoftLayer環境から外部接続が無い想定で、プライベートの方を使います。

雑なバケット名ですが、、、表示されますね。

# aws --endpoint-url=https://s3.us-south.objectstorage.service.networklayer.com s3 ls
2018-03-28 22:29:09 testdsadasdsa

続けてバケットの中身を確認します。以下のコマンドで確認できます。
aws --endpoint-url=https://<endpoint_url> s3 ls s3://<backet_name>/

# aws --endpoint-url=https://s3.us-south.objectstorage.service.networklayer.com s3 ls s3://testdsadasdsa/
2018-03-28 22:38:57 8770697111 xxxxxxx.zip

最後にファイルをICOSから入手します。以下のコマンドで実行できます。結構速度が出てますね。
aws --endpoint-url=https://<endpoint_url> s3 cp s3://<backet_name>/

# aws --endpoint-url=https://s3.us-south.objectstorage.service.networklayer.com s3 cp s3://testdsadasdsa/xxxxxxx.zip /work
Completed 1.4 GiB/8.2 GiB (54.4 MiB/s) with 1 file(s) remaining