Устранение неполадок в runbook

В этой статье описываются проблемы runbook, которые могут возникнуть, и способы их решения. Общие сведения см. в разделе Runbook execution in Cлужба автоматизации Azure.

Графические runbook'и рабочих процессов PowerShell с дочерними runbook'ами не удается выполнить

Проблема

Графические руководства рабочего процесса PowerShell с дочерними руководствами не выполняются как ожидается.

Причина

Чтобы повысить уровень безопасности графических рабочих процессов PowerShell Runbook, служба больше не выполняет графические рабочие процессы PowerShell Runbook вместе с дочерними сценариями.

Разрешение

Обходной путь — использовать Start-AzAutomationRunbook (из модуля Az.Automation) из родительского модуля Runbook для запуска дочернего модуля Runbook. Например, используйте блок InlineScript:


$job = Start-AzAutomationRunbook `

    -AutomationAccountName "MyAccount" `

    -ResourceGroupName "MyRG" `

    -Name "ReusableTaskRunbook" `

    -Parameters @{ TaskId = '1234' }

 

#Optional: Wait for job completion

do {

    Start-Sleep -Seconds 5

    $jobStatus = Get-AzAutomationJob -Id $job.Id -AutomationAccountName "MyAccount" -ResourceGroupName "MyRG"} while ($jobStatus.Status -ne "Completed")

Больше не удается использовать командлеты из импортированных модулей, не относящихся к умолчанию, в графических runbook-ах PowerShell.

Проблема

При импорте модуля PowerShell вы не сможете использовать его командлеты в графических модулях Runbook PowerShell.

Причина

Чтобы улучшить безопасность рабочих книг PowerShell, служба теперь не выполняет обработку файла манифеста модуля для экспорта командлетов и функций. Это означает, что их нельзя использовать при создании графических модулей Runbook PowerShell.

Разрешение

Нет влияния на выполнение существующих руководств по действиям. Для новых модулей Runbook, не использующих модули PowerShell по умолчанию, рекомендуется использовать текстовые модули Runbook вместо графических модулей Runbook PowerShell для преодоления этой проблемы. Расширение Cлужба автоматизации Azure для VS Code можно использовать для разработки и редактирования модулей Runbook PowerShell, которое использует GitHub Copilot для упрощения разработки модуля Runbook.

Ошибка при запуске Start-AzAutomationRunbook: "runbookName не соответствует ожидаемому шаблону".

Проблема

При запуске Start-AzAutomationRunbook, чтобы начать выполнение конкретных ранбуков:

start-azautomationRunbook -Name "Test_2" -AutomationAccountName "AutomationParent" -ResourceGroupName "AutomationAccount" 

Процесс завершился с ошибкой:

Start-AzAutomationRunbook: "runbookname" does not match expected pattern '^[a-zA-Z]*-*[a-zA-Z0-9]*$'

Причина

Код, представленный в версии 1.9.0 модуля Az.Automation, проверяет имена запускных книг и неправильно отмечает запускные книги с несколькими символами "-" или с символом "_" в имени как недопустимые.

Обходное решение

Рекомендуется вернуться к версии 1.8.0 модуля.

Разрешение

В настоящее время мы работаем над развертыванием исправления для решения этой проблемы.

Диагностика проблем в runbook системе

При получении ошибок во время выполнения модуля Runbook в Cлужба автоматизации Azure можно выполнить следующие действия, чтобы помочь диагностировать проблемы:

  1. Убедитесь, что скрипт runbook успешно выполнен на локальном компьютере.

    Справочные и учебные модули см. в документации PowerShell Docs или Python Docs. Выполнение скрипта локально может обнаруживать и устранять распространенные ошибки, например:

    • отсутствующие модули;
    • синтаксические ошибки;
    • логические ошибки.
  2. Изучите потоки ошибок в runbook.

    Просмотрите конкретные сообщения об ошибках в этих потоках и сопоставьте их с ошибками, описанными в этой статье.

  3. Убедитесь, что узлы и рабочая область службы автоматизации содержат необходимые модули.

    Если модуль Runbook импортирует все модули, убедитесь, что они доступны учетной записи службы автоматизации, выполнив действия, описанные в разделе "Импорт модулей". Обновите модули PowerShell до последней версии, следуя инструкциям в Обновление модулей Azure PowerShell в Cлужба автоматизации Azure. Дополнительные сведения об устранении неполадок см. в разделе "Устранение неполадок".

  4. Если выполнение runbook приостановлено или завершилось неожиданным сбоем, выполните следующие действия.

  5. Выполните этот шаг, если задание runbook или среда на гибридном агенте Runbook не отвечает.

    Если вы запускаете рабочие книги на Гибридном Рабочем Агенте Runbook, а не в Cлужба автоматизации Azure, может потребоваться установить неполадки самого гибридного рабочего агента.

