首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当Azure RM运行任务完成后,输出文件不会自动上载到存储容器

当Azure RM运行任务完成后,输出文件不会自动上载到存储容器
EN

Stack Overflow用户
提问于 2019-08-26 15:52:32
回答 1查看 202关注 0票数 1

当由C#完成时,文件在"TaskCompletion“之后被上传到存储容器,但当在Azure-RM PowerShell中完成同样的操作时,即使任务成功并生成输出文件,也不会将输出文件上传到存储容器。

我参考了Microsoft Docs for Azure RM PowerShell 6.13.0的内容。我已经尝试提供ResourceFiles和OutputFiles作为列表。资源文件正在节点上下载,但在任务完成后,不会上传输出文件。我试着把FilePattern改成"*.zip","Output_00001.zip",但是没有成功。

我注意到在批处理资源管理器中,当由Azure RM运行时,配置JSON具有空的输出文件数组。但是当由C#运行时,配置JSON中有输出文件。

代码语言:javascript
复制
"resourceFiles": [
    {
      "httpUrl": "https://teststorage.blob.core.windows.net/sku-test/Input_00001.zip?sv=2018-03-28&sr=b&sig=iY7lr8QyYzev2Eg1234562BG11ETHftTD8hzZR123456%3D&se=2019-08-26T07%3A10%3A11Z&sp=rwdl",
      "filePath": "Input_00001.zip"
    },
    {
      "httpUrl": "https://teststorage.blob.core.windows.net/sku-test/AppConfig.xml?sv=2018-03-28&sr=b&sig=QbSAAsi9gZdU6bS7yoBIvr123456ratH2wC2l123456%3D&se=2019-08-26T06%3A08%3A58Z&sp=r",
      "filePath": "AppConfig.xml"
    },
    {
      "httpUrl": "https://teststorage.blob.core.windows.net/sku-test/Task.ps1?sv=2018-03-28&sr=b&sig=re3Cn8pY4123456DRSt8kn3PHF81FSiJ3zIt7123456%3D&se=2019-08-26T06%3A08%3A58Z&sp=r",
      "filePath": "Task.ps1"
    }
  ],
  "outputFiles": [],

当由C#完成时:

代码语言:javascript
复制
"resourceFiles": [
    {
      "autoStorageContainerName": "cdfb56e1-b421-4f06-9ef5-0de18ea288d8",
      "blobPrefix": "AppConfig.config"
    },
    {
      "autoStorageContainerName": "cdfb56e1-b421-4f06-9ef5-0de18ea288d8",
      "blobPrefix": "Task.ps1"
    },
    {
      "autoStorageContainerName": "cdfb56e1-b421-4f06-9ef5-0de18ea288d8",
      "blobPrefix": "Input_00001.zip"
    }
  ],
  "outputFiles": [
    {
      "filePattern": "Output_00001.zip",
      "destination": {
        "container": {
          "containerUrl": "https://teststorage.blob.core.windows.net/cdfb56e1-b421-4f06-9ef5-0de18ea288d8?sv=2018-11-09&sr=c&sig=p2GJGkCmxJAEpJr%2BlwkUTEZjD2GZcGoUpl4Am79YQyM%3D&se=2019-08-25T21%3A32%3A19Z&sp=w"
        }
      },
      "uploadOptions": {
        "uploadCondition": "TaskCompletion"
      }
    }
  ],

下面是PowerShell脚本:

代码语言:javascript
复制
$uploadOptions = New-Object Microsoft.Azure.Commands.Batch.Models.PSOutputFileUploadOptions "TaskCompletion";
$OutputSasToken = New-AzureStorageContainerSASToken -Context $StorageContext -Name $StorageContainerName -FullUri -Permission w;
foreach ($blob in $Blobs) {
    $SasToken = New-AzureStorageBlobSASToken -ICloudBlob $blob.ICloudBlob -Context $StorageContext -Permission rwdl -FullUri;
    $blobName = $blob.Name;

    if($blobName.Contains(".zip") -and $blobName.Contains("Input_")) {
        $ResourceFile = New-Object Microsoft.Azure.Commands.Batch.Models.PSResourceFile -ArgumentList @($SasToken, $blobName);
        $TaskName = "Task_" + $blobName.Replace(".zip", "").Replace("Input_", "");
        $OutputFile = "Output_" + $blobName.Replace("Input_", "");
        $Task = New-Object Microsoft.Azure.Commands.Batch.Models.PSCloudTask($TaskName, "cmd /S /C `"powershell -f $AppPsFile -configurationFileName $AppConfigFile -inputArchiveName $blobName -outputArchiveName $OutputFile -archiveKey $EncryptionKey");
        $Task.ResourceFiles = New-Object System.Collections.Generic.List``1[Microsoft.Azure.Commands.Batch.Models.PSResourceFile];
        $Task.ResourceFiles.Add($ResourceFile);
        $Task.ResourceFiles.Add($cResourceFile);
        $Task.ResourceFiles.Add($PsScriptResourceFile);

        $blobContainerDestination = New-Object Microsoft.Azure.Commands.Batch.Models.PSOutputFileBlobContainerDestination $OutputSasToken;
        $destination = New-Object Microsoft.Azure.Commands.Batch.Models.PSOutputFileDestination $blobContainerDestination;

        $OutputFileToUpload = New-Object Microsoft.Azure.Commands.Batch.Models.PSOutputFile $OutputFile, $destination, $uploadOptions;
        $Task.OutputFiles = New-Object System.Collections.Generic.List``1[Microsoft.Azure.Commands.Batch.Models.PSOutputFile];
        $Task.OutputFiles.Add($OutputFileToUpload);
        $Tasks += @($Task);
    }
}

New-AzureBatchPool -Id $PoolId -VirtualMachineSize $VmSize -VirtualMachineConfiguration $configuration -AutoScaleFormula $AutoScaleFormula -BatchContext $BatchAccount -DisplayName $DisplayName -NetworkConfiguration $networkConfig;
New-AzureBatchJob -Id $JobId -PoolInformation $PoolInformation -BatchContext $BatchAccount;
$Job = Get-AzureBatchJob -BatchContext $BatchAccount -Id $JobId
New-AzureBatchTask -Job $Job -Tasks $Tasks -BatchContext $BatchAccount #Here the tasks are added after Pool, Job are created

如何添加输出文件列表?

EN

回答 1

Stack Overflow用户

发布于 2019-08-26 23:50:41

我相信这是Azure Batch Powershell模块中的错误。我在这里的GitHub上提交了一个bug (只是代理你说的):https://github.com/Azure/azure-powershell/issues/9912

作为修复错误之前的一种解决方法,您应该能够使用单个任务选项(指定New-AzureBatchTask -Job $jobId -ResourceFile @(r1, r2, r3), -OutputFile $OutputFileToUpload ...),并且它应该可以按预期工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57653813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档