2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Aspera Transfer SDKを使ってIBM Cloud Object Storage (ICOS) へ高速転送を実現する

Last updated at Posted at 2023-06-30

はじめに

この記事では、Aspera Transfer SDKを使ってIBM Cloud Object Storage (ICOS) へサイズの大きなファイルを高速に転送する方法を説明します。

Why Aspera?

ICOSへファイルをアップロードする際に、一番簡単のやり方はIBM Cloud Portalの画面でUploadボタンをクリックして、Standard transferを使うことです。そうすると、裏でHttp/TCPのPUT operationが行われています。

image.png
image.png

ただし、数GBや数十GBほど大きなファイルを転送する際に、IBM CloudはAsperaのお使いをお勧めします。

Asperaは高速でセキュアなファイル転送ソリューションです。 Asperaの最も重要な技術的な要素であるFASPは、TCPをベースにした独自のプロトコルであり、最適化されたデータ転送アルゴリズムを使用しています。これにより、ネットワークの帯域幅や遅延に影響を受けにくくなり、大容量のファイルを高速かつ安定して転送できます。

IBM Cloud Portalの画面で、Aspera High-speed transferを選択したら、簡単にAsperaでファイアをアップロードすることができます。
image.png

注: 初めて利用する際に、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

全体の流れは、次の通りになります:

  1. PCでAspera Transfer SDKをInstall
  2. IBM CloudでICOS BucketとAsperaの情報を確認
  3. PCでFileをUpload
  4. IBM CloudでUploadしたFileを確認

1.  PCでAspera Transfer SDKをInstall

Aspera Transfer SDKはIBM WebsiteでDownloadします。Aspera DownloadのページでIBM Aspera Transfer SDKのブロックをクリックします。
image.png

次の画面で、左側のDownloadメニューをクリックして、右側にPCのOSに応じてInstall FileをDownloadします。
私のPCはWindowsなので、windows-amd64-52a85ef.zipをDownloadしました。
image.png

Aspera Transfer SDKの仕組みはかなり簡単です。下記の図のように、PCでTransfer SDKのProcessを起動したら、Program CodeはSDK Processを経由で転送することができます。
image.png

Windows PCなら、まずはDownloadした.zip Fileを解凍して、\bin subfolderに見えるasperatransferd.exe fileはTransfer SDKであります。

Windows CMD
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がないまま、すぐに起動できます。

Windows CMD
C:\temp\windows-amd64\bin>start asperatransferd.exe

start asperatransferd.exeが実行すると、次のようなTransfer SDK Process画面がpopupします。特に、Processが利用しているPort Noにご留意ください。私の画面でDefaultのPort No 55002を利用しました。この画面をそのままでしてください。画面をCloseすると、Processが停止します。
image.png

注: asperatransferd.exeはWindows CMDより起動することが必須です。
Window GUIでasperatransferd.exeをクリックして実行してみたら、下記のようなエラーが出ます。
image.png

では、続きまして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を用意しました。

Jupyter Notebook / Python 3
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を使ってます。

Jupyter Notebook / Python 3
 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にしました。

Jupyter Notebook / Python 3
                "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です。

Jupyter Notebook / Python 3
        "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にしました。

Jupyter Notebook / Python 3
    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ボタンをクリックすることになります。
image.png

すぐにJupyterの画面で実行結果を見えます。結構長いです、全部をここで表示することが必要ないと思います。
image.png

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になりました。
image.png

料金については

  • まずは、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の設定には一番時間がかかってしまいました。何度もテストを繰り返して、ようやく正しいパラメータの形式がわかりました。
本記事はご参考になれば幸いです。
ごコメントとご質問、大歓迎です。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?