Сценарий. Не удается создать новое задание автоматизации в регионе Западной Европы

Проблема

При создании новых заданий службы автоматизации вы можете столкнуться с задержкой или сбоем создания задания. Запланированные задания автоматически будут сняты, а задания, выполненные на портале, могут быть сняты, если вы увидите сбой.

Причина

Это связано с высокой нагрузкой, вызванной использованием клиентами рабочих книг в службе автоматизации в регионе Западная Европа.

Разрешение

Выполните следующее действие, если это возможно в соответствии с вашим требованием и средой, чтобы снизить вероятность сбоя:

  • Если вы используете начало часа для создания задания (в 12:00, 1:00, 2:00 и т. д.), обычно это бывает в начале или в середине часа, рекомендуется изменить время начала задания на пять минут раньше или позже начала/середины часа. Это связано с тем, что большинство клиентов используют начало часа для выполнения задания, что резко увеличивает нагрузку на службу, в то время как загрузка относительно низка в других слотах времени.

Сценарий: Runbook завершается с ошибкой "this.Client.SubscriptionId не может быть null".

Проблема

Модуль Runbook с помощью управляемого удостоверения Connect-AzAccount -Identity, который пытается управлять объектами Azure, не работает успешно и регистрирует следующую ошибку — this.Client.SubscriptionId cannot be null.

get-azvm : 'this.Client.SubscriptionId' cannot be null. At line:5 char:1 + get-azvm + ~~~~~~~~ + CategoryInfo : CloseError: (:) [Get-AzVM], ValidationException + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.GetAzureVMCommand

Причина

Это может произойти, если управляемое удостоверение (или другая учетная запись, используемая в runbook), не была предоставлена каких-либо разрешений на доступ к подписке.

Разрешение

Предоставьте управляемому удостоверению (или другой учетной записи, используемой в runbook) соответствующую роль в подписке. Подробнее

 снимок экрана, на котором показано назначение назначений ролей Azure.

Снимок экрана: добавление назначения ролей.

Сценарий: доступ к служба хранилища Azure, Azure Key Vault или Azure SQL заблокирован.

В этом сценарии в качестве примера используется служба хранилища Azure. Однако сведения также применимы к Azure Key Vault и Azure SQL.

Проблема

Попытка доступа к служба хранилища Azure из Runbook приводит к ошибке, аналогичной следующему сообщению: The remote server returned an error: (403) Forbidden. HTTP Status Code: 403 - HTTP Error Message: This request is not authorized to perform this operation.

Причина

Брандмауэр Azure для служба хранилища Azure включен.

Разрешение

Включение Брандмауэр Azure в служба хранилища Azure, Azure Key Vault или Azure SQL блокирует доступ из модулей Runbook Cлужба автоматизации Azure для этих служб. Доступ будет заблокирован даже при включении исключения брандмауэра для разрешения доверенных служб Microsoft, так как Automation не является частью списка доверенных служб. С включенным брандмауэром доступ возможен только с помощью гибридного рабочего узла Runbook и конечной точки службы виртуальной сети.

Сценарий: Runbook завершился с ошибкой «Нет разрешения» или «Запрещено 403»

Проблема

Ваша рабочая книга завершается с ошибкой "Нет разрешения", "Ошибка 403 Запрещено" или эквивалентной.

Причина

Учетные записи Run As могут не иметь тех же разрешений для ресурсов Azure, что и ваша текущая учетная запись службы автоматизации.

Разрешение

Убедитесь, что у учетной записи запуска от имени есть разрешения на доступ к любым ресурсам , используемым в скрипте.

Сценарий: сбой входа в учетную запись Azure

Проблема

При работе с командлетом Connect-AzAccount происходит одна из следующих ошибок.

Unknown_user_type: Unknown User Type
No certificate was found in the certificate store with thumbprint

Причина

