Solución de problemas de la extensión de máquina virtual de Microsoft Azure.

Información general de las plantillas del Administrador de recursos de Azure

Las plantillas de Azure Resource Manager le permiten especificar mediante declaración la infraestructura IaaS de Azure en el lenguaje JSON definiendo las dependencias entre recursos.

Consulte Creación de plantillas del Administrador de recursos de Azure con extensiones de máquina virtual para obtener más información sobre cómo diseñar plantillas mediante extensiones.

En este artículo, obtendremos información sobre cómo solucionar algunos de los errores comunes de la extensión de máquina virtual.

Consulta del estado de la extensión

Las plantillas de Azure Resource Manager se pueden ejecutar desde Azure PowerShell. Cuando se ejecute la plantilla, el estado de extensión se puede ver desde el Explorador de recursos de Azure o las herramientas de la línea de comandos.

Este es un ejemplo:

Azure PowerShell:

Get-AzVM -ResourceGroupName $RGName -Name $vmName -Status

Esta es la salida de ejemplo:

Extensions:  {
  "ExtensionType": "Microsoft.Compute.CustomScriptExtension",
  "Name": "myCustomScriptExtension",
  "SubStatuses": [
    {
      "Code": "ComponentStatus/StdOut/succeeded",
      "DisplayStatus": "Provisioning succeeded",
      "Level": "Info",
      "Message": "    Directory: C:\\temp\\n\\n\\nMode                LastWriteTime     Length Name
          \\n----                -------------     ------ ----                              \\n-a---          9/1/2015   2:03 AM         11
          test.txt                          \\n\\n",
                  "Time": null
      },
    {
      "Code": "ComponentStatus/StdErr/succeeded",
      "DisplayStatus": "Provisioning succeeded",
      "Level": "Info",
      "Message": "",
      "Time": null
    }
  ]
}

Solución de problemas de errores de extensión

Comprobación de que el agente de máquina virtual está en ejecución y listo

El agente de máquina virtual es necesario para administrar, instalar y ejecutar extensiones. Si el agente de VM no está en ejecución o no informa de un estado Listo a la plataforma Azure, las extensiones no funcionarán correctamente.

Consulte las páginas siguientes para solucionar problemas del agente de máquina virtual:

Búsqueda de la guía de solución de problemas de la extensión específica

Algunas extensiones tienen una página específica que describe cómo solucionar problemas. Puede encontrar la lista de estas extensiones y páginas en Extensiones de solución de problemas.

Visualización del estado de la extensión

Como se explicó anteriormente, el estado de la extensión se puede encontrar mediante la ejecución del cmdlet de PowerShell:

Get-AzVM -ResourceGroupName $RGName -Name $vmName -Status

o el comando de la CLI:

az vm extension show -g <RG Name> --vm-name <VM Name>  --name <Extension Name>

o en Azure Portal, para ello, se examina la hoja de la máquina virtual/Configuración/Extensiones. A continuación, puede hacer clic en la extensión y comprobar su estado y mensaje.

Volver a ejecutar la extensión en la máquina virtual

Si ejecuta los scripts en la máquina virtual mediante la extensión de script personalizada, es posible que se produzca un error en el que la máquina virtual se crea correctamente, pero que el script genere un error. En estas condiciones, la manera que se recomienda para recuperarse de este error es quitar la extensión y volver a ejecutar la plantilla. Nota: En el futuro, esta funcionalidad se mejoraría para eliminar la necesidad de desinstalar la extensión.

Eliminación de la extensión de Azure PowerShell

Remove-AzVMExtension -ResourceGroupName $RGName -VMName $vmName -Name "myCustomScriptExtension"

Cuando se ha quitado la extensión, la plantilla puede volver a ejecutarse para ejecutar los scripts en la máquina virtual.

Desencadenamiento de un nuevo GoalState en la máquina virtual

