Solucionar problemas de runbook
Este artigo descreve problemas de runbook que podem ocorrer e como resolvê-los. Para obter informações gerais, consulte Execução de runbooks na Automação do Azure.
Não é mais possível usar cmdlets de módulos não padrão importados em runbooks gráficos do PowerShell
Problema
Ao importar um módulo do PowerShell, você não poderá usar seus cmdlets em runbooks gráficos do PowerShell.
Causa
Para melhorar a postura de segurança dos runbooks do PowerShell, o serviço não processa mais o arquivo de manifesto do módulo para exportar os cmdlets e as funções. Isso significa que eles não podem ser usados ao criar runbooks gráficos do PowerShell.
Resolução
Não há nenhum impacto na execução de runbooks existentes. Para novos runbooks que usam módulos não padrão do PowerShell, recomendamos usar runbooks textuais em vez de runbooks gráficos do PowerShell para superar esse problema. Você pode usar a extensão de Automação do Azure para VScode para criar e editar runbooks do PowerShell, que aproveita o GitHub Copilot para simplificar a experiência de criação de runbook.
Start-AzAutomationRunbook falha com a mensagem de erro "runbookName não corresponde ao padrão esperado"
Problema
Ao executar Start-AzAutomationRunbook
para iniciar runbooks específicos:
start-azautomationRunbook -Name "Test_2" -AutomationAccountName "AutomationParent" -ResourceGroupName "AutomationAccount"
Falha na execução com o seguinte erro:
Start-AzAutomationRunbook: "runbookname" does not match expected pattern '^[a-zA-Z]*-*[a-zA-Z0-9]*$'
Causa
O código introduzido na versão 1.9.0 do módulo Az.Automation verifica os nomes dos runbooks para iniciar e sinaliza incorretamente runbooks com vários caracteres "-" ou com um caractere "_" no nome como inválido.
Solução alternativa
Recomendamos que você reverta para a versão 1.8.0 do módulo.
Resolução
Atualmente, estamos trabalhando para implantar uma correção para resolver esse problema.
Diagnosticar problemas de runbook
Ao receber erros durante a execução do runbook na Automação do Azure, você pode usar as seguintes etapas para ajudar a diagnosticar os problemas:
Verifique se o script de runbook é executado com êxito no computador local.
Para obter referências de linguagem de programação e módulos de aprendizado, consulte a Documentação do PowerShell ou Documentação do Python. Executar o script localmente pode descobrir e resolver erros comuns, como:
- Módulos ausentes
- Erros de sintaxe
- Erros de lógica
Investigue osfluxos de erro de runbook.
Examine se há mensagens específicas nestes fluxos e compare-as com os erros documentados neste artigo.
Verifique se seus nós e o workspace da Automação têm os módulos necessários.
Se o runbook importar módulos, verifique se eles estão disponíveis para sua conta de Automação usando as etapas em Importar módulos. Atualize seus módulos do PowerShell para a versão mais recente seguindo as instruções em Atualizar módulos do Azure PowerShell na Automação do Azure. Para obter mais informações sobre a solução de problemas, confira Solucionar problemas de módulos.
Se o runbook for suspenso ou falhar inesperadamente:
- Renove o de webhook se você estiver tentando usar um webhook expirado para iniciar o runbook.
- Verifique os status do trabalho para determinar os status atuais do runbook e algumas das possíveis causas do problema.
- Adicione outra saída ao runbook para identificar o que acontece antes da suspensão do runbook.
- Lidar com exceções lançadas por seu trabalho.
Execute esta etapa se o trabalho de runbook ou o ambiente em Hybrid Runbook Worker não responder.
Se você estiver executando seus runbooks em um Hybrid Runbook Worker em vez de na Automação do Azure, talvez seja necessário solucionar problemas do próprio trabalhador híbrido.
Cenário: não é possível criar um novo trabalho de Automação na região Oeste da Europa
Problema
Ao criar novos trabalhos de Automação, você pode enfrentar um atraso ou uma falha. Os trabalhos agendados são desativados automaticamente e aqueles executados através do portal podem ser desativados em caso de falhas.
Causa
Isso ocorre devido à alta carga dos runbooks dos clientes que usam o serviço de Automação na região Oeste da Europa.
Resolução
Execute a ação a seguir, caso viável de acordo com seus requisitos e seu ambiente, para reduzir a probabilidade de falhas:
- Quando você usa o início da hora para a criação do trabalho (às 12:00, 13:00, 14:00 e assim por diante.), normalmente na hora exata ou em metade da hora, a recomendação é mover o trabalho da hora de início para cinco minutos antes ou depois da hora exata/metade da hora. Isso ocorre porque a maioria dos clientes utiliza o início da hora para a execução de trabalhos, o que aumenta drasticamente a carga do serviço quando comparado a outros horários, em que a carga é relativamente baixa.
Cenário: ocorreu uma falha no runbook com a mensagem de erro "this.Client.SubscriptionId cannot be null".
Problema
Seu runbook que usa uma identidade gerenciada Connect-AzAccount -Identity, que tenta gerenciar os objetos do Azure, não funciona com sucesso e registra o seguinte erro: 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
Causa
Isso pode acontecer quando a Identidade Gerenciada (ou outra conta usada no runbook) não recebeu nenhuma permissão para acessar a assinatura.
Resolução
Conceda à Identidade Gerenciada (ou outra conta usada no runbook) uma associação de função apropriada na assinatura. Saiba mais
Cenário: acesso bloqueado ao Armazenamento do Azure ou ao Azure Key Vault ou ao SQL do Azure
Este cenário usa o Armazenamento do Microsoft Azure como um exemplo. No entanto, as informações são igualmente aplicáveis ao Azure Key Vault e ao SQL do Azure.
Problema
A tentativa de acessar o Armazenamento do Microsoft Azure de um runbook resulta em um erro semelhante à seguinte mensagem: The remote server returned an error: (403) Forbidden. HTTP Status Code: 403 - HTTP Error Message: This request is not authorized to perform this operation.
Causa
O Firewall do Azure no Armazenamento do Microsoft Azure está habilitado.
Resolução
Habilitar o Firewall do Azure no Armazenamento do Microsoft Azure, no Azure Key Vault ou no SQL do Azure bloqueia o acesso dos runbooks da Automação do Azure para esses serviços. O acesso será bloqueado mesmo quando a exceção de firewall para permitir que serviços Microsoft confiáveis estiver habilitada, pois a Automação não faz parte da lista de serviços confiáveis. Com um firewall habilitado, o acesso só pode ser feito usando um Hybrid Runbook Worker e um ponto de extremidade de serviço de rede virtual.
Cenário: falha no runbook com um erro Sem permissão ou Proibido 403
Problema
Falha no runbook com um erro Sem permissão ou Proibido 403 ou equivalente.
Causa
As contas Executar Como não podem ter as mesmas permissões da sua conta atual de Automação, em relação aos recursos do Azure.
Resolução
Verifique se a conta Executar Como tem permissões para acessar recursos usados no script.
Cenário: Falha ao entrar na conta do Azure
Problema
Você recebe um dos seguintes erros ao trabalhar com o cmdlet Connect-AzAccount
:
Unknown_user_type: Unknown User Type
No certificate was found in the certificate store with thumbprint
Causa
Esses erros ocorrem se o ativo da credencial é inválido. Eles também podem ocorrer se o nome de usuário e a senha usados para configurar o ativo da credencial de Automação são inválidos.
Resolução
Para determinar o que está errado, siga estas etapas:
Não use caracteres especiais. Esses caracteres incluem o caractere
\@
no nome do ativo da credencial de Automação que você está usando para se conectar ao Azure.Verifique se você pode usar o nome de usuário e a senha que estão armazenados na credencial da Automação do Azure no editor do ISE do PowerShell local. Execute os seguintes cmdlets no ISE do PowerShell.
$Cred = Get-Credential #Using Azure Service Management Add-AzureAccount -Credential $Cred #Using Azure Resource Manager Connect-AzAccount -Credential $Cred
Se sua autenticação falhar localmente, você não configurou suas credenciais do Microsoft Entra corretamente. Para configurar a conta do Microsoft Entra corretamente, consulte o artigo Autenticar no Azure usando o Microsoft Entra ID.
Se o erro parecer ser transitório, tente adicionar lógica de nova tentativa à sua rotina de autenticação para tornar a autenticação mais robusta.
$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 } }
Cenário: Executar Login-AzureRMAccount para fazer logon
Problema
Você recebe o seguinte erro ao executar um runbook:
Run Login-AzureRMAccount to login.
Causa
Esse erro pode ocorrer quando você não está usando uma conta Executar Como ou quando a conta Executar Como expirou.
Esse erro tem duas causas principais:
- Há versões diferentes do módulo AzureRM ou Az.
- Você está tentando acessar recursos em uma assinatura separada.
Resolução
Se você receber esse erro depois de atualizar um módulo AzureRM ou AZ, atualize todos os seus módulos para a mesma versão.
Se você estiver tentando acessar recursos em outra assinatura, siga estas etapas para configurar permissões:
Vá para a conta Executar Como de Automação e copie a ID do aplicativo e Impressão digital.
Acesse o Controle de acesso da assinatura em que a conta da Automação do Azure não está hospedada e adicione uma nova atribuição de função.
Adicionar a ID do aplicativo coletada anteriormente. Selecionar permissões do Colaborador.
Copiar o nome da assinatura.
Agora você pode usar o seguinte código de runbook para testar as permissões de sua conta de Automação para a outra assinatura. Substitua
<CertificateThumbprint>
pelo valor copiado na etapa 1. Substitua"<SubscriptionName>"
pelo valor copiado na etapa 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 }
Cenário: não é possível localizar a assinatura do Azure
Problema
Você recebe o seguinte erro ao trabalhar com os cmdlets Select-AzureSubscription
, Select-AzureRMSubscription
ou Select-AzSubscription
:
The subscription named <subscription name> cannot be found.
Erro
Esse erro pode acontecer se:
- O nome da assinatura não é válido.
- O usuário do Microsoft Entra que está tentando obter os detalhes da assinatura não está configurado como um administrador da assinatura.
- O cmdlet não está disponível.
- A alternância de contexto ocorreu.
Resolução
Para a alternância de contexto, confira Alternância de contexto na Automação do Azure.
Cenário: os runbooks falham ao lidar com várias assinaturas
Problema
Ao executar runbooks, o runbook falha ao gerenciar recursos do Azure.
Causa
O runbook não está usando o contexto correto durante a execução. Isso pode ser devido ao runbook tentar acessar acidentalmente a assinatura incorreta.
Você poderá ver erros como este:
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... +
ou como este:
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
Resolução
Para evitar a tentativa de acessar acidentalmente a assinatura incorreta, confira Alternância de contexto na Automação do Azure.
Cenário: A Autenticação do Azure falhou porque a autenticação multifator está habilitada
Problema
Você recebe o seguinte erro ao autenticar no Azure com seu nome de usuário e senha do Azure:
Add-AzureAccount: AADSTS50079: Strong authentication enrollment (proof-up) is required
Causa
Se você tiver a autenticação multifator em sua conta do Azure, você não pode usar um usuário do Microsoft Entra para autenticar no Azure. Em vez disso, você precisa usar um certificado ou uma entidade de serviço para se autenticar.
Resolução
Para usar uma entidade de serviço com os cmdlets do Azure Resource Manager, veja Criando entidade de serviço usando o portal do Azure e Autenticando uma entidade de serviço com o Azure Resource Manager.
Cenário: O runbook falha com a mensagem de erro "Uma tarefa foi cancelada"
Problema
Seu runbook falha com um erro semelhante ao exemplo a seguir:
Exception: A task was cancelled.
Causa
Esse erro pode ser causado por meio de módulos do Azure desatualizados.
Resolução
Esse erro pode ser resolvido atualizando os módulos do Azure para a versão mais recente:
- Na sua conta de Automação, selecione Módulose depois Atualizar módulos do Azure.
- A atualização leva aproximadamente 15 minutos. Após a conclusão, execute novamente o runbook que falhou.
Para saber mais sobre como atualizar seus módulos, confira Atualizar módulos do Azure na Automação do Azure.
Cenário: Termo não reconhecido como o nome de um cmdlet, uma função ou um script
Problema
Seu runbook falha com um erro semelhante ao exemplo a seguir:
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.
Causa
Esse erro pode ocorrer pelos seguintes motivos:
- O módulo que contém o cmdlet não é importado para a conta de Automação.
- O módulo que contém o cmdlet é importado, mas está desatualizado.
Resolução
Execute uma das seguintes tarefas para resolver esse erro:
- Para um módulo do Azure, consulte Como atualizar módulos do Azure PowerShell na Automação do Azure para saber como atualizar os módulos em sua conta de Automação.
- Para um módulo não Azure, verifique que o módulo seja importado para sua conta de Automação.
Cenário: Falha do cmdlet no runbook do PnP PowerShell na Automação do Azure
Problema
Quando um runbook grava um objeto gerado por PnP PowerShell na saída de Automação do Azure diretamente, a saída do cmdlet não pode transmitir de volta para a Automação.
Causa
Esse problema geralmente ocorre quando a Automação do Azure processa runbooks que invocam cmdlets do PnP PowerShell, por exemplo, add-pnplistitem
, sem capturar os objetos de retorno.
Resolução
Edite seus scripts para atribuir quaisquer valores de retorno às variáveis para que os cmdlets não tentem gravar objetos inteiros na saída padrão. Um script pode redirecionar o fluxo de saída para um cmdlet, como mostrado aqui.
$null = add-pnplistitem
Se o script analisar a saída do cmdlet, o script precisa armazenar a saída em uma variável e manipular a variável em vez de simplesmente transmitir a saída.
$SomeVariable = add-pnplistitem ....
if ($SomeVariable.someproperty -eq ....
Cenário: cmdlet não reconhecido ao se executar um runbook
Problema
O trabalho de runbook falha com o erro:
<cmdlet name>: The term <cmdlet name> is not recognized as the name of a cmdlet, function, script file, or operable program.
Causa
Esse erro é causado quando o mecanismo do PowerShell não consegue encontrar o cmdlet que você está usando no seu runbook. É possível que o módulo que contém o cmdlet está ausente da conta, que há um conflito de nome com um nome de runbook ou que o cmdlet também existe em outro módulo e a Automação não pode resolver o nome.
Resolução
Use qualquer uma das seguintes soluções para corrigir o problema:
- Verifique se você inseriu o nome do cmdlet corretamente.
- Verifique se o cmdlet existe em sua conta de Automação e se não há conflitos. Para verificar se o cmdlet está presente, abra um runbook no modo de edição e a pesquise o cmdlet que você deseja localizar na biblioteca, ou execute
Get-Command <CommandName>
. Depois de validar que o cmdlet está disponível para a conta e que não há conflitos de nome com outros cmdlets ou runbooks, adicione o cmdlet à tela. Verifique se você está usando um conjunto de parâmetros válido em seu runbook. - Se houver um conflito de nomes e o cmdlet estiver disponível em dois módulos diferentes, resolva o problema usando o nome totalmente qualificado do cmdlet. Por exemplo, você pode usar
ModuleName\CmdletName
. - Se você estiver executando o runbook localmente em um grupo de trabalhadores híbridos, verifique se o módulo e cmdlet estão instalados no computador que hospeda o trabalhador híbrido.
Cenário: referência de objeto incorreta na chamada para Add-AzAccount
Problema
Você recebe esse erro quando trabalha com Add-AzAccount
, que é um alias para o cmdlet Connect-AzAccount
:
Add-AzAccount : Object reference not set to an instance of an object
Causa
Esse erro pode ocorrer se o runbook não executar as etapas adequadas antes de chamar Add-AzAccount
para adicionar a conta de Automação. Um exemplo de uma das etapas necessárias é entrar com uma conta Executar Como. Para as operações corretas a serem usadas em seu runbook, consulte Execução de runbook na Automação do Azure.
Cenário: Referência de objeto não definida para uma instância de objeto
Problema
Você recebe o seguinte erro ao chamar um runbook filho com o parâmetro Wait
, e o Fluxo de saída contém um objeto:
Object reference not set to an instance of an object
Causa
Se o fluxo contiver objetos, Start-AzAutomationRunbook
não tratará o Fluxo de saída corretamente.
Resolução
Implemente uma lógica de sondagem e use o cmdlet Get-AzAutomationJobOutput para recuperar a saída. Um exemplo dessa lógica é definido aqui:
$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
Cenário: O Runbook falha devido a objeto desserializado
Problema
O runbook falhar com o erro:
Cannot bind parameter <ParameterName>.
Cannot convert the <ParameterType> value of type Deserialized <ParameterType> to type <ParameterType>.
Causa
Se o seu runbook for um Fluxo de Trabalho do PowerShell, ele armazenará objetos complexos em um formato desserializado para manter seu estado de runbook se o fluxo de trabalho estiver suspenso.
Resolução
Use qualquer uma das seguintes soluções para corrigir esse problema:
- Se você estiver direcionando objetos complexos de um cmdlet para outro, encapsule os cmdlets em uma atividade
InlineScript
. - Passe o nome ou o valor necessário do objeto complexo em vez de passar o objeto inteiro.
- Use um runbook do PowerShell em vez de um runbook de Fluxo de Trabalho do PowerShell.
Cenário: status 400 Solicitação Inválida ao chamar um webhook
Problema
Ao tentar chamar um webhook para um runbook de Automação do Azure, você recebe o seguinte erro:
400 Bad Request : This webhook has expired or is disabled
Causa
O webhook que você está tentando chamar está desabilitado ou expirou.
Resolução
Se o webhook estiver desabilitado, você pode habilitá-lo novamente por meio do portal do Azure. Se o webhook tiver expirado, você deverá excluí-lo e recriá-lo. Só é possível renovar um webhook se ele ainda não expirou.
Cenário: 429: A taxa de solicitação no momento é muito grande
Problema
Você receberá a seguinte mensagem de erro ao executar o cmdlet Get-AzAutomationJobOutput
:
429: The request rate is currently too large. Please try again
Causa
Esse erro pode ocorrer ao recuperar a saída do trabalho de um runbook que tenha muitos fluxos detalhados.
Resolução
Para resolver esse erro, execute um destes procedimentos:
- Edite o runbook e reduza o número de fluxos de trabalho que ele emite.
- Reduza o número de fluxos a ser recuperado ao executar o cmdlet. Para fazer isso, você pode definir o valor do parâmetro
Stream
para o cmdlet Get-AzAutomationJobOutput para recuperar somente os Fluxos de saída.
Cenário: o trabalho de runbook falhou porque excedeu a cota alocada
Problema
O trabalho de runbook falha com o erro:
The quota for the monthly total job run time has been reached for this subscription
Causa
Esse erro ocorre quando a execução do trabalho excede a cota de livre de 500 minutos para sua conta. Essa cota aplica-se a todos os tipos de tarefa de execução de trabalho. Algumas dessas tarefas estão testando um trabalho, iniciando um trabalho no portal, executando um trabalho usando webhooks ou agendando um trabalho para execução usando o portal do Azure ou seu datacenter. Para saber mais sobre os preços para Automação, confira os Preços de automação.
Resolução
Se quiser usar mais de 500 minutos de processamento por mês, altere sua assinatura da Camada gratuita para a camada Básica:
- Entre em sua assinatura do Azure.
- Selecione a conta de Automação a ser atualizada.
- Selecione Configurações e, em seguida, selecione Preço.
- Clique em Habilitar na parte inferior da página para atualizar sua conta para a camada Básica.
Cenário: fluxo de saída do runbook maior que 1 MB
Problema
O runbook em execução na área restrita do Azure falha com o seguinte erro:
The runbook job failed due to a job stream being larger than 1MB, this is the limit supported by an Azure Automation sandbox.
Causa
Este erro ocorre porque o runbook tenta gravar muitos dados de exceção no fluxo de saída.
Resolução
Há um limite de 1 MB no fluxo de saída do trabalho. Verifique se seu runbook inclui chamadas para um executável ou subprocesso usando blocos try
e catch
. Se as operações lançarem uma exceção, faça com que o código grave a mensagem da exceção em uma variável de Automação. Essa técnica impede que a mensagem seja gravada no fluxo de saída do trabalho. Para Hybrid Runbook Worker trabalhos executados, o fluxo de saída truncado em 1 MB é exibido sem nenhuma mensagem de erro.
Cenário: O início do trabalho de runbook foi tentado três vezes, mas todas as vezes o início falhou
Problema
Seu runbook falha com o seguinte erro:
The job was tried three times but it failed
Causa
Esse erro ocorre devido a um dos seguintes problemas:
Limite de memória. Um trabalho pode falhar se estiver usando mais de 400 MB de memória. Os limites documentados sobre a memória alocada em uma área restrita são encontrados em Limites do serviço de automação.
Soquetes de rede. As áreas restritas do Azure são limitadas a 1.000 soquetes de rede simultâneos. Para saber mais, confira Limites do serviço de Automação.
Módulo incompatível. As dependências de módulo podem não estar corretas. Nesse caso, o runbook normalmente retorna uma mensagem
Command not found
ouCannot bind parameter
.Sem autenticação com o Active Directory para área restrita. Seu runbook tentou chamar um executável ou subprocesso que é executado em uma área restrita do Azure. Não há suporte para a configuração de runbooks para autenticar com o Microsoft Entra ID usando a ADAL (Biblioteca de Autenticação do Azure Active Directory).
Resolução
Limite de memória, soquetes de rede. Métodos sugeridos de trabalhar nos limites de memória são dividir a carga de trabalho entre vários runbooks, processar menos dados na memória, evitar a gravação de saída desnecessária de seus runbooks e considerar quantos pontos de verificação são gravados em seus runbooks de fluxo de trabalho do PowerShell. Use o método de limpeza, como
$myVar.clear
, para limpar variáveis e use[GC]::Collect
para executar a coleta de lixo imediatamente. Essas ações reduzem o volume de memória do seu runbook durante o runtime.Módulo incompatível. Atualize os módulos do Azure seguindo as etapas em Como atualizar os módulos do Azure PowerShell na Automação do Azure.
Sem autenticação com o Active Directory para área restrita. Ao autenticar no Microsoft Entra ID com um runbook, verifique se o módulo do Azure Active Directory está disponível na sua conta de Automação. Certifique-se de conceder à conta Executar Como as permissões necessárias para executar as tarefas que o runbook automatiza.
Se o runbook não puder chamar um executável ou subprocesso em execução em uma área restrita do Azure, use o runbook em um Hybrid Runbook Worker. Trabalhadores híbridos não têm os limites de memória e rede que as áreas restritas do Azure têm.
Cenário: o trabalho do PowerShell falha com a mensagem de erro "Não é possível invocar o método"
Problema
Você recebe a seguinte mensagem de erro ao iniciar um trabalho do PowerShell em um runbook que é executado no Azure:
Exception was thrown - Cannot invoke method. Method invocation is supported only on core types in this language mode.
Causa
Esse erro pode indicar que os runbooks executados em uma área restrita do Azure não podem ser executados no Modo de Linguagem Completa.
Resolução
Há três maneiras de resolver esse erro:
- Em vez de usar Start-Job, use Start-AzAutomationRunbook para iniciar o runbook.
- Tente executar o runbook em um Hybrid Runbook Worker.
Para saber mais sobre esse comportamento e outros comportamentos dos runbooks de Automação do Azure, confira Execução de runbook na Automação do Azure.
Cenário: Falha de conclusão de um runbook de execução longa
Problema
Seu runbook é exibido em um estado Parado após a execução de 3 horas. Você também pode ver este erro:
The job was evicted and subsequently reached a Stopped state. The job cannot continue running.
Esse comportamento existe, por natureza, nas áreas restritas do Azure devido ao monitoramento de compartilhamento justo dos processos na Automação do Azure. Se um processo for executado por mais de três horas, o compartilhamento justo interrompe automaticamente um runbook. O status de um runbook que ultrapassa o limite de tempo de compartilhamento justo difere por tipo de runbook. Os runbooks do PowerShell e do Python são definidos com um status Parado. Os runbooks do Fluxo de trabalho do PowerShell estão definidos como Falha.
Causa
O runbook ultrapassou o limite de três horas permitido pelo compartilhamento justo em uma área restrita do Azure.
Resolução
Uma solução recomendada é executar o runbook em um Hybrid Runbook Worker. Os trabalhadores híbridos não têm limite de runbook de compartilhamento justo de três horas que as áreas restritas do Azure têm. Os runbooks executados em Hybrid Runbook Workers devem ser desenvolvidos para dar suporte a comportamentos de reinicialização, caso haja problemas de infraestrutura local inesperados.
Outra opção é otimizar o runbook criando runbooks filhos. Se o seu runbook faz loop da mesma função em vários recursos, por exemplo, uma operação de banco de dados em vários bancos de dados, é possível mover essa função para um runbook filho. Cada um desses runbooks filhos é executado em paralelo em processos separados. Esse comportamento reduz a quantidade total de tempo para o runbook pai concluir.
Os cmdlets do PowerShell que habilitam o cenário do runbook filho são:
- Start-AzAutomationRunbook. Esse cmdlet permite que você inicie um runbook e passe parâmetros para o runbook.
- Get-AzAutomationJob. Se há operações que precisam ser executadas após a conclusão do runbook filho, este cmdlet permite verificar o status de trabalho para cada filho.
Cenário: Erro em fluxos de trabalho sobre o método get_SerializationSettings
Problema
Você verá o seguinte erro em seus fluxos de trabalho para um 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
Causa
Esse erro é provavelmente causado pelo uso de uma migração incompleta do AzureRM para módulos AZ em seu runbook. Essa situação pode fazer com que a Automação do Azure inicie um trabalho de runbook usando apenas módulos AzureRM e, em seguida, inicie outro trabalho usando apenas módulos Az, o que leva a uma falha de área restrita.
Resolução
Não recomendamos o uso de cmdlets Az e AzureRM no mesmo runbook. Para saber mais sobre o uso correto dos módulos, consulte Migrar para módulos Az.
Cenário: acesso negado ao usar a área restrita do Azure para runbook ou aplicativo
Problema
Quando o runbook ou aplicativo tenta ser executado em uma área restrita do Azure, o ambiente nega acesso.
Causa
Esse problema pode ocorrer porque as áreas restritas do Azure impedem o acesso a todos os servidores COM fora do processo. Por exemplo, um aplicativo ou runbook em área restrita não pode fazer chamada em Instrumentação de Gerenciamento do Windows (WMI) ou no serviço Windows Installer (msiserver.exe).
Resolução
Para obter detalhes sobre o uso de áreas restritas do Azure, consulte Ambiente de execução de runbook.
Cenário: código de status Proibido Inválido ao usar Key Vault dentro de um runbook
Problema
Ao tentar acessar Azure Key Vault por meio de um runbook de Automação do Azure, você obtém o seguinte erro:
Operation returned an invalid status code 'Forbidden'
Causa
As possíveis causas desse problema são:
- Não está usando uma conta Executar Como.
- Permissões insuficientes
Resolução
Não usar uma conta Executar Como
Siga Etapa 5 – Adicionar autenticação para gerenciar recursos do Azure para garantir que você esteja usando uma conta Executar Como para acessar Key Vault.
Permissões insuficientes
Adicione permissões ao Key Vault para garantir que sua conta Executar Como tenha permissões suficientes para acessar Key Vault.
Cenário: o runbook falha com o erro “Comprimento do parâmetro excedido”
Problema
Seu runbook usa os parâmetros e falha com o seguinte erro:
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.
Causa
Há um limite para o comprimento total de caracteres de todos os Parâmetros que podem ser fornecidos em runbooks do Python 2.7, Python 3.8 e PowerShell 7.1. O comprimento total de todos os Nomes de parâmetro e os Valores de parâmetro não devem exceder 30.000 caracteres.
Resolução
Para superar esse problema, você pode usar as Variáveis de Automação do Azure para passar os valores para o runbook. Como alternativa, você pode reduzir o número de caracteres em Nomes de parâmetro e Valores de parâmetro para garantir que o comprimento total não exceda 30.000 caracteres.
Documentos recomendados
Próximas etapas
Se você não encontrar seu problema aqui ou não conseguir resolvê-lo, visite um dos seguintes canais para obter mais suporte:
- Obtenha respostas de especialistas do Azure nos Fóruns do Azure.
- Conecte-se ao @AzureSupport, a conta oficial do Microsoft Azure para melhorar a experiência do cliente. O Suporte do Azure conecta você com a comunidade do Azure para obter as respostas, suporte e falar com os especialistas.
- Se precisar de mais ajuda, você pode registrar um incidente de suporte do Azure. Acesse o site de suporte do Azure e selecione Obter suporte.