1

Microsoft Azure Batch Services でタスクを実行しています。各タスクは、ノード上に一連のファイルを作成します。これらのファイルを Blob Storage にコピーする必要があります。

タスクは、バッチ プールの一部ではない vm から作成および管理されます

ノードファイルにアクセスでき、コンテンツをブロブストレージに書き込むことができますが、これは、駆動する vm でファイルを文字列として取得し、ブロブストレージにアップロードすることを意味します。

        var container = BlobClient.GetContainerReference(containerName);
        container.CreateIfNotExists();
        var content = nodeFile.ReadAsString();
        var blob = container.GetBlockBlobReference(nodeFile.Name);
        blob.UploadText(content);

余分なトラフィックを防ぐために、ファイルを BlobStorage に直接アップロードする方法を知っている人はいますか?

タスク内のexeを制御できないため、タスクから直接アップロードすることはできません

4

1 に答える 1

0

更新された回答 2017-10-27:

仮想マシン構成プールと同等以上の API バージョンを持つタスク出力ファイルを使用して、タスクからアーティファクトを直接アップロードできるようになりました。2017-05-01

元の答え:

実行可能ファイルを bat/cmd ファイルまたはシェル スクリプトにラップできる場合は、コンピューティング ノードからストレージに直接アップロードできます。VM が Windows の場合はAzCopyを使用し、VM が Linux (または Windows) の場合は blobxfer を使用して、プログラムの終了後にファイルを転送できますコンピューティング ノードの開始タスクの一部としてプログラムをインストールするか、ジョブの準備タスクの一部としてインストールするか、リソース ファイル (AzCopy の場合) の一部としてプログラムを含めて、タスクで使用できるようにする必要があります。

たとえば、Windows ノードでは次のようになります。

   @echo off
   myprogram.exe arg1 arg2
   set /a rc=%ERRORLEVEL%
   REM assuming return code of 0 is success
   IF %rc% EQU 0 (
       AzCopy.exe <azcopy args>
   )
   exit /b %rc%

たとえば、Linux ノードでは次のようになります。

    #!/usr/bin/env bash
    set -e
    # your program below
    myprogram arg1 arg2
    # invoke blobxfer to transfer output data to storage, see docs for more info
    blobxfer <blobxfer args>
于 2016-08-11T14:53:41.513 に答える