Es posible que observe que una extensión no se ha ejecutado o que no se puede ejecutar porque falta el "generador de certificados CRP de Windows Azure" (ese certificado se utiliza para proteger el transporte de la configuración protegida de la extensión). Ese certificado se volverá a generar automáticamente al reiniciar el agente invitado de Windows desde dentro de la máquina virtual:

  • Abra el Administrador de tareas.
  • Vaya a la pestaña Detalles.
  • Busque el proceso WindowsAzureGuestAgent.exe.
  • Haga clic con el botón derecho y seleccione "Finalizar tarea". El proceso se reiniciará de forma automática.

También puede desencadenar un nuevo objeto GoalState en la máquina virtual mediante la ejecución de "Volver a aplicar la VM". Volver a aplicar la VM es una API que se introdujo en 2020 para volver a aplicar el estado de una máquina virtual. Se recomienda hacerlo cuando se pueda permitir un breve periodo de inactividad en la máquina virtual. Aunque Volver a aplicar no provoca un reinicio de la máquina virtual y la inmensa mayoría de las veces las llamadas a Volver a aplicar no reiniciarán la máquina virtual, hay un riesgo muy pequeño de que se aplique alguna otra actualización pendiente al modelo de máquina virtual cuando Volver a aplicar desencadene un nuevo estado de objetivo y que el otro cambio pueda necesitar un reinicio.

Azure Portal:

En el portal, seleccione la máquina virtual y, en el panel izquierdo, debajo de Soporte y solución de problemas, seleccione Volver a implementar y volver a aplicar y, a continuación, seleccione Volver a aplicar.

Azure PowerShell (reemplace el nombre del grupo de recursos y el nombre de la máquina virtual por sus valores) :

Set-AzVM -ResourceGroupName <RG Name> -Name <VM Name> -Reapply

CLI de Azure (reemplace el nombre del grupo de recursos y el nombre de la máquina virtual por sus valores) :

az vm reapply -g <RG Name> -n <VM Name>

Si no funcionó "Volver a aplicar la VM", puede agregar un nuevo disco de datos vacío a la máquina virtual desde el portal de administración de Azure y, después, quitarlo cuando el certificado se haya agregado de nuevo.

Consulta los registros de extensión dentro de la máquina virtual

Si los pasos anteriores no funcionaron y la extensión sigue en estado de error, el siguiente paso es ver sus registros dentro de la máquina virtual.

En una máquina virtual de Windows, los registros de extensión normalmente residirán en

C:\WindowsAzure\Logs\Plugins

Y los archivos de configuración y estado de la extensión estarán en

C:\Packages\Plugins

En las máquinas virtuales Linux, los registros de extensión normalmente residirán en

/var/log/azure/

Y los archivos de configuración y estado de la extensión estarán en

/var/lib/waagent/

Cada extensión es diferente, pero normalmente siguen principios similares:

Los paquetes de extensión y los archivos binarios se descargan en la máquina virtual (por ejemplo, "/var/lib/waagent/custom-script/download/1" para Linux o "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads\0" para Windows).

Su configuración y configuración se pasan desde la plataforma De Azure al controlador de extensiones a través del agente de máquina virtual (por ejemplo, "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/config" para Linux o "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\RuntimeSettings" para Windows)

"/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/status/1.status" para Linux o "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Status" para Windows) que luego se notificarán a la plataforma Azure. Ese estado es el que se notifica a través de PowerShell, la CLI o en la hoja de extensión de la máquina virtual de Azure Portal.

También escriben registros detallados de su ejecución (por ejemplo, "/var/log/azure/custom-script/handler.log" para Linux o "C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\CustomScriptHandler.log" para Windows).

Si la máquina virtual se vuelve a crear a partir de una máquina virtual existente

Podría ocurrir que está creando una máquina virtual de Azure basada en un disco especializado procedente de otra máquina virtual de Azure. En ese caso, es posible que la máquina virtual anterior contuviera extensiones, por lo que sobrarán archivos binarios, registros y archivos de estado. El nuevo modelo de máquina virtual no conocerá los estados de las extensiones de la máquina virtual anterior y podría notificar un estado incorrecto para estas extensiones. Se recomienda encarecidamente quitar las extensiones de la máquina virtual anterior antes de crear otra y, después, volver a instalarlas una vez que se cree la máquina virtual. Lo mismo puede ocurrir cuando se crea una imagen generalizada a partir de una máquina virtual de Azure existente. Le invitamos a quitar extensiones para evitar el estado incoherente de las extensiones.

