はじめに
この記事では、Aspera Transfer SDKを使ってIBM Cloud Object Storage (ICOS) へサイズの大きなファイルを高速に転送する方法を説明します。
Why Aspera?
ICOSへファイルをアップロードする際に、一番簡単のやり方はIBM Cloud Portalの画面でUploadボタンをクリックして、Standard transferを使うことです。そうすると、裏でHttp/TCPのPUT operationが行われています。
ただし、数GBや数十GBほど大きなファイルを転送する際に、IBM CloudはAsperaのお使いをお勧めします。
Asperaは高速でセキュアなファイル転送ソリューションです。 Asperaの最も重要な技術的な要素であるFASPは、TCPをベースにした独自のプロトコルであり、最適化されたデータ転送アルゴリズムを使用しています。これにより、ネットワークの帯域幅や遅延に影響を受けにくくなり、大容量のファイルを高速かつ安定して転送できます。
IBM Cloud Portalの画面で、Aspera High-speed transferを選択したら、簡単にAsperaでファイアをアップロードすることができます。
注: 初めて利用する際に、Browserに出る提示に従って、Client SoftwareIBM Aspera ClientをInstallする必要があります。詳細の手順はこちらの記事でご参照ください:IBM Cloud : SafariブラウザにCOSへのアップロード用のAspera機能拡張を追加。
Why Aspera Transfer SDK?
IBM Cloud Portalで簡単にAspera利用できますが、Program CodeやScriptでデータ転送するニーズも存在しています。特に、毎日定時にICOSへデータ格納しようなどのユースケースには、PortalでのGUI操作を自動化することが難しいです。その場合には、Aspera Transfer SDKやAspera CLIの登場が必要です。
本記事は、Aspera Transfer SDKの使い方を説明します。
Aspera CLIの使い方はこちらの記事(Aspera CLIを使ってIBM Cloud Object Storage (ICOS) へ高速転送を実現する)にご参照ください。
Let's try Aspera Transfer SDK
全体の流れは、次の通りになります:
- PCでAspera Transfer SDKをInstall
- IBM CloudでICOS BucketとAsperaの情報を確認
- PCでFileをUpload
- IBM CloudでUploadしたFileを確認
1. PCでAspera Transfer SDKをInstall
Aspera Transfer SDKはIBM WebsiteでDownloadします。Aspera DownloadのページでIBM Aspera Transfer SDKのブロックをクリックします。
次の画面で、左側のDownloadメニューをクリックして、右側にPCのOSに応じてInstall FileをDownloadします。
私のPCはWindowsなので、windows-amd64-52a85ef.zipをDownloadしました。
Aspera Transfer SDKの仕組みはかなり簡単です。下記の図のように、PCでTransfer SDKのProcessを起動したら、Program CodeはSDK Processを経由で転送することができます。
Windows PCなら、まずはDownloadした.zip Fileを解凍して、\bin subfolderに見えるasperatransferd.exe fileはTransfer SDKであります。
C:\temp\windows-amd64\bin>dir
Volume in drive C is Windows
Volume Serial Number is 94E2-EDBC
Directory of C:\temp\windows-amd64\bin
06/30/2023 10:28 PM <DIR> .
06/30/2023 10:28 PM <DIR> ..
05/15/2023 05:20 PM 17,496,064 asperatransferd.exe
1 File(s) 17,496,064 bytes
2 Dir(s) 33,628,905,472 bytes free
C:\temp\windows-amd64\bin>
このasperatransferd.exeはWindowsのInstall Procedureがないまま、すぐに起動できます。
C:\temp\windows-amd64\bin>start asperatransferd.exe
start asperatransferd.exe
が実行すると、次のようなTransfer SDK Process画面がpopupします。特に、Processが利用しているPort Noにご留意ください。私の画面でDefaultのPort No 55002を利用しました。この画面をそのままでしてください。画面をCloseすると、Processが停止します。
注: asperatransferd.exeはWindows CMDより起動することが必須です。
Window GUIでasperatransferd.exeをクリックして実行してみたら、下記のようなエラーが出ます。
では、続きましてProgram Codeを準備しましょう。Aspera Transfer SDK は、Java、Python、Ruby、Node.js、Go、C++、C#をサポートしています。今回はPythonのやり方を試しました。
PythonのSample CodeはAspera Transfer SDKのDownload Siteで提供されてます。こちらのリンク先にご参照までに。
また、ICOSのDocにもSample Codeが記載された。こちらのリンク先にご参照までに。
私は両方とも参考しながら、最後に下記のようなCodeを用意しました。
import grpc
import json
import os.path
import transfer_pb2 as transfer_manager
import transfer_pb2_grpc as transfer_manager_grpc
def run():
# create a connection to the transfer manager daemon
client = transfer_manager_grpc.TransferServiceStub(grpc.insecure_channel('localhost:xxxxxx'))
file_path = "xxxxxx"
# create transfer spec
transfer_spec = {
"session_initiation": {
"icos": {
"api_key": "xxxxxx",
"bucket": "xxxxxx",
"ibm_service_instance_id": "xxxxxx",
"ibm_service_endpoint": "xxxxxx"
}
},
"direction": "send",
"remote_host": "xxxxxx",
"title": "strategic",
"assets": {
"destination_root": "xxxxxx",
"paths": [
{
"source": file_path
}
]
}
}
transfer_spec = json.dumps(transfer_spec)
# create a transfer request
transfer_request = transfer_manager.TransferRequest(
transferType=transfer_manager.FILE_REGULAR,
config=transfer_manager.TransferConfig(),
transferSpec=transfer_spec)
# send start transfer request to transfer manager daemon
transfer_response = client.StartTransfer(transfer_request)
transfer_id = transfer_response.transferId
print("transfer started with id {0}".format(transfer_id))
# monitor transfer status
for transfer_info in client.MonitorTransfers(
transfer_manager.RegistrationRequest(
filters=[transfer_manager.RegistrationFilter(
transferId=[transfer_id]
)])):
print("transfer info {0}".format(transfer_info))
# check transfer status in response, and exit if it's done
status = transfer_info.status
if status == transfer_manager.FAILED or status == transfer_manager.COMPLETED:
print("finished {0}".format(status))
break
if __name__ == '__main__':
run()
少し長いCodeになりますが、8つのxxxxxxに表示されたVariableは自分の環境に応じて設定する必要があります。
2. IBM CloudでICOS BucketとAsperaの情報を確認
このステップでは、Program Codeにxxxxxxに表示されたVariableの正しいValueを確認しておきましょう。
‐ client = transfer_manager_grpc.TransferServiceStub(grpc.insecure_channel('localhost:xxxxxx')): Transfer SDK ProcessのPort Noです。前に説明した通り、私の環境にはPort 55002を使ってます。
client = transfer_manager_grpc.TransferServiceStub(grpc.insecure_channel('localhost:55002'))
‐ "ibm_service_endpoint": "xxxxxx" :本IBM Cloud RegionのICOS Service Public Endpointです。先頭に**Https://**が必要ということをご注意ください。
‐ "ibm_service_instance_id": "xxxxxx" :ICOS Service InstanceのCRNです。
‐ "bucket": "xxxxxx" :ICOS BucketのFull nameです。
‐ "api_key": "xxxxxx" :ICOS Accessために、API Keyが必要です。
以上の4つのVariableは、IBM Cloud Portalで確認できます。
情報保護のため、下記のSampleでapi_keyの一部はxxxにしました。
"api_key": "BwGr1FSwTtiTvtdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"bucket": "testbucket-qitta",
"ibm_service_instance_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/039dbe6794084c7cb514a276dd2345da:73ac0d0d-6c81-4e26-9645-50e988329b95::",
"ibm_service_endpoint": "https://s3.jp-tok.cloud-object-storage.appdomain.cloud"
‐ "remote_host": "xxxxxx" :本IBM Cloud RegionのICOS用Aspera ServerのHost Infoです。
"remote_host": "https://ats-sl-tok.aspera.io:443",
‐ file_path = "xxxxxx" :転送FileのOS Full Pathです。
‐ "destination_root": "xxxxxx" :ICOS側で転送下Fileの保存Folder Pathです。
情報保護のため、下記のSampleでfile_pathの一部はxxxにしました。
file_path = "C:/Users/xxx/xxx/00_Jupyter/AsperaTesting/99.jpg"
....
"destination_root": "/testfolder/98.jpg",
その以外のVariableは変更しなくて、Defaultのままにします。
3. PCでFileをUpload
Step 2の設定で、Python Codeを実行します。私の環境には、JupyterのRunボタンをクリックすることになります。
すぐにJupyterの画面で実行結果を見えます。結構長いです、全部をここで表示することが必要ないと思います。
Transfer SDK Processの画面でも長い出力が見えます。ほぼ同じな内容で、ここでスクショを割愛しました。
4. IBM CloudでUploadしたFileを確認
IBM Cloud PortalでICOS BucketをCheckすると、次のようにUploadしたFileが見えました。
File NameはPC側の99.jpgではなく、destination_rootに設定された98.jpgになりました。
料金については
- まずは、Aspera Softwareは有料なのか、無料なのか
Aspera のソリューションは多くの機能を提供していて、各機能に対して複数のコンポーネントがあります。
今回検討したICOSへ転送するためのコンポーネント(IBM Aspera Connect, IBM Aspera Transfer SDK, IBM Aspera CLI)は、すべでは無料で利用できます。
- Asperaを使ったらICOSの料金は増えますか
Asperaを使ってICOSへアップロードする際に、特に料金が発生しません。
Asperaを使ってICOSからダウンロードする際に、ダウンロードしたファイルのStorage Classおよびデータ量に応じて料金が発生します。詳細料金はIBM Cloud PortalのObject Storageの作成画面で確認できます。
ICOSを利用して現場のログ管理や監視映像を保存するなどのユースケースでは、データのアップロードの需要は大きく、データのダウンロードの需要は比較的に小さいです。この課金体制はとてもフレンドリーと思います。
まとめに
以上は、Aspera Transfer SDKの使う方法を解説しました。
私の経験というと、ICOS関連のVariableの設定には一番時間がかかってしまいました。何度もテストを繰り返して、ようやく正しいパラメータの形式がわかりました。
本記事はご参考になれば幸いです。
ごコメントとご質問、大歓迎です。