Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las aplicaciones de máquina virtual son un tipo de recurso en Azure Compute Gallery que proporciona un enfoque moderno y flexible para administrar e implementar aplicaciones en las máquinas virtuales y los conjuntos de escalado. Al desacoplar la instalación de aplicaciones de las imágenes de máquina virtual base, puede simplificar las actualizaciones, reducir la sobrecarga de mantenimiento de imágenes y acelerar los ciclos de implementación. Este enfoque elimina la necesidad de volver a compilar y volver a publicar imágenes de máquina virtual para cada cambio de aplicación, lo que permite una iteración más rápida y una mayor agilidad operativa. Las aplicaciones de máquina virtual son más adecuadas para implementar inteligencia artificial, alta escala, baja latencia, microservicios, cargas de trabajo seguras y compatibles en máquinas virtuales de Azure.
| Recurso | Descripción |
|---|---|
| Galería de Proceso de Azure | Una galería es un repositorio para administrar y compartir paquetes de aplicaciones. Los usuarios pueden compartir el recurso de la galería y todos los recursos secundarios se comparten automáticamente. El nombre de la galería debe ser único en cada suscripción. Por ejemplo, puede tener una galería para almacenar todas las imágenes del sistema operativo y otra para almacenar todas las aplicaciones de máquina virtual. |
| Aplicación de máquina virtual | Definición de la aplicación de máquina virtual. Se trata de un recurso lógico que almacena los metadatos comunes de todas las versiones que hay en él. Por ejemplo, puede tener una definición de aplicación para Apache Tomcat y tener varias versiones dentro de ella. |
| Versión de aplicación de máquina virtual | El recurso que se puede implementar, que contiene las configuraciones específicas del paquete de aplicación y de la versión. Puede replicar globalmente las versiones de la aplicación de máquina virtual en regiones de destino próximas a la infraestructura de la máquina virtual. La versión de la aplicación de máquina virtual debe replicarse en una región para poder implementarla en una máquina virtual de esa región. |
| Cuenta de almacenamiento | Los paquetes de aplicación se cargan primero en la cuenta de almacenamiento. A continuación, Azure Compute Gallery descarga el paquete de aplicación de esta cuenta de almacenamiento mediante direcciones URL de SAS y los almacena en la versión de la aplicación de máquina virtual. Azure Compute Gallery también replica este paquete entre regiones y réplicas regionales según la definición de la versión de la aplicación de máquina virtual. El paquete de aplicación de la cuenta de almacenamiento se puede eliminar después de crear la versión de la aplicación de máquina virtual en Azure Compute Gallery. |
Ventajas principales:
-
Administración centralizada y flexible de aplicaciones:
- Empaquetar cualquier cosa una vez, implementar en cualquier lugar: empaquetar aplicaciones (windows/linux), scripts o archivos como aplicaciones de máquina virtual. A continuación, impleméntela en máquinas virtuales de Azure o conjuntos de escalado de máquinas virtuales y administrelas de forma centralizada en Azure Compute Gallery. Las aplicaciones o archivos pueden estar en .zip, .msi, .exe, .tar.gz, .deb, .rpm, .sh o cualquier otro formato.
- Control de versiones: implemente la versión más reciente o específica manteniendo varias versiones de cada aplicación.
-
Uso compartido y control de acceso sin problemas
- Tenant-Wide uso compartido: comparta aplicaciones dentro de equipos o en toda la organización (inquilino).
- RBAC integrado: controle el acceso de publicación e implementación mediante Azure Role-Based Access Control (RBAC).
-
Implementaciones confiables y personalizables
- Control de aplicaciones individual: instalar, actualizar o eliminar aplicaciones de forma independiente, no es necesario recompilar imágenes de máquina virtual.
- Operaciones personalizables: personalice las operaciones de instalación, actualización y eliminación de aplicaciones, incluido el control de reinicio.
- Built-In control de errores: asegúrese de que las implementaciones resistentes se conecten al error de la aplicación de máquina virtual.
-
Distribución escalable y Low-Latency
- Replicación global y Intra-Region: replica automáticamente las aplicaciones entre regiones y dentro de las regiones para reducir la latencia y mejorar la resistencia, sin necesidad de AzCopy ni transferencias manuales.
- Optimizado para escenarios de High-Scale: lograr una latencia de creación baja incluso durante las implementaciones a gran escala.
-
Seguro y compatible por diseño
- Cumplimiento controlado por directivas: use Azure Policy para aplicar la presencia y configuración de la aplicación en toda la flota.
- Implementaciones seguras: evite descargas basadas en Internet y configuraciones complejas de private link, que no son ideales para entornos bloqueados o seguros.
-
Amplia compatibilidad con la plataforma
- Máquinas virtuales y conjuntos de escalado: implemente en máquinas virtuales individuales, conjuntos de escalado flexibles o conjuntos de escalado uniformes con compatibilidad completa.
- Compatibilidad con blobs en bloques: controle eficazmente paquetes de aplicaciones grandes (hasta 2 GB) mediante Blobs en bloques de Azure para cargas fragmentadas y streaming en segundo plano.
Creación de un recurso de versión de aplicaciones de máquina virtual y aplicaciones de MÁQUINA virtual
La aplicación de máquina virtual se almacena en Azure Compute Gallery. El recurso de aplicación de máquina virtual define lo siguiente sobre la aplicación de máquina virtual:
| Propiedad | Descripción | Limitaciones |
|---|---|---|
| nombre | Nombre de la aplicación | Longitud máxima de 117 caracteres. Los caracteres permitidos son letras mayúsculas o minúsculas, dígitos, guiones(-), punto (.), carácter de subrayado (_). Los nombres no pueden terminar con period(.). |
| supportedOSType | Definición del tipo de sistema operativo admitido | "Linux" o "Windows" |
| endOfLifeDate | Fecha futura de finalización del ciclo de vida de la aplicación. La fecha es solo para referencia y no se aplica. | |
| descripción | Optional. Descripción de la aplicación de máquina virtual | |
| Cluf | Optional. Referencia al Contrato de licencia de usuario final (CLUF) | |
| privacyStatementUri | Optional. Referencia a la declaración de privacidad de la aplicación. | |
| releaseNoteUri | Optional. Referencia a las notas de la versión de la aplicación. |
Las versiones de la aplicación de máquina virtual son los recursos que se pueden implementar dentro del recurso aplicación de máquina virtual. Las versiones se definen con las siguientes propiedades:
| Propiedad | Descripción | Limitaciones |
|---|---|---|
| location | Ubicación de origen de la versión de la aplicación de máquina virtual. | Región válida de Azure |
| source/mediaLink | Vínculo al archivo de paquete de aplicación en una cuenta de almacenamiento | Dirección URL de almacenamiento válida y existente |
| source/defaultConfigurationLink | Optional. Vínculo al archivo de configuración de la aplicación de máquina virtual. Se puede invalidar en el momento de la implementación. | Dirección URL de almacenamiento válida y existente |
| manageActions/install | Instalación del script como cadena para instalar correctamente la aplicación | Comando válido para el sistema operativo especificado en formato de cadena. |
| manageActions/remove | Quitar script como cadena para quitar correctamente la aplicación | Comando válido para el sistema operativo especificado en formato de cadena |
| manageActions/update | Optional. Actualice el script como cadena para actualizar correctamente la aplicación de máquina virtual a una versión más reciente. | Comando válido para el sistema operativo especificado en formato de cadena |
| targetRegions/name | Nombre de las regiones de destino a las que se va a replicar. Mejora la resistencia a los errores de región y crea latencia. | Región válida de Azure |
| targetRegions/regionalReplicaCount | Optional. Número de réplicas que se van a crear en la región. Mejora el control de carga y crea latencia. El valor predeterminado es 1. | Entero entre 1 y 3 inclusive |
| replicaCount | Optional. Define el número de réplicas en cada región. Surte efecto si regionalReplicaCount no está definido. Mejora la resistencia a los errores de región o clúster y crea latencia durante la escala alta. | Entero entre 1 y 3 inclusive. |
| endOfLifeDate | Optional. Fecha de finalización futura del ciclo de vida de la versión de la aplicación. Esta propiedad es solo para referencia de cliente y no se aplica. | Fecha futura válida |
| excludeFromLatest | Excluya la versión de que se usa como la versión más reciente de la aplicación cuando se usa la palabra clave "latest" en applicationProfile. | |
| storageAccountType | Optional. Tipo de cuenta de almacenamiento que se va a usar en cada región para almacenar el paquete de aplicación. El valor predeterminado es Standard_LRS. | Esta propiedad no es actualizable. |
| safetyProfile/allowDeletionOfReplicatedLocations | Optional. Indica si se permite quitar o no esta versión de imagen de la galería de regiones replicadas. | |
| settings/packageFileName | Nombre de archivo de paquete que se usará cuando se descargue el paquete en la máquina virtual. | Se limita a 4096 caracteres. |
| settings/configFileName | Nombre del archivo de configuración que se va a usar cuando se descarga la configuración en la máquina virtual. | Se limita a 4096 caracteres. |
| settings/scriptBehaviorAfterReboot | Optional. Acción que se realizará para instalar, actualizar o quitar la aplicación de la galería después de reiniciar la máquina virtual. |
{
"$schema": "https://schema.management.azure.com/schemas/2020-06-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"galleryName": {
"type": "string"
},
"applicationName": {
"type": "string"
},
"versionName": {
"type": "string",
"metadata": {
"description": "Must follow the format: major.minor.patch (Example: 1.0.0)"
}
},
"location": {
"type": "string",
"defaultValue": "West US"
},
"supportedOSType": {
"type": "string",
"allowedValues": ["Windows", "Linux"]
},
"endOfLifeDate": {
"type": "string",
"metadata": {
"description": "Optional. This property is for information only and doesn't block app deployment."
}
},
"description": {
"type": "string",
"defaultValue": "Description of the application"
},
"eula": {
"type": "string",
"defaultValue": ""
},
"privacyStatementUri": {
"type": "string",
"defaultValue": ""
},
"releaseNoteUri": {
"type": "string",
"defaultValue": ""
},
"mediaLink": {
"type": "string"
},
"configLink": {
"type": "string"
},
"appConfigFileName": {
"type": "string"
},
"appPackageFileName": {
"type": "string"
},
"replicaRegion1": {
"type": "string",
"defaultValue": "East US"
},
"replicaRegion2": {
"type": "string",
"defaultValue": "South Central US"
},
"installScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to install the application. Example: echo 'Installing application...'"
}
},
"updateScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to update the application. Example: echo 'Updating application...'"
}
},
"removeScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to delete the application. Example: echo 'Deleting application...'"
}
},
"storageAccountType": {
"type": "string",
"allowedValues": ["PremiumV2_LRS", "Premium_LRS", "Standard_LRS", "Standard_ZRS"],
"defaultValue": "Standard_LRS"
}
},
"resources": [
{
"type": "Microsoft.Compute/galleries",
"apiVersion": "2024-03-03",
"name": "[parameters('galleryName')]",
"location": "[parameters('location')]",
"properties": {
"identifier": {}
}
},
{
"type": "Microsoft.Compute/galleries/applications",
"apiVersion": "2024-03-03",
"name": "[format('{0}/{1}', parameters('galleryName'), parameters('applicationName'))]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries', parameters('galleryName'))]"
],
"properties": {
"supportedOSType": "[parameters('supportedOSType')]",
"endOfLifeDate": "[parameters('endOfLifeDate')]",
"description": "[parameters('description')]",
"eula": "[if(equals(parameters('eula'), ''), json('null'), parameters('eula'))]",
"privacyStatementUri": "[if(equals(parameters('privacyStatementUri'), ''), json('null'), parameters('privacyStatementUri'))]",
"releaseNoteUri": "[if(equals(parameters('releaseNoteUri'), ''), json('null'), parameters('releaseNoteUri'))]"
}
},
{
"type": "Microsoft.Compute/galleries/applications/versions",
"apiVersion": "2024-03-03",
"name": "[format('{0}/{1}/{2}', parameters('galleryName'), parameters('applicationName'), parameters('versionName'))]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries/applications', parameters('galleryName'), parameters('applicationName'))]"
],
"properties": {
"publishingProfile": {
"source": {
"mediaLink": "[parameters('mediaLink')]",
"defaultConfigurationLink": "[parameters('configLink')]"
},
"manageActions": {
"install": "[parameters('installScript')]",
"remove": "[parameters('removeScript')]",
"update": "[parameters('updateScript')]"
},
"settings": {
"scriptBehaviorAfterReboot": "Rerun",
"configFileName": "[parameters('appConfigFileName')]",
"packageFileName": "[parameters('appPackageFileName')]"
},
"targetRegions": [
{
"name": "[parameters('location')]",
"regionalReplicaCount": 3,
"storageAccountType": "[parameters('storageAccountType')]"
},
{
"name": "[parameters('replicaRegion1')]",
"regionalReplicaCount": 1,
"storageAccountType": "[parameters('storageAccountType')]"
},
{
"name": "[parameters('replicaRegion2')]"
},
],
"excludeFromLatest": false,
"replicaCount": 2,
"storageAccountType": "[parameters('storageAccountType')]"
},
"safetyProfile": {
"allowDeletionOfReplicatedLocations": true
},
"endOfLifeDate": "[parameters('endOfLifeDate')]"
}
}
]
}
Implementación de aplicaciones de máquina virtual de Azure
Una vez publicada la versión de la aplicación de máquina virtual en Azure Compute Gallery, puede implementar la versión en Azure Virtual Machines (VM) y Azure Virtual Machine Scale Sets.
En applicationProfile vm de Azure y conjuntos de escalado de máquinas virtuales se define lo siguiente:
| Propiedad | Descripción | Limitaciones |
|---|---|---|
| galleryApplications | Aplicaciones de la galería que se van a implementar | |
| packageReferenceId | Referencia a la versión de la aplicación que se va a implementar | Referencia válida de la versión de la aplicación |
| configurationReference (Referencia de configuración) | Optional. Dirección URL completa de un blob de almacenamiento que contiene la configuración de esta implementación. Esto invalida cualquier valor proporcionado anteriormente para defaultConfiguration. | Referencia de blob de almacenamiento válida |
| order | Optional. Orden en el que se van a implementar aplicaciones | Entero válido |
| treatFailureAsDeploymentFailure | Optional. Marcar el error de la aplicación como error de implementación de la máquina virtual para el control de errores | Verdadero o Falso |
El campo de orden se puede usar para especificar dependencias entre aplicaciones. Las reglas para el orden son las siguientes:
| Caso | Significado de instalación | Significado del error |
|---|---|---|
| No se ha especificado ningún orden | Las aplicaciones desordenadas se instalan después de las aplicaciones ordenadas. No hay ninguna garantía de orden de instalación entre las aplicaciones no ordenadas. | Los errores de instalación de otras aplicaciones, ya sea ordenados o no ordenados, no afectan a la instalación de aplicaciones desordenadas. |
| Valores de orden duplicados | La aplicación se instala en cualquier orden en comparación con otras aplicaciones con el mismo orden. Todas las aplicaciones del mismo pedido se instalan después de las que tienen pedidos inferiores y antes de las que tienen pedidos superiores. | Si no se pudo instalar una aplicación anterior con un orden inferior, no se pudo instalar ninguna aplicación con este pedido. Si alguna aplicación con este pedido no se puede instalar, no hay ninguna aplicación con una instalación de pedido superior. |
| Aumento de pedidos | La aplicación se instalará después de las que tienen pedidos inferiores y antes de las que tienen pedidos superiores. | Si no se pudo instalar una aplicación anterior con un orden inferior, esta aplicación no se instala. Si no se puede instalar esta aplicación, no hay ninguna aplicación con una instalación de pedido superior. |
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmssName": {
"type": "string"
},
"location": {
"type": "string"
},
"subscriptionId": {
"type": "string"
},
"resourceGroupName": {
"type": "string"
},
"galleryName": {
"type": "string"
},
"applicationName1": {
"type": "string"
},
"applicationVersion1": {
"type": "string",
"defaultValue": "latest"
},
"configurationReference1": {
"type": "string",
"metadata": {
"description": "Optional path to configuration file from Storage Account. Overrides default configuration file."
}
},
"applicationName2": {
"type": "string"
},
"applicationVersion2": {
"type": "string",
"defaultValue": "latest"
}
},
"variables": {
"packageReferenceId1": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName1'), parameters('applicationVersion1'))]",
"packageReferenceId2": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName2'), parameters('applicationVersion2'))]"
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"apiVersion": "2024-03-03",
"name": "[parameters('vmssName')]",
"location": "[parameters('location')]",
"properties": {
"virtualMachineProfile": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "[variables('packageReferenceId1')]",
"configurationReference": "[parameters('configurationReference1')]",
"treatFailureAsDeploymentFailure": true
},
{
"order": 2,
"packageReferenceId": "[variables('packageReferenceId2')]",
"treatFailureAsDeploymentFailure": false
}
]
}
}
}
}
]
}
Costos
No hay ningún cargo adicional por el uso de paquetes de aplicación de máquina virtual, pero se le cobra por los siguientes recursos:
- Costos de almacenamiento de cada paquete y de las réplicas.
- Cargos de salida de red para la replicación de la primera versión de la imagen desde la región de origen a las regiones replicadas. Las réplicas subsiguientes se tratan dentro de la región, por lo que no habrá ningún cargo adicional.
Para más información sobre la salida de la red, consulte Detalles de precios de ancho de banda.
Detalles técnicos
Consideraciones y límites actuales
Hasta 10 réplicas por región: al crear una versión de aplicación de máquina virtual, el número máximo de réplicas por región es 10 para blobs en páginas y blobs en bloques.
Hasta 300 versiones por región: al crear una versión de aplicación de máquina virtual, puede tener hasta 300 versiones de aplicación por región.
Almacenamiento con acceso público y URI de SAS con privilegios de lectura: La cuenta de almacenamiento debe tener acceso de nivel público y usar un URI de SAS con privilegios de lectura, ya que otros niveles de restricción producen errores en las implementaciones. Al permitir el acceso anónimo, se pueden eludir los tokens de SAS publicando el artefacto en la cuenta de almacenamiento.
Reintento manual para instalaciones con errores: actualmente, la única manera de reintentar una instalación con errores es quitar la aplicación del perfil y, a continuación, volver a agregarla.
Hasta 25 aplicaciones por máquina virtual: se puede implementar un máximo de 25 aplicaciones en una sola máquina virtual.
Tamaño de aplicación de 2 GB: el tamaño máximo de archivo de una versión
mediaLinkde aplicación es de 2 GB. El tamaño máximo de archivo paradefaultConfigurationLinkes de 1 GB.Se requiere un agente de máquina virtual: el agente de máquina virtual debe existir en la máquina virtual y ser capaz de recibir los estados objetivo.
Versión única de la aplicación por máquina virtual: solo se puede implementar una versión de una aplicación determinada en una máquina virtual.
Actualmente no se admiten operaciones de movimiento: actualmente no se admite el traslado de máquinas virtuales con aplicaciones de máquina virtual asociadas entre grupos de recursos.
Nota:
En el caso de Azure Compute Gallery y las aplicaciones de máquina virtual, la SAS de almacenamiento se puede eliminar después de la replicación. Sin embargo, cualquier operación de actualización posterior requiere una SAS válida.
Descarga del directorio dentro de la máquina virtual
La ubicación de descarga del paquete de aplicación y los archivos de configuración son:
- Linux:
/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<application name>/<application version> - Windows:
C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<application name>\<application version>
Los comandos de instalación, actualización y eliminación deben escribirse suponiendo que el paquete de aplicación y el archivo de configuración se encuentran en el directorio actual.
Nomenclatura de los archivos
Cuando el archivo de aplicación se descarga en la máquina virtual, se cambia el nombre del archivo como "MyVmApp" y no tiene ninguna extensión de archivo (por ejemplo, .exe, .msi). La máquina virtual no es consciente del nombre y la extensión originales del archivo.
Estas son algunas alternativas para navegar por este problema:
Puede modificar el script para incluir un comando que cambie el nombre del archivo antes de la ejecución:
move .\\MyVmApp .\\MyApp.exe & MyApp.exe /S
También puede usar la propiedad packageFileName (y la correspondiente configFileName) para indicarnos qué nombre colocarle al archivo. Por ejemplo, si se establece en "MyApp.exe" se convierte el script de instalación como se indica a continuación.
MyAppe.exe /S
Sugerencia
Si el blob se denomina originalmente como "myApp.exe" en lugar de "myapp", el script funciona sin establecer la packageFileName propiedad .
Intérprete de comandos
Los intérpretes de comandos predeterminados son:
- Linux:
/bin/bash - Windows:
cmd.exe
Es posible usar un intérprete diferente como Chocolatey o PowerShell, siempre y cuando esté instalado en el equipo, llamando al ejecutable y pasándole el comando. Por ejemplo, para que el comando se ejecute en PowerShell en Windows en lugar de en el símbolo del sistema, puede pasar powershell.exe -Command '<powershell commmand>'.
Control de las actualizaciones
Al actualizar una versión de la aplicación on VM o Virtual Machine Scale Sets, se usa el comando de actualización que proporcionó durante la implementación. Si la versión actualizada no tiene un comando de actualización, se quita la versión actual y se instala la nueva versión.
Los comandos de actualización deben escribirse con la expectativa de que podría actualizarse desde cualquier versión anterior de la aplicación de máquina virtual.
Tratar el error como error de implementación
La extensión aplicación de máquina virtual siempre devuelve un éxito independientemente de si se produjo un error en alguna aplicación de máquina virtual mientras se instala, actualiza o quita. La extensión de aplicación de máquina virtual solo informa del estado de la extensión como error cuando hay un problema con la extensión o con la infraestructura subyacente. Este comportamiento se desencadena mediante la marca "Tratar el error como error de implementación", que se establece en $false de forma predeterminada y se puede cambiar a $true. La marca de error se puede configurar en PowerShell o la CLI.
Empaquetar e instalar aplicaciones de máquina virtual en Linux
Para crear una aplicación de máquina virtual, necesita scripts y paquetes de aplicación para instalar, actualizar y eliminar correctamente la aplicación.
Las aplicaciones de terceros para Linux se pueden empaquetar de varias maneras. Vamos a examinar cómo controlar la creación de algunos de los comandos de instalación más comunes.
Archivos .tar y .gz
Estos archivos son archivos comprimidos y se pueden extraer en la ubicación deseada. Compruebe las instrucciones de instalación del paquete original en caso de que deban extraerse en una ubicación específica. Si el archivo .tar. o .gz contiene código fuente, consulte las instrucciones del paquete para ver cómo realizar la instalación desde dicho código.
Ejemplo de comando de instalación para instalar golang en una máquina Linux:
sudo tar -C /usr/local -xzf go_linux
Comando de eliminación de ejemplo:
sudo rm -rf /usr/local/go
Creación de paquetes de aplicación mediante .deb, .rpm y otros paquetes específicos de la plataforma para máquinas virtuales con acceso restringido a Internet
Puede descargar paquetes individuales de administradores de paquetes específicos de la plataforma, pero normalmente no contienen todas las dependencias. Con estos archivos, también debe incluir todas las dependencias del paquete de aplicación o indicar al administrador de paquetes del sistema que descargue las dependencias a través de los repositorios que están disponibles para la máquina virtual. Si trabaja con una máquina virtual con acceso restringido a Internet, debe empaquetar todas las dependencias por su cuenta.
Solucionar las dependencias puede ser un poco complicado. Existen herramientas de terceros que pueden mostrar todo el árbol de dependencias.
En Ubuntu, puede ejecutar sudo apt show <package_name> | grep Depends para mostrar todos los paquetes que se instalan al ejecutar el comando sudo apt-get install <packge_name>. Luego, puede usar esa salida para descargar todos los archivos .deb y crear un archivo que se pueda usar como paquete de aplicación.
Para crear un paquete de aplicación de máquina virtual para instalar PowerShell en Ubuntu, siga estos pasos:
- Ejecute los siguientes comandos para permitir que el repositorio descargue PowerShell e identifique las dependencias del paquete en una nueva máquina virtual Ubuntu.
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
sudo rm -rf packages-microsoft-prod.deb
sudo apt update
sudo apt show powershell | grep Depends
- Compruebe la salida de la línea Depends que está formada por los siguientes paquetes:
Depends: libc6, lib32gcc-s1, libgssapi-krb5-2, libstdc++6, zlib1g, libicu72|libicu71|libicu70|libicu69|libicu68|libicu67|libicu66|libicu65|libicu63|libicu60|libicu57|libicu55|libicu52, libssl3|libssl1.1|libssl1.0.2|libssl1.
- Descargue cada uno de estos archivos mediante
sudo apt-get download <package_name>y cree un archivo comprimido tar con todos los archivos.
- Ubuntu 18.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu60
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
- Ubuntu 20.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu66
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
- Ubuntu 22.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl3
sudo apt-get download libicu70
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
- Este archivo .tar es el archivo de paquete de aplicación.
- En este caso, el comando de instalación es:
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
- Y el comando de eliminación es:
sudo apt remove powershell
Use sudo apt autoremove en lugar de intentar quitar explícitamente todas las dependencias. Es posible que haya instalado otras aplicaciones con dependencias superpuestas y, en ese caso, se producirá un error en un comando de eliminación explícito.
Si no quiere resolver las dependencias por su cuenta y apt puede conectarse a los repositorios, puede instalar una aplicación con un solo archivo .deb y dejar que apt controle las dependencias.
Comando de instalación de ejemplo:
dpkg -i <package_name> || apt --fix-broken install -y
Creación de aplicaciones de máquina virtual en Windows
La mayoría de las aplicaciones de terceros en Windows están disponibles como instaladores .exe o .msi. Algunas también están disponibles como archivos ZIP de extracción y ejecución. Echemos un vistazo a los procedimientos recomendados para cada uno de ellos.
Instalador .exe
Normalmente, los ejecutables del instalador inician una interfaz de usuario (UI) en la que alguien debe realizar una selección. Si el instalador admite un parámetro de modo silencioso, debe incluirse en la cadena de instalación.
Cmd.exe también espera que los archivos ejecutables tengan la extensión .exe, por lo que debe cambiar el nombre del archivo para que tenga esta extensión .exe.
Si quiero crear un paquete de aplicación de máquina virtual para myApp.exe, que se distribuye como ejecutable, mi aplicación de máquina virtual se denomina "myApp", por lo que escribo el comando suponiendo que el paquete de aplicación se encuentra en el directorio actual:
"move .\\myApp .\\myApp.exe & myApp.exe /S -config myApp_config"
Si el archivo ejecutable del instalador no admite un parámetro de desinstalación, a veces se puede buscar en el Registro de una máquina de prueba para saber dónde se encuentra el desinstalador.
En el Registro, la cadena de desinstalación se almacena en Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString, por lo que usaría el contenido como mi comando de eliminación:
'\"C:\\Program Files\\myApp\\uninstall\\helper.exe\" /S'
Instalador MSI
Para la ejecución de la línea de comandos de los instaladores .msi, los comandos para instalar o quitar una aplicación deben usar msiexec. Normalmente, msiexec se ejecuta como su propio proceso independiente y cmd no espera a que se complete, lo que puede provocar problemas al instalar más de una aplicación de máquina virtual. El comando start se puede usar con msiexec para asegurarse de que la instalación se completa antes de que el comando devuelva resultados. Por ejemplo:
start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
Comando de eliminación de ejemplo:
start /wait %windir%\\system32\\msiexec.exe /x myapp /quiet /forcerestart /log myapp_uninstall.log
Por lo general, se llamaría al comando start dentro de un script por lotes. Si se usa con el /wait parámetro , el script de llamada se pausa hasta que finaliza el proceso llamado. Una vez completado, el script por lotes comprobaría la variable errorlevel establecida por el comando start y salir de la siguiente manera:
start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
if %errorlevel% neq 0 exit /b %errorlevel%
...
Archivos comprimidos
En el caso de archivos ZIP u otros archivos comprimidos, cambie el nombre y descomprima el contenido del paquete de aplicación en el destino deseado.
Comando de instalación de ejemplo:
rename myapp myapp.zip && mkdir C:\myapp && powershell.exe -Command "Expand-Archive -path myapp.zip -destinationpath C:\myapp"
Comando de eliminación de ejemplo:
rmdir /S /Q C:\\myapp
Solución de problemas de aplicaciones de máquina virtual
Para saber si una aplicación de máquina virtual determinada se agregó correctamente a la instancia de máquina virtual, compruebe el mensaje de la extensión de aplicación de máquina virtual.
Para más información sobre cómo obtener el estado de las extensiones de máquina virtual, consulte Características y extensiones de las máquinas virtuales para Linux y Características y extensiones de las máquinas virtuales para Windows.
Para obtener el estado de las extensiones de máquina virtual, use Get-AzVM:
Get-AzVM -name <VM name> -ResourceGroupName <resource group name> -Status | convertto-json -Depth 10
Para obtener el estado de las extensiones de conjunto de escalado, use Get-AzVMSS:
$result = Get-AzVmssVM -ResourceGroupName $rgName -VMScaleSetName $vmssName -InstanceView
$resultSummary = New-Object System.Collections.ArrayList
$result | ForEach-Object {
$res = @{ instanceId = $_.InstanceId; vmappStatus = $_.InstanceView.Extensions | Where-Object {$_.Name -eq "VMAppExtension"}}
$resultSummary.Add($res) | Out-Null
}
$resultSummary | convertto-json -depth 5
Mensajes de error
| Mensaje | Descripción |
|---|---|
| La versión actual de la aplicación de máquina virtual {name} se dejó de usar el {date}. | Ha intentado implementar una versión de aplicación de máquina virtual que ya está en desuso. Pruebe a usar latest en lugar de especificar una versión concreta. |
| La versión actual de la aplicación de máquina virtual {name} admite el sistema operativo OS {OS}, pero el sistema operativo actual de OSDisk es {OS}. | Ha intentado implementar una aplicación de Linux en una instancia de Windows o viceversa. |
| Se ha superado el número máximo de aplicaciones de máquina virtual (max=5, current={count}). Use menos aplicaciones y vuelva a intentar la solicitud. | Actualmente solo se admiten cinco aplicaciones de máquina virtual por máquina virtual o conjunto de escalado. |
| Se especificó más de una aplicación de máquina virtual con el mismo valor de packageReferenceId. | Se especificó la misma aplicación más de una vez. |
| Suscripción no autorizada para acceder a esta imagen. | La suscripción no tiene acceso a esta versión de la aplicación. |
| Storage account in the arguments doesn't exist (La cuenta de almacenamiento de los argumentos no existe). | No hay aplicaciones para esta suscripción. |
| La imagen de plataforma {image} no está disponible. Compruebe que todos los campos del perfil de almacenamiento son correctos. Para obtener más información sobre el perfil de almacenamiento, consulte https://aka.ms/storageprofile. | The application doesn't exist (La aplicación no existe). |
| La imagen de la galería {image} no está disponible en la región {region}. Póngase en contacto con el propietario de la imagen para replicarla en esta región o cambie la región solicitada. | La versión de la aplicación de la galería existe, pero no se replicó en esta región. |
| La SAS no es válida para el URI de origen {uri}. | Se recibió un error Forbidden del almacenamiento al intentar recuperar información sobre la dirección URL (mediaLink o defaultConfigurationLink). |
| The blob referenced by source uri {uri} doesn't exist (El blob al que hace referencia el URI de origen {uri} no existe). | El blob proporcionado para las propiedades mediaLink o defaultConfigurationLink no existe. |
| No se puede acceder a la dirección URL de la versión de la aplicación de la galería {url} debido al siguiente error: no se encontró el nombre remoto. Asegúrese de que el blob existe y que es accesible públicamente o es una dirección URL de SAS con privilegios de lectura. | El caso más probable es que no se haya proporcionado un URI de SAS con privilegios de lectura. |
| No se puede acceder a la dirección URL de la versión de la aplicación de la galería {url} debido al siguiente error: {error description}. Asegúrese de que el blob existe y que es accesible públicamente o es una dirección URL de SAS con privilegios de lectura. | Hubo un problema con el blob de almacenamiento proporcionado. En la descripción del error proporciona más información. |
| No se permite la operación {operationName} en {application}, ya que está marcada para su eliminación. Solo puede volver a intentar la operación de eliminación (o esperar a que se complete una en curso). | Intente actualizar una aplicación que se está eliminando actualmente. |
| El valor {value} del parámetro "galleryApplicationVersion.properties.publishingProfile.replicaCount" está fuera del intervalo. El valor debe estar entre uno y tres, ambos inclusive. | Solo se permiten entre uno y tres réplicas para las versiones de la aplicación de máquina virtual. |
| No se permite cambiar la propiedad "galleryApplicationVersion.properties.publishingProfile.manageActions.install". (O actualizar, eliminar) | No es posible cambiar ninguna de las acciones de administración en una instancia de VmApplication existente. Se debe crear otra versión de VmApplication. |
| No se permite cambiar la propiedad "galleryApplicationVersion.properties.publishingProfile.settings.packageFileName". (O configFileName) | No es posible cambiar ninguna de las opciones, como el nombre del archivo de paquete o el nombre del archivo de configuración. Se debe crear otra versión de VmApplication. |
| El blob al que hace referencia el URI de origen {uri} es demasiado grande: size = {size}. El tamaño máximo de blob permitido es "1 GB". | El tamaño máximo de un blob al que hace referencia mediaLink o defaultConfigurationLink es actualmente de 1 GB. |
| El blob al que hace referencia el URI de origen {uri} está vacío. | Se hizo referencia a un blob vacío. |
| El tipo de blob {type} no se admite para la operación {operation}. Solo se admiten blobs en páginas y blobs en bloques. | VmApplications solo admite blobs en páginas y blobs en bloques. |
| La SAS no es válida para el URI de origen {uri}. | El URI de SAS proporcionado para mediaLink o defaultConfigurationLink no es un URI de SAS válido. |
| No se puede especificar {region} en las regiones de destino porque falta la característica necesaria {featureName}. Registre la suscripción con la característica necesaria o quite la región de la lista de regiones de destino. | Para usar VmApplications en determinadas regiones restringidas, es necesario tener registrada la marca de características para esa suscripción. |
| Las regiones del perfil de publicación de la versión de imagen de la galería {regions} deben contener la ubicación de la versión de imagen {location}. | La lista de regiones para la replicación debe contener la ubicación donde se encuentra la versión de la aplicación. |
| No se permiten regiones duplicadas en las regiones de publicación de destino. | Es posible que las regiones de publicación no tengan duplicados. |
| Actualmente, los recursos de la versión de la aplicación de la galería no admiten el cifrado. | La propiedad de cifrado para las regiones de destino no se admite en las aplicaciones de máquina virtual |
| Entity name doesn't match the name in the request URL (El nombre de entidad no coincide con el nombre de la dirección URL de la solicitud). | La versión de la aplicación de la galería especificada en la dirección URL de la solicitud no coincide con la especificada en el cuerpo de la solicitud. |
El nombre de la versión de la aplicación de la galería no es válido. El nombre de la versión de la aplicación debe seguir Major(int32). Minor(int32). Formato Revisión(int32), donde int está entre 0 y 2 147 483 647, ambos inclusive. Por ejemplo, 1.0.0, 2018.12.1, etc. |
La versión de la aplicación de la galería debe seguir el formato especificado. |