Эта ошибка происходит, если указано недопустимое имя ресурса учетных данных. Ошибка также может произойти, если имя пользователя и пароль, которые вы ввели для настройки ресурса учетных данных службы автоматизации, указаны неправильно.

Разрешение

Чтобы определить причину ошибки, выполните следующие действия:

  1. Убедитесь, что у вас нет специальных символов. Эти символы включают символ \@ в имени ресурса учетных данных службы автоматизации, который вы используете для подключения к Azure.

  2. Проверьте, можно ли использовать имя пользователя и пароль, хранящиеся в учетных данных Cлужба автоматизации Azure в локальном редакторе сценариев PowerShell. В PowerShell ISE выполните следующие командлеты.

    $Cred = Get-Credential
    #Using Azure Service Management
    Add-AzureAccount -Credential $Cred
    #Using Azure Resource Manager
    Connect-AzAccount -Credential $Cred
    
  3. Если ваша проверка подлинности не удалась локально, вы некорректно настроили учетные данные Microsoft Entra. Чтобы правильно настроить учетную запись Microsoft Entra, см. статью Аутентификация в Azure с помощью Microsoft Entra ID.

  4. Если ошибка, скорее всего, временная, попробуйте добавить логику повторных попыток в процедуру проверки подлинности, чтобы сделать ее более надежной.

    $logonAttempt = 0
    $logonResult = $False
    
    while(!($connectionResult) -And ($logonAttempt -le 10))
    {
        $LogonAttempt++
        #Logging in to Azure...
        $connectionResult = Connect-AzAccount `
        Start-Sleep -Seconds 30
        if($connectionResult)
        {
           $logonResult = $True 
        }
    }
    

Сценарий: Выполните команду Login-AzureRMAccount для входа в систему

Проблема

При запуске модуля runbook отображается следующее сообщение об ошибке:

Run Login-AzureRMAccount to login.

Причина

Эта ошибка может произойти, если вы не используете учетную запись "Run As" или срок ее действия истек.

Эта ошибка происходит по двум основным причинам.

  • Используются разные версии модуля AzureRM или Az.
  • Вы пытаетесь получить доступ к ресурсам в отдельной подписке.

Разрешение

Если эта ошибка происходит после обновления одного модуля AzureRM или Az, обновите все модули до одной версии.

Если вы пытаетесь получить доступ к ресурсам в другой подписке, выполните следующие действия, чтобы настроить разрешения.

  1. Перейдите в учетную запись запуска от имени службы автоматизации и скопируйте идентификатор приложения и отпечаток.

    Копируйте идентификатор приложения и отпечаток

  2. Перейдите к управлению доступом подписки, где учетная запись службы автоматизации не размещена, и добавьте новое назначение роли.

    Управление доступом

  3. Добавьте идентификатор приложения , собранный ранее. Выберите разрешения участника .

    Добавление назначения ролей

  4. Скопируйте имя подписки.

  5. Теперь можно использовать следующий код runbook для проверки разрешений учетной записи службы автоматизации в другой подписке. Замените <CertificateThumbprint> значением, скопированным на шаге 1. Замените "<SubscriptionName>" значением, скопированным на шаге 4.

    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint "<CertificateThumbprint>"
    #Select the subscription you want to work with
    Select-AzSubscription -SubscriptionName '<YourSubscriptionNameGoesHere>'
    
    #Test and get outputs of the subscriptions you granted access.
    $subscriptions = Get-AzSubscription
    foreach($subscription in $subscriptions)
    {
        Set-AzContext $subscription
        Write-Output $subscription.Name
    }
    

Сценарий. Не удается найти подписку Azure

Проблема

Вы получаете следующую ошибку при работе с командлетами Select-AzureSubscription, Select-AzureRMSubscription или Select-AzSubscription:

The subscription named <subscription name> cannot be found.

Ошибка

Эта ошибка может произойти, если:

  • имя подписки указано неправильно;
  • Пользователь Microsoft Entra, который пытается получить сведения о подписке, не настроен в качестве администратора подписки.
  • Командлет недоступен.
  • Произошло переключение контекста.

Разрешение

Сведения о переключении контекста см. в разделе Переключение контекста в Cлужба автоматизации Azure.

Сценарий: сбой runbook в работе с несколькими подписками

Проблема

При выполнении модулей Runbook модуль Runbook не может управлять Azure ресурсами.

Причина

При запуске модуля runbook используется неправильный контекст. Это может быть вызвано тем, что модуль runbook случайно пытается получить доступ к неверной подписке.

Могут возникнуть следующие ошибки:

Get-AzVM : The client '<client-id>' with object id '<object-id> does not have authorization to perform action 'Microsoft.Compute/virtualMachines/read' over scope '/subscriptions/<subscriptionIdOfSubscriptionWhichDoesntContainTheVM>/resourceGroups/REsourceGroupName/providers/Microsoft.Compute/virtualMachines/VMName '.
   ErrorCode: AuthorizationFailed
   StatusCode: 403
   ReasonPhrase: Forbidden Operation
   ID : <AGuidRepresentingTheOperation> At line:51 char:7 + $vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $UNBV... +

Или, как этот пример:

Get-AzureRmResource : Resource group "SomeResourceGroupName" could not be found.
... resources = Get-AzResource -ResourceGroupName $group.ResourceGro ...
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzResource], CloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResourceCmdlet

Разрешение

Чтобы избежать случайной попытки доступа к неправильной подписке, см. раздел Переключение контекста в Cлужба автоматизации Azure.

Сценарий. Проверка подлинности для Azure завершается ошибкой, так как включена многофакторная проверка подлинности

Проблема

При проверке подлинности в Azure с помощью имени пользователя и пароля Azure возникает следующая ошибка:

Add-AzureAccount: AADSTS50079: Strong authentication enrollment (proof-up) is required

Причина

Если у вас есть многофакторная проверка подлинности в учетной записи Azure, вы не можете использовать Microsoft Entra пользователя для проверки подлинности в Azure. Вместо этого используйте для аутентификации сертификат или учетную запись службы.

Разрешение

Сведения об использовании сущности-службы с командлетами Azure Resource Manager см. в разделе Создание сущности-службы с помощью портала Azure и Аутентификация сущности-службы с помощью Azure Resource Manager.

Сценарий. Сбой runbook с сообщением об ошибке "Задача была отменена"

Проблема

В модуле Runbook возникает ошибка, аналогичная приведенной ниже:

Exception: A task was cancelled.

Причина

Эта ошибка может быть вызвана использованием устаревших модулей Azure.

Разрешение

Эту ошибку можно устранить, обновив модули Azure до последней версии:

  1. В учетной записи службы автоматизации выберите Модули, затем обновите их, используя пункт Обновить модули Azure.
  2. Обновление занимает примерно 15 минут. После его завершения повторно запустите runbook, который завершился сбоем.

Дополнительные сведения об обновлении модулей см. в разделе Обновление модулей Azure в Cлужба автоматизации Azure.

Сценарий: Термин не распознан как имя командлета, функции или скрипта

Проблема

В модуле Runbook возникает ошибка, аналогичная приведенной ниже:

The term 'Connect-AzAccount' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if the path was included verify that the path is correct and try again.

Причина

Эта ошибка может происходить по следующим причинам:

  • Модуль, содержащий командлет, не импортирован в учетную запись службы автоматизации.
  • Модуль, содержащий командлет, импортирован, но устарел.

Разрешение

Чтобы устранить эту ошибку, выполните одно из следующих действий.

  • Сведения о модуле Azure см. в статье How to update Azure PowerShell modules in Cлужба автоматизации Azure, чтобы узнать, как обновить модули в учетной записи службы автоматизации.
  • Для модуля, отличного от Azure, убедитесь, что модуль импортируется в учетную запись службы автоматизации.

Сценарий: Сбой кмдлета в "runbook" PowerShell PnP на Cлужба автоматизации Azure

Проблема

Когда Runbook записывает объект, созданный с помощью PnP PowerShell, непосредственно в выходные данные Cлужба автоматизации Azure, выходные данные командлета не могут быть возвращены в Cлужба автоматизации Azure.

Причина

Эта проблема чаще всего возникает, когда Cлужба автоматизации Azure обрабатывает модули Runbook, вызывающие командлеты PowerShell PnP, например add-pnplistitem без перехвата возвращаемых объектов.

Разрешение

Измените скрипты, чтобы все возвращаемые значения присваивались переменным, а командлеты не пытались записывать целые объекты в стандартный поток вывода. Скрипт может перенаправить поток вывода в командлет, как показано ниже.

  $null = add-pnplistitem

Если скрипт анализирует выходные данные командлета, он должен сохранять их в переменной и оперировать ею, а не просто передавать эти выходные данные потоком.

$SomeVariable = add-pnplistitem ....
if ($SomeVariable.someproperty -eq ....

Сценарий: не удается распознать командлет при выполнении модуля Runbook

Проблема

Выполнение задания Runbook завершилось ошибкой.

<cmdlet name>: The term <cmdlet name> is not recognized as the name of a cmdlet, function, script file, or operable program.

Причина

Эта ошибка возникает, когда движку PowerShell не удается найти командлет, который вы используете в рабочем журнале. Такое возможно, когда в учетной записи отсутствует модуль, содержащий командлет, когда возникает конфликт имен с именем runbook, а также когда командлет существует и в другом модуле, а службе автоматизации не удается разрешить имя.

Разрешение

Эту проблему можно устранить любым из следующих способов.

  • Проверьте правильность ввода имени командлета.
  • Убедитесь, что командлет существует в вашей учетной записи Automation, и конфликты отсутствуют. Чтобы проверить наличие командлета, откройте runbook в режиме редактирования и найдите требуемый командлет в библиотеке или выполните команду Get-Command <CommandName>. Убедившись, что командлет доступен учетной записи и отсутствует конфликт имен с другими командлетами или руководствами, добавьте его на холст. Убедитесь, что в вашей рабочей книге используется допустимый набор параметров.
  • Если обнаружен конфликт имен, а сам командлет доступен в двух разных модулях, эту проблему можно решить использованием полностью квалифицированного имени командлета. Например, вы можете использовать значение ModuleName\CmdletName.
  • Если runbook выполняется локально в группе гибридных рабочих ролей, убедитесь, что на компьютере, где размещена гибридная рабочая роль, установлен соответствующий модуль или командлет.

Сценарий: неправильная ссылка на объект при вызове Add-AzAccount

Проблема

Вы получаете эту ошибку при работе с Add-AzAccount, который является псевдонимом командлета Connect-AzAccount.

Add-AzAccount : Object reference not set to an instance of an object

Причина

Эта ошибка может происходить, если runbook не выполняет нужных действий перед вызовом Add-AzAccount для добавления учетной записи службы автоматизации. Примером одного из необходимых действий может служить вход с использованием учетной записи "Запуск от имени". Правильные операции, используемые в runbook, см. в разделе Runbook execution in Cлужба автоматизации Azure.

Сценарий: Ссылка на объект не установлена для экземпляра объекта

Проблема

Если поток вывода содержит объект, при вызове дочерней последовательности runbook с параметром Wait происходит следующая ошибка:

Object reference not set to an instance of an object

Причина

Если поток содержит объекты, Start-AzAutomationRunbook неправильно обрабатывает поток вывода.

Разрешение

Реализуйте логику опроса и используйте командлет Get-AzAutomationJobOutput для получения выходных данных. Пример этой логики определяется здесь:

$AutomationAccountName = "ContosoAutomationAccount"
$RunbookName = "ChildRunbookExample"
$ResourceGroupName = "ContosoRG"

function IsJobTerminalState([string]$Status) {
  $TerminalStates = @("Completed", "Failed", "Stopped", "Suspended")
  return $Status -in $TerminalStates
}

$StartAzAutomationRunbookParameters = @{
  Name = $RunbookName
  AutomationAccountName = $AutomationAccountName
  ResourceGroupName = $ResourceGroupName
}
$Job = Start-AzAutomationRunbook @StartAzAutomationRunBookParameters
$PollingSeconds = 5
$MaxTimeout = New-TimeSpan -Hours 3 | Select-Object -ExpandProperty TotalSeconds
$WaitTime = 0
while(-NOT (IsJobTerminalState $Job.Status) -and $WaitTime -lt $MaxTimeout) {
   Start-Sleep -Seconds $PollingSeconds
   $WaitTime += $PollingSeconds
   $Job = $Job | Get-AzAutomationJob
}

$Job | Get-AzAutomationJobOutput | Get-AzAutomationJobOutputRecord | Select-Object -ExpandProperty Value

Сценарий: ошибка в модуле Runbook из-за десериализованного объекта

Проблема

Выполнение модуля Runbook завершилось ошибкой.

Cannot bind parameter <ParameterName>.

Cannot convert the <ParameterType> value of type Deserialized <ParameterType> to type <ParameterType>.

Причина

Когда runbook является рабочим процессом PowerShell, сложные объекты хранятся в десериализированном формате для сохранения состояния runbook в случае приостановки рабочего процесса.

Разрешение

Эту проблему можно устранить любым из следующих способов.

  • Если сложные объекты передаются от одного командлета к другому через конвейер, используйте в качестве оболочки для этих командлетов действие InlineScript.
  • Передайте только требуемое имя или значение сложного объекта, а не весь объект.
  • Используйте руководство PowerShell вместо руководства PowerShell Workflow.

Сценарий. Состояние "400 — недопустимый запрос" при вызове веб-перехватчика.

Проблема

При попытке вызова webhook для runbook службы Cлужба автоматизации Azure возникает следующая ошибка:

400 Bad Request : This webhook has expired or is disabled

Причина

Веб-перехватчик, к которому вы пытаетесь обратиться, либо отключен, либо его срок действия истек.

Разрешение

Если веб-перехватчик отключен, его можно повторно включить с помощью портала Azure. Если срок действия веб-перехватчика истек, его необходимо удалить, а затем создать заново. Вы можете обновить вебхук только в том случае, если он еще не истек.

Сценарий. "429: слишком большая текущая частота запросов"

Проблема

При выполнении командлета Get-AzAutomationJobOutput возникает следующее сообщение об ошибке:

429: The request rate is currently too large. Please try again

Причина

Эта ошибка может возникать при получении выходных данных задания из модуля Runbook с множеством подробных потоков.

Разрешение

Чтобы устранить эту ошибку, выполните одно из следующих действий.

  • Измените модуль Runbook и уменьшите количество потоков заданий, которые он выдает.
  • уменьшите количество потоков, полученных при выполнении командлета. Для этого можно задать значение параметра Stream для командлета Get-AzAutomationJobOutput, чтобы извлечь только потоки вывода. ​

Сценарий. Сбой задания Runbook из-за превышения выделенной квоты

Проблема

Выполнение задания Runbook завершилось ошибкой.

The quota for the monthly total job run time has been reached for this subscription

Причина

Эта ошибка возникает, когда время выполнения задания превышает квоту для учетной записи в 500 бесплатных минут. Эта квота применяется ко всем типам задач на выполнение заданий. Некоторые из этих задач включают тестирование задания, запуск задания из портала, выполнение задания с помощью вебхуков или планирование выполнения задания с помощью портала Azure или вашего датацентра. Дополнительные сведения о ценах на автоматизацию см. в разделе "Цены на службу автоматизации".

Разрешение

Если на обработку вам требуется более 500 минут в месяц, выберите для подписки уровень "Базовый" вместо уровня "Бесплатный".

  1. Войдите в подписку Azure.
  2. Выберите учетную запись службы автоматизации, которую вы хотите обновить.
  3. Выберите "Параметры" и выберите "Цены".
  4. Нажмите кнопку "Включить " внизу страницы, чтобы обновить учетную запись до уровня "Базовый".

Сценарий: поток вывода runbook больше 1 МБ

Проблема

Модуль Runbook, работающий в песочнице Azure, завершается следующей ошибкой.

The runbook job failed due to a job stream being larger than 1MB, this is the limit supported by an Azure Automation sandbox.

Причина

Данная ошибка возникла потому, что ваш runbook попытался записать чрезмерное количество данных об ошибке в выводной поток данных.

Разрешение

Для потока вывода задания установлено ограничение в 1 МБ. Убедитесь, что ваш runbook обрамляет вызовы к исполняемому файлу или подпроцессу с помощью блоков try и catch. Если операции приводят к исключению, код будет записывать сообщение из исключения в переменную службы автоматизации. Метод предотвращает запись сообщения в поток вывода задания. При выполнении заданий гибридного рабочего процесса Runbook отображается поток вывода, усеченный до 1 МБ, и никакие сообщения об ошибках не выводятся.

Сценарий: Предприняты три попытки запуска задания runbook, но ни одна из них не увенчалась успехом.

Проблема

Ваша инструкция runbook завершается сбоем с такой ошибкой:

The job was tried three times but it failed

Причина

Эта ошибка происходит из-за одной из следующих проблем.

  • Предельный объем памяти. Задание может завершиться ошибкой, если оно использует более 400 МБ памяти. Задокументированные ограничения на память, выделенную для sandbox, находятся в разделе "Ограничения службы автоматизации".

  • Сетевые сокеты. Azure песочницы ограничены 1000 параллельными сетевыми сокетами. Дополнительные сведения см. в разделе об ограничениях службы автоматизации.

  • Несовместим модуль. Зависимости модуля могут быть неправильными. В этом случае runbook обычно возвращает сообщение Command not found или Cannot bind parameter.

  • Отсутствие проверки подлинности Active Directory для песочницы. Модуль Runbook попытался вызвать исполняемый файл или подпроцесс, который выполняется в песочнице Azure. Настройка рабочих книг для аутентификации с Microsoft Entra ID с использованием библиотеки аутентификации Azure Active Directory (ADAL) не поддерживается.

Разрешение

  • Ограничение памяти, сетевые сокеты. Чтобы избежать превышения предельного объема памяти, рекомендуется разделить рабочую нагрузку между несколькими последовательностями runbook, не обрабатывать слишком большой объем данных в памяти, не записывать ненужные выходные данные из последовательностей runbook и учитывать, сколько контрольных точек записывается в последовательности runbook рабочих процессов PowerShell. Чтобы очистить переменные, используйте метод $myVar.clear, а для немедленного запуска сборки мусора используйте [GC]::Collect. Эти действия уменьшают объем памяти, занимаемой рабочим сценарием во время выполнения программы.

  • Несовместим модуль. Обновите модули Azure, следуя инструкциям в разделе Как обновить модули Azure PowerShell в Cлужба автоматизации Azure.

  • Отсутствие проверки подлинности Active Directory для песочницы. При проверке подлинности в Microsoft Entra ID с помощью модуля Runbook убедитесь, что модуль Azure AD доступен в учетной записи службы автоматизации. Не забудьте предоставить учетной записи Run As необходимые права для выполнения задач, автоматизированных последовательностью runbook.

    Если модуль Runbook не может вызывать исполняемый файл или подпроцесс, запущенный в песочнице Azure, используйте модуль Runbook в Hybrid Runbook Worker. Гибридные работники не ограничены по памяти и сетевым возможностям, как это происходит в песочницах Azure.

Сценарий. Сбой задания PowerShell с сообщением об ошибке "Не удается вызвать метод"

Проблема

При запуске задания PowerShell в runbook, работающем в Azure, вы получите следующее сообщение об ошибке:

Exception was thrown - Cannot invoke method. Method invocation is supported only on core types in this language mode.

Причина

Эта ошибка может указывать на то, что модули Runbook, выполняемые в песочнице Azure, не могут выполняться в режиме языка Full Language.

Разрешение

Эту проблему можно решить двумя способами:

  • Вместо использования start-job используйте Start-AzAutomationRunbook для запуска модуля Runbook.
  • Попытайтесь запустить runbook с использованием гибридной рабочей роли Runbook.

Дополнительные сведения об этом поведении и других поведениях рабочих книг Cлужба автоматизации Azure см. в статье Runbook execution in Cлужба автоматизации Azure.

Сценарий: выполнение последовательности runbook длится долго и не завершается

Проблема

Ваша инструкция runbook отображается в состоянии "Остановлено" после трех часов выполнения. Возможно, отобразится следующее сообщение об ошибке:

The job was evicted and subsequently reached a Stopped state. The job cannot continue running.

Это поведение характерно для песочниц Azure из-за мониторинга процессов, основанного на принципе справедливого распределения ресурсов в Cлужба автоматизации Azure. Если последовательность runbook выполняется дольше трех часов, служба справедливого распределения останавливает ее. Состояние runbook, для которых превышено предельное время справедливого использования, зависит от его типа. Для модулей Runbook PowerShell и Python задано состояние "Остановлено". Выполнение привычных рабочих процессов в PowerShell не удалось и завершилось с ошибкой.

Причина

Runbook превысил трехчасовой лимит, разрешенный согласно политике справедливого распределения ресурсов в песочнице Azure.

Разрешение

Одним из рекомендуемых решений является запуск модуля Runbook в гибридной рабочей роли Runbook. Гибридные сотрудники не ограничены трехчасовым лимитом справедливого использования runbook, который есть в песочницах Azure. Рабочие процессы, выполняемые на гибридных рабочих агентах Runbook, следует разрабатывать с функцией поддержки перезапуска в случае возникновения непредвиденных проблем локальной инфраструктуры.

Другим решением является оптимизация модуля Runbook путем создания дочерних модулей Runbook. Если последовательность runbook циклически выполняет одну и ту же функцию для ряда ресурсов, например определенную операцию в нескольких базах данных, такую функцию можно переместить в дочернюю последовательность runbook. Каждый дочерний runbook выполняется в отдельных процессах параллельно. Это уменьшает количество времени на завершение родительского модуля runbook.

Командлеты PowerShell, которые поддерживают сценарий дочернего runbook:

  • Start-AzAutomationRunbook. Этот командлет позволяет запустить runbook и передать в него параметры.
  • Get-AzAutomationJob. Если есть операции, которые нужно выполнить после завершения дочерней книги операций, этот командлет позволяет проверить состояние задания для каждой дочерней книги операций.

Сценарий. Ошибка в потоках заданий из-за метода get_SerializationSettings

Проблема

В потоках задания для runbook выявляется следующая ошибка:

Connect-AzAccount : Method 'get_SerializationSettings' in type
'Microsoft.Azure.Management.Internal.Resources.ResourceManagementClient' from assembly
'Microsoft.Azure.Commands.ResourceManager.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
does not have an implementation.
At line:16 char:1
+ Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -Appl ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Connect-AzAccount], TypeLoadException
    + FullyQualifiedErrorId : System.TypeLoadException,Microsoft.Azure.Commands.Profile.ConnectAzAccountCommand

Причина

Возможно, эта ошибка вызвана неполной миграцией из AzureRM в модули Az в вашем runbook. Эта ситуация может привести к тому, что Cлужба автоматизации Azure запустит задание Runbook только с помощью модулей AzureRM, а затем запустит другое задание только с помощью модулей Az, что вызывает сбой песочницы.

Разрешение

Мы не рекомендуем использовать командлеты Az и AzureRM в одной последовательности runbook. Дополнительные сведения о правильном использовании модулей см. в разделе Переход на модули Az.

Сценарий: Доступ запрещен при использовании песочницы Azure для runbook или приложения

Проблема

Когда сценарий или приложение пытаются запускаться в среде песочницы Azure, доступ к среде запрещается.

Причина

Эта проблема может возникнуть, так как Azure песочницы препятствуют доступу ко всем внепроцессным COM-серверам. Например, изолированное приложение или модуль Runbook не могут вызывать инструментарий управления Windows (WMI) или службу установщика Windows (msiserver.exe).

Разрешение

Дополнительные сведения об использовании песочниц Azure см. в разделе Среда выполнения Runbook.

Сценарий: Некорректный код состояния "Запрещено" при использовании Key Vault внутри рабочего процесса

Проблема

При попытке получить доступ к Azure Key Vault через модуль Runbook Cлужба автоматизации Azure вы получите следующую ошибку:

Operation returned an invalid status code 'Forbidden'

Причина

Возможны следующие причины этой проблемы.

  • Не используется учетная запись запуска от имени.
  • Недостаточно разрешений.

Разрешение

Не используется учетная запись «Запустить от имени»

Следуйте инструкциям Step 5 - Добавьте проверку подлинности для управления ресурсами Azure, чтобы убедиться, что вы используете учетную запись 'Запуск от имени' для доступа к Key Vault.

Недостаточно разрешений

Добавьте разрешения для Key Vault, чтобы убедиться, что у учетной записи запуска от имени есть достаточные разрешения для доступа к Key Vault.

Сценарий: сбой Runbook из-за ошибки "Parameter length exceeded"

Проблема

Runbook использует параметры и завершается сбоем со следующей ошибкой:

Total Length of Runbook Parameter names and values exceeds the limit of 30,000 characters. To avoid this issue, use Automation Variables to pass values to runbook.

Причина

Существует ограничение на общую длину символов всех параметров, которые могут быть предоставлены в модулях Runbook Python 2.7, Python 3.8 и PowerShell 7.1. Общая длина всех имен параметров и значений параметров не должна превышать 30 000 символов.

Разрешение

Чтобы устранить эту проблему, можно использовать Cлужба автоматизации Azure Variables для передачи значений в runbook. Кроме того, можно уменьшить количество символов в именах параметров и значениях параметров, чтобы общая длина не превышала 30 000 символов.

Следующие шаги

Если вы не нашли здесь свою проблему или вам не удалось ее решить, попробуйте использовать один из следующих каналов для получения дополнительной поддержки.