Problemas conocidos

PowerShell no se reconoce como un comando interno o externo

Observa las siguientes entradas de error en la salida de la extensión RunCommand:

RunCommandExtension failed with "'powershell' isn't recognized as an internal or external command,"

Análisis

Las extensiones se ejecutan en la cuenta del sistema local, por lo que es muy posible que powershell.exe funcione bien cuando se ejecuta RDP en la máquina virtual, pero se produce un error cuando se ejecuta con RunCommand.

Solución

  • Compruebe que PowerShell aparece correctamente en la variable de entorno PATH:
    • Abrir el Panel de control
    • Sistema y seguridad
    • Sistema
    • Pestaña Avanzado:> Variables de entorno
  • En "Variables del sistema", haga clic en Editar y asegúrese de que PowerShell está en la variable de entorno PATH (normalmente: "C:\Windows\System32\WindowsPowerShell\v1.0")
  • Reinicie la máquina virtual o el servicio WindowsAzureGuestAgent, y vuelva a intentar Ejecutar el comando.

Comando no se reconoce como un comando interno o externo

Verá lo siguiente en el archivo C:\WindowsAzure\Logs\Plugins<ExtensionName><Versión>\CommandExecution.log:

Execution Error: '<command>' isn't recognized as an internal or external command, operable program or batch file.

Análisis

Las extensiones se ejecutan en la cuenta del sistema local, por lo que es muy posible que powershell.exe funcione bien cuando se ejecuta RDP en la máquina virtual, pero se produce un error cuando se ejecuta con RunCommand.

Solución

  • Abra un símbolo del sistema en la máquina virtual y ejecute un comando para reproducir el error. El agente de máquina virtual usa cmd.exe de administrador y es posible que tenga algún comando preconfigurado para ejecutarse cada vez que se inicie cmd.
  • También es probable que la variable PATH esté mal configurada, pero dependerá del comando que tenga el problema.

Error de VMAccessAgent con No se puede actualizar la configuración de conexión de Escritorio remoto para la cuenta de administrador. Error: System.Runtime.InteropServices.COMException (0x800706D9): No hay más puntos de conexión disponibles en el asignador de puntos de conexión.

Verá lo siguiente en el estado de la extensión:

Type Microsoft.Compute.VMAccessAgent
Version 2.4.8
Status Provisioning failed
Status level Error
Status message Cannot update Remote Desktop Connection settings for Administrator account. Error: System.Runtime.InteropServices.COMException (0x800706D9): There are no more endpoints available from the endpoint mapper. (Exception from HRESULT: 0x800706D9) at NetFwTypeLib.INetFwRules.GetEnumerator() at 
Microsoft.WindowsAzure.GuestAgent.Plugins.JsonExtensions.VMAccess.RemoteDesktopManager.EnableRemoteDesktopFirewallRules() 
at Microsoft.WindowsAzure.GuestAgent.Plugins.JsonExtensions.VMAccess.RemoteDesktopManager.EnableRemoteDesktop() at

Análisis

Este error se puede producir cuando el servicio Firewall de Windows no está en ejecución.

Solución

Compruebe si el servicio Firewall de Windows está habilitado y en ejecución. Si no es así, habilítelo e inícielo; vuelva a intentar ejecutar VMAccessAgent.

El certificado remoto no es válido según el procedimiento de validación.

Verá lo siguiente en WaAppAgent.log

System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.
Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

Análisis

Es probable que en la máquina virtual falte el certificado Baltimore CyberTrust Root en "Entidades de certificación raíz de confianza".

Solución

Abra la consola de certificados con certmgr.msc y compruebe si el certificado está allí.

Otro posible problema es que la cadena de certificados esté interrumpida por una herramienta de inspección SSL de terceros, como ZScaler. Ese tipo de herramienta se debe configurar para omitir la inspección SSL.