首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure -运行簿作业尝试了3次,但是它被暂停了

Azure -运行簿作业尝试了3次,但是它被暂停了
EN

Stack Overflow用户
提问于 2022-08-09 09:44:11
回答 2查看 324关注 0票数 0

我在powershell中创建了一个azure自动化帐户,以获取特定容器中文件的名称和大小。

我通过Azure Data通过Web钩子活动运行这段代码。

对于中小型容器来说,代码运行得非常好。

问题是,当我试图为一个已经有大量文件的容器运行代码时,它会尝试3次,然后被挂起,什么也不会发生。我看到了日志我看到了这样的信息:

由于沙箱内存不足,运行簿作业失败。每个Azure自动化沙箱分配400 MB内存。这项工作在暂停之前曾尝试过三次。在https://aka.ms/AAMemoryLimit上看到一些解决这一问题的常用方法

有没有人知道如何解决这种情况,或者是否有可能增加内存?谢谢!

PS代码:

代码语言:javascript
复制
#define parameters
param (
    [Parameter (Mandatory = $false)]
    [object] $WebHookData,
    [string]$StorageAccountName,
    [string]$StorageAccountKey
)


$Parameters = (ConvertFrom-Json -InputObject $WebHookData.RequestBody)

<#If ($Parameters.callBackUri)
{
    $callBackUri = $Parameters.callBackUri
}#>


$containerName = $Parameters.containerName
"->"+$StorageAccountName
"->"+$StorageAccountKey


$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName       

    "Logging in to Azure..."
    Connect-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found." 
        throw $ErrorMessage 
    } else{
        Write-Error -Message $_.Exception 
        throw $_.Exception 
    }
}


#storage account
$StorageAccountName = $StorageAccountName

#storage key
$StorageAccountKey = $StorageAccountKey

#Container name - change if different
$containerName = $containerName

#get blob context
$Ctx = New-AzStorageContext $StorageAccountName -StorageAccountKey $StorageAccountKey 

# get a list of all of the blobs in the container 
$listOfBlobs = Get-AzStorageBlob -Container $containerName -Context $Ctx 

# zero out our total
$length = 0 

# this loops through the list of blobs and retrieves the length for each blob
#   and adds it to the total
$listOfBlobs | ForEach-Object {$length = $length + $_.Length} 

# output the blobs and their sizes and the total 
Write-Host "List of Blobs and their size (length)"
Write-Host " " 
$select = $listOfBlobs | Select-Object -Property @{Name='ContainerName';Expression={$containerName}}, Name, @{name="Size";expression={$($_.Length)}}, LastModified 
#$listOfBlobs | select Name, Length, @{Name='ContainerName';Expression={$containerName}}
Write-Host " "
Write-Host "Total Length = " $length

#Define location and Export to CSV file
$SourceLocation = Get-Location 

$select | Export-Csv $SourceLocation'File-size/File-size-'$containerName'.csv' -NoTypeInformation -Force -Encoding UTF8 

$Context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey

Set-AzureStorageBlobContent -Context $Context -Container "Name" -File $SourceLocation"File-size/File-size-$containerName.csv" -Blob "File-Size/File-size-$containerName.csv" -Force
EN

回答 2

Stack Overflow用户

发布于 2022-08-09 11:49:38

我也有过同样的情况..。

不能增加运行时的内存。您可以下载一个混合工人代理(或者不管现在重命名它),以使azure自动化帐户在您的本地计算机或您设置的服务器上运行您的脚本。

内存问题是由$listOfBlobs = Get-AzStorageBlob ...引起的。

您不能一次全部拉出它们,必须使用分页(或者换句话说,按批列出)。

代码语言:javascript
复制
$MaxReturn = 10000
$ContainerName = "abc"
$Total = 0
$Token = $Null
do
 {
     $Blobs = Get-AzStorageBlob -Container $ContainerName -MaxCount $MaxReturn  -ContinuationToken $Token
     $Total += $Blobs.Count
     if($Blobs.Length -le 0) { Break;}
     $Token = $Blobs[$blobs.Count -1].ContinuationToken;
 }
 While ($null -ne $Token)

Echo "Total $Total blobs in container $ContainerName"

源-> https://learn.microsoft.com/en-us/powershell/module/az.storage/get-AzStorageblob?view=azps-8.2.0#example-4-list-blobs-in-multiple-batches

票数 0
EN

Stack Overflow用户

发布于 2022-08-20 16:48:05

默认情况下,runbooks在Azure沙箱上执行,这些沙箱是MS管理的机器,每个帐户/执行都有特定的资源配额,作为合理使用策略。

对于资源短缺和长期运行的作业,建议采用用户混合工作模式执行.

在这种模式下,您可以将机器添加为混合工作节点(可以是or或cloud ),这些节点有足够的资源来执行工作负载。

您可以在这里参考我的博客,以了解如何配置用于工作负载执行的混合工作节点和本地/云机器。

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

https://stackoverflow.com/questions/73289720

复制
相关文章

相似问题

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