IBM Cloud Docs
Aspera 高速転送の使用

Aspera 高速転送の使用

Aspera 高速転送は、従来の FTP 転送および HTTP 転送の制約を解決し、ほとんどの条件下で、特に、待ち時間とパケット・ロスが大きいネットワークにおいて、データ転送のパフォーマンスを改善します。

この機能は現在、 Object Storage for Satelliteではサポートされていません。 詳細はこちらをご覧ください。

標準の HTTP PUT 操作の代わりに、 Aspera 高速転送は、 FASP プロトコルを使用してオブジェクトをアップロードします。 アップロードおよびダウンロードに Aspera 高速転送を使用すると、次のような利点があります。

  • 転送の高速化
  • コンソールを使用する場合は 200 MB を、SDK またはライブラリーを使用する場合は 1 GB を超える、大容量オブジェクト・アップロードの転送
  • マルチメディア・ファイル、ディスク・イメージ、その他の構造化データや非構造化データなど、あらゆるタイプのデータのフォルダー全体のアップロード
  • 転送速度およびデフォルト設定のカスタマイズ
  • 転送を個別に表示、一時停止、再開、またはキャンセルすることが可能

Aspera 高速転送は、 IBM Cloud コンソール で使用でき、 Aspera Transfer SDKを使用してプログラマチックに使用することもできます。

Aspera 高速転送は、特定の地域でのみ使用可能です。 詳しくは、統合サービスを参照してください。

ターゲット・バケットに Immutable Object Storage ポリシーがある場合、 Aspera 高速転送を使用することはできません。

コンソールの使用

サポートされる地域内でコンソールを使用してオブジェクトを追加すると、プロンプトが出され、Aspera Connect クライアントをインストールするオプションが示されます。 このブラウザー・プラグインは、ファイルまたはフォルダーをアップロードするために Aspera 高速転送を提供します。

Aspera Connect のインストール

  1. **「Aspera Connect クライアントのインストール」**を選択します。
  2. ご使用のオペレーティング・システムおよびブラウザーに合ったインストール手順に従います。
  3. ファイルまたはフォルダーのアップロードを再開します。

Aspera Web サイトから直接 Aspera Connect プラグインをインストールすることもできます。 Aspera Connect プラグインに関する問題のトラブルシューティングで支援が必要な場合は、資料を参照してください

プラグインがインストール済みの場合、同じブラウザーを使用するターゲット・バケットへのすべてのアップロードのデフォルトとして Aspera 高速転送を設定できるオプションがあります。 **「ブラウザー設定を記憶する」を選択します。 バケット構成ページの「転送オプション」**の下にもオプションがあります。 これらのオプションを使用して、アップロードおよびダウンロードのデフォルト転送として標準と高速のいずれかを選択できます。

通常、IBM Cloud Object Storage の Web ベースのコンソールを使用することは、最も一般的な Object Storage の使用法ではありません。 標準転送オプションでは、オブジェクトのサイズは 200 MB に制限され、ファイル名とキーは同じになります。 もっと大きいオブジェクト・サイズおよびもっと高いパフォーマンス (ネットワーク要因による) が Aspera 高速転送によってサポートされます。

Aspera サーバーは、構成可能な TCP ポート (デフォルトでは 33001) で 1 つの SSH サーバーを実行します。 サーバー・サイドのファイアウォールは、この 1 つの TCP ポートが Aspera サーバーに到達することを許可する必要があります。 UDP ポートを listen しているサーバーはありません。 Aspera クライアントによって転送が開始されると、クライアントは指定された TCP ポートで SSH サーバーへの SSH セッションを開き、データの転送に使用する UDP ポートをネゴシエーションします。 デフォルトでは、 Aspera クライアントおよびサーバーは UDP ポート 33001 を使用するように構成されています。 セッション開始ステップの後、クライアントとサーバーの両方が、ネゴシエーションされたポートで UDP トラフィックを送受信します。 UDP セッションを開始できるようにするには、 Aspera サーバー・サイドのファイアウォールで、ポート UDP 33001 が Aspera サーバーに到達できるようにする必要があります。 詳しくは、ファイアウォールに関する考慮事項を参照してください。

転送状況

アクティブ: 転送を開始すると、転送状況は「アクティブ」と表示されます。 転送がアクティブである間、アクティブな転送を一時停止、再開、またはキャンセルすることができます。

完了: 転送が完了すると、それについての情報と、このセッションでのすべての転送が、完了タブに表示されます。 この情報は消去することができます。 現行セッションで完了した転送に関する情報のみが表示されます。

設定: アップロードおよびダウンロードのデフォルトを「高速」に設定できます。

Aspera 高速転送を使用したダウンロードでは、下りの料金が発生します。 詳しくは、料金設定ページを参照してください。

拡張設定 (Advanced Preferences): アップロードおよびダウンロードの帯域幅を設定できます。

Aspera Transfer SDK の使用

  1. IBM API Hub から Aspera Transfer SDK をダウンロードします。 SDK は、バイナリー (転送要求を listen するコマンド・ライン・ユーティリティーとデーモン)、構成ファイル、および言語固有のコネクターの集合です。
  2. 該当するパッケージ・マネージャー (pip、maven、gem など) から grpc 依存関係をインストールします。
  3. デーモンを起動し、関連するプログラミング言語コネクター・ファイルをプロジェクトにインポートします。
  4. デーモンが使用するローカル・ポートを渡すことにより、 Aspera クライアントをインスタンス化します。
  5. 転送に必要なすべての情報を含む transfer_spec を作成します。
    1. icos 情報:
      1. API キー
      2. サービス・インスタンス ID
      3. ターゲット・エンドポイント
      4. バケット名
      5. 転送方向
      6. リモート・ホスト (これは、 ?faspConnectionInfo 照会パラメーターを使用して GET 要求をバケットに送信することによって検出されます)
      7. 転送する資産 (基本的にはファイル・パスのセット)
  6. 転送仕様と構成情報を転送要求に渡します。

以下に、 Pythonの使用例を示します。

import random
import string

import grpc
import json
import os.path

from urllib3.connectionpool import xrange

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:55002'))

    # create file
    file_path = generate_source_file()

    # create transfer spec
    transfer_spec = {
        "session_initiation": {
            "icos": {
                "api_key": os.environ.get('IBMCLOUD_API_KEY'),
                "bucket": os.environ.get('IBMCLOUD_BUCKET'),
                "ibm_service_instance_id": os.environ.get('IBMCLOUD_COS_INSTANCE'),
                "ibm_service_endpoint": os.environ.get('IBMCLOUD_COS_ENDPOINT')
            }
        },
        "direction": "send",
        "remote_host": "https://ats-sl-dal.aspera.io:443",
        "title": "strategic",
        "assets": {
            "destination_root": "/aspera/file",
            "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


def generate_source_file(name='file'):
    with open(name, 'w') as file:
        # file.write('Hello World!')
        file.write(''.join(random.choice(string.ascii_lowercase) for i in xrange(10 ** 10)))
    return os.path.abspath(name)


if __name__ == '__main__':
    run()