我在Microsoft Azure Batch Services上运行任务,其中每个任务在节点上创建一组文件。我必须将这些文件复制到Blob存储。
从vm创建和管理任务,该vm不属于批处理池
我能够访问节点文件,我可以将内容写入blob存储,但这意味着我将文件作为字符串存储在我的驱动vm上并将其上传到blobstorage。
var container = BlobClient.GetContainerReference(containerName);
container.CreateIfNotExists();
var content = nodeFile.ReadAsString();
var blob = container.GetBlockBlobReference(nodeFile.Name);
blob.UploadText(content);
为了防止额外的流量,有人知道我可以直接将文件上传到BlobStorage吗?
我无法控制任务中的exe,因此直接从任务中上传不是一个选项
答案 0 :(得分:0)
更新后的答案2017-10-27:
现在,您可以使用task output files直接上传任务,其中API版本大于或等于2017-05-01
虚拟机配置池。
原始回答:
如果能够在bat / cmd文件或shell脚本中包装可执行文件,则可以直接从计算节点上载到存储。如果您的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>