Las aplicaciones de máquina virtual son un tipo de recurso de Azure Compute Gallery (anteriormente denominada Shared Image Gallery) que simplifica la administración, el uso compartido y la distribución global de aplicaciones de las máquinas virtuales.
En este artículo se da por supuesto que ya tiene una instancia de Azure Compute Gallery. Si todavía no tiene una galería, primero cree una. Para más información, vea Crear una galería para almacenar y compartir recursos.
Asegúrese de que la cuenta de almacenamiento tiene acceso de nivel público o use un URI de SAS con privilegios de lectura, ya que otros niveles de restricción producen errores en las implementaciones. Puede usar Explorador de Storage para crear rápidamente un URI de SAS si todavía no tiene uno.
Si tiene PowerShell, debe usar la versión 3.11.0 del módulo Az.Storage.
Elija una de las opciones siguientes para crear la definición y la versión de la aplicación de máquina virtual:
- Vaya a Azure Portal y busque y seleccione Azure Compute Gallery.
- Seleccione la galería que desea usar en la lista.
- En la parte superior de la página de la galería, seleccione Agregar y luego VM application definition (Definición de aplicación de máquina virtual) en la lista desplegable. Se abrirá la página Crear una definición de aplicación de máquina virtual.
- En la pestaña Datos básicos, escriba un nombre para la aplicación y elija si es para máquinas virtuales que ejecutan Linux o Windows.
- Seleccione la pestaña Opciones de publicación si quiere especificar cualquiera de las siguientes opciones para la definición de la aplicación de máquina virtual:
- Descripción de la definición de la aplicación de máquina virtual.
- Fecha final del ciclo de vida
- Vínculo a los Términos de licencia
- URI de una declaración de privacidad
- URI de las notas de la versión
- Seleccione Revisar y crear cuando haya terminado.
- Al finalizar la validación, seleccione Crear para implementar la definición.
- Una vez finalizada la implementación, seleccione Ir al recurso.
- En la página de la aplicación, seleccione Create a VM application version (Crear una versión de aplicación de máquina virtual). Se abre la página Crear una versión de aplicación de máquina virtual.
- Escriba un número de versión, por ejemplo, 1.0.0.
- Seleccione la región en la que ha cargado el paquete de aplicación.
- En Source application package (Paquete de aplicación de origen), seleccione Examinar. Seleccione la cuenta de almacenamiento y luego el contenedor donde se encuentra el paquete. Seleccione el paquete en la lista y luego Seleccionar cuando haya terminado. Como alternativa, puede pegar el identificador URI de SAS en este campo si lo prefiere.
- Escriba el script de instalación. También puede proporcionar el script de desinstalación y el script de actualización. Vea la información general para obtener información sobre cómo crear los scripts.
- Si tiene un archivo de configuración predeterminado cargado en una cuenta de almacenamiento, puede seleccionarlo en Configuración predeterminada.
- Seleccione Excluir de las últimas si no quiere que esta versión aparezca como la versión más reciente al crear una máquina virtual.
- En Fecha final del ciclo de vida, seleccione una fecha futura para realizar un seguimiento de cuándo se debe retirar esta versión. No se elimina ni se quita automáticamente, solo es para su propio seguimiento.
- Para replicar esta versión en otras regiones, seleccione la pestaña Replicación, agregue más regiones y realice cambios en el número de réplicas por región. La región original donde se ha creado la versión debe estar en la lista y no se puede quitar.
- Cuando haya terminado de realizar cambios, seleccione Revisar y crear en la parte inferior de la página.
- Cuando la validación aparezca como correcta, seleccione Crear para implementar la versión de la aplicación de máquina virtual.
Ahora puede crear una máquina virtual e implementar la aplicación de máquina virtual en ella mediante el portal. Simplemente cree la máquina virtual como de costumbre y, en la pestaña Opciones avanzadas, elija Select a VM application to install (Seleccionar una aplicación de máquina virtual para instalar).
Seleccione la aplicación de máquina virtual en la lista y, después, seleccione Guardar en la parte inferior de la página.
Si tiene más de una aplicación de máquina virtual para instalar, puede volver a establecer el orden de instalación de cada aplicación de máquina virtual en la pestaña Opciones avanzadas.
También puede implementar la aplicación de máquina virtual en máquinas virtuales que se están ejecutando actualmente. Seleccione la opción Extensions + applications (Extensiones y aplicaciones) en Configuración en el menú izquierdo al ver los detalles de la máquina virtual en el portal.
Elija Aplicaciones de máquina virtual y, luego, seleccione Agregar aplicación para agregar la aplicación de máquina virtual.
Seleccione la aplicación de máquina virtual en la lista y, después, seleccione Guardar en la parte inferior de la página.
Para mostrar el estado de la aplicación de máquina virtual, vaya a la pestaña Extensiones + aplicaciones o la configuración y compruebe el estado de VMAppExtension:
Para mostrar el estado de la aplicación de máquina virtual para VMSS, vaya a la página VMSS, Instancias, seleccione una de ellas y vaya a VMAppExtension:
Las aplicaciones de máquina virtual necesitan la versión 2.30.0 o posterior de la CLI de Azure.
Cree la definición de la aplicación de máquina virtual mediante az sig gallery-application create. En este ejemplo se crea una definición de aplicación de máquina virtual denominada myApp para máquinas virtuales basadas en Linux.
az sig gallery-application create \
--application-name myApp \
--gallery-name myGallery \
--resource-group myResourceGroup \
--os-type Linux \
--location "East US"
Cree una versión de la aplicación de máquina virtual mediante az sig gallery-application version create. Los caracteres permitidos para la versión son números y puntos. Los números deben estar dentro del rango de un entero de 32 bits. Formato: VersiónPrincipal.VersiónSecundaria.Revisión.
Reemplace los valores de los parámetros por los suyos propios.
az sig gallery-application version create \
--version-name 1.0.0 \
--application-name myApp \
--gallery-name myGallery \
--location "East US" \
--resource-group myResourceGroup \
--package-file-link "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" \
--install-command "mv myApp .\myApp\myApp" \
--remove-command "rm .\myApp\myApp" \
--update-command "mv myApp .\myApp\myApp" \
--default-configuration-file-link "https://<storage account name>.blob.core.windows.net/<container name>/<filename>"\
Establezca una aplicación de máquina virtual en una máquina virtual existente mediante az vm application set y reemplace los valores de los parámetros por los suyos propios.
az vm application set \
--resource-group myResourceGroup \
--name myVM \
--app-version-ids /subscriptions/{subID}/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 \
--treat-deployment-as-failure true
Para establecer varias aplicaciones en una máquina virtual:
az vm application set \
--resource-group myResourceGroup \
--name myVM \
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp2/versions/1.0.1 \
--treat-deployment-as-failure true true
Para agregar una aplicación a una instancia de VMSS, use az vmss application set:
az vmss application set \
--resource-group myResourceGroup \
--name myVmss \
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 \
--treat-deployment-as-failure true
Para agregar varias aplicaciones a una instancia de VMSS:
az vmss application set \
--resource-group myResourceGroup \
--name myVmss
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp2/versions/1.0.0 \
--treat-deployment-as-failure true
Para comprobar el estado de implementación de la máquina virtual de la aplicación, use az vm get-instance-view:
az vm get-instance-view -g myResourceGroup -n myVM --query "instanceView.extensions[?name == 'VMAppExtension']"
Para comprobar el estado de implementación en VMSS de la aplicación, use az vmss get-instance-view:
az vmss get-instance-view --ids (az vmss list-instances -g myResourceGroup -n myVmss --query "[*].id" -o tsv) --query "[*].extensions[?name == 'VMAppExtension']"
Nota
El comando de estado de la implementación de VMSS anterior no muestra el identificador de instancia con el resultado. Para mostrar el identificador de instancia con el estado de la extensión en cada instancia, se requiere scripting adicional. Consulte el ejemplo siguiente de la CLI de VMSS que contiene la sintaxis de PowerShell:
$ids = az vmss list-instances -g myResourceGroup -n myVmss --query "[*].{id: id, instanceId: instanceId}" | ConvertFrom-Json
$ids | Foreach-Object {
$iid = $_.instanceId
Write-Output "instanceId: $iid"
az vmss get-instance-view --ids $_.id --query "extensions[?name == 'VMAppExtension']"
}
Cree la definición de aplicación de máquina virtual mediante New-AzGalleryApplication
. En este ejemplo, se crea una aplicación Linux denominada myApp en la instancia de Azure Compute Gallery myGallery, en el grupo de recursos myGallery, y se le asigna una breve descripción de la aplicación de máquina virtual para uso personal. Reemplace los valores según sea necesario.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
New-AzGalleryApplication `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-Location "East US" `
-Name $applicationName `
-SupportedOSType Linux `
-Description "Backend Linux application for finance."
Cree una versión de la aplicación mediante New-AzGalleryApplicationVersion
. Los caracteres permitidos para la versión son números y puntos. Los números deben estar dentro del rango de un entero de 32 bits. Formato: VersiónPrincipal.VersiónSecundaria.Revisión.
En este ejemplo, se crea el número de versión 1.0.0. Reemplace los valores de las variables según sea necesario.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$version = "1.0.0"
New-AzGalleryApplicationVersion `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-GalleryApplicationName $applicationName `
-Name $version `
-PackageFileLink "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" `
-DefaultConfigFileLink "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" `
-Location "East US" `
-Install "mv myApp .\myApp\myApp" `
-Remove "rm .\myApp\myApp" `
Para agregar la aplicación a una máquina virtual existente, obtenga la versión de la aplicación y úsela para obtener el identificador de versión de la aplicación de máquina virtual. Use el identificador para agregar la aplicación a la configuración de la máquina virtual.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$version = "1.0.0"
$vmName = "myVM"
$vm = Get-AzVM -ResourceGroupName $rgname -Name $vmName
$appVersion = Get-AzGalleryApplicationVersion `
-GalleryApplicationName $applicationName `
-GalleryName $galleryName `
-Name $version `
-ResourceGroupName $rgName
$packageId = $appVersion.Id
$app = New-AzVmGalleryApplication -PackageReferenceId $packageId
Add-AzVmGalleryApplication -VM $vm -GalleryApplication $app -TreatFailureAsDeploymentFailure true
Update-AzVM -ResourceGroupName $rgName -VM $vm
Para agregar la aplicación a una instancia de VMSS:
$vmss = Get-AzVmss -ResourceGroupName $rgname -Name $vmssName
$appVersion = Get-AzGalleryApplicationVersion `
-GalleryApplicationName $applicationName `
-GalleryName $galleryName `
-Name $version `
-ResourceGroupName $rgName
$packageId = $appVersion.Id
$app = New-AzVmssGalleryApplication -PackageReferenceId $packageId
Add-AzVmssGalleryApplication -VirtualMachineScaleSetVM $vmss.VirtualMachineProfile -GalleryApplication $app
Update-AzVmss -ResourceGroupName $rgName -VirtualMachineScaleSet $vmss -VMScaleSetName $vmssName
Compruebe si la aplicación se ha agregado correctamente:
$rgName = "myResourceGroup"
$vmName = "myVM"
$result = Get-AzVM -ResourceGroupName $rgName -VMName $vmName -Status
$result.Extensions | Where-Object {$_.Name -eq "VMAppExtension"} | ConvertTo-Json
Para comprobar si hay instancia de VMSS:
$rgName = "myResourceGroup"
$vmssName = "myVMss"
$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
Cree la definición de la aplicación.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/galleries/\<**galleryName**\>/applications/\<**applicationName**\>?api-version=2019-03-01
{
"location": "West US",
"name": "myApp",
"properties": {
"supportedOSType": "Windows | Linux",
"endOfLifeDate": "2020-01-01"
}
}
Nombre del campo |
Descripción |
Limitaciones |
name |
Nombre único para la aplicación de máquina virtual dentro de la galería |
La longitud máxima es de 117 caracteres. Los caracteres permitidos son letras mayúsculas o minúsculas, números, guiones (-), puntos (.) y guiones bajos (_). No se permite que los nombres finalicen con un punto (.). |
supportedOSType |
Si se trata de una aplicación Windows o Linux |
"Windows" o "Linux" |
endOfLifeDate |
Fecha de finalización futura de la aplicación. Tenga en cuenta que esto es solo para referencia y no se aplica. |
Fecha futura válida |
Cree una versión de la aplicación de máquina virtual.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/galleries/\<**galleryName**\>/applications/\<**applicationName**\>/versions/\<**versionName**\>?api-version=2019-03-01
{
"location": "$location",
"properties": {
"publishingProfile": {
"source": {
"mediaLink": "$mediaLink",
"defaultConfigurationLink": "$configLink"
},
"manageActions": {
"install": "echo installed",
"remove": "echo removed",
"update": "echo update"
},
"targetRegions": [
{
"name": "$location1",
"regionalReplicaCount": 1
},
{ "name": "$location1" }
]
},
"endofLifeDate": "datetime",
"excludeFromLatest": "true | false"
}
}
Nombre del campo |
Descripción |
Limitaciones |
ubicación |
Ubicación de origen de la versión de la aplicación de máquina virtual |
Región de Azure válida |
mediaLink |
Dirección URL que contiene el paquete de versión de la aplicación |
Dirección URL de almacenamiento válida y existente |
defaultConfigurationLink |
Opcional. Dirección URL que contiene la configuración predeterminada, que se puede invalidar en el momento de la implementación. |
Dirección URL de almacenamiento válida y existente |
Instalar |
Comando para instalar la aplicación |
Comando válido para el sistema operativo indicado |
Quitar |
Comando para quitar la aplicación |
Comando válido para el sistema operativo indicado |
Actualizar |
Opcional. Comando para actualizar la aplicación. Si no se especifica y se necesita una actualización, se quita la versión anterior y se instala la nueva. |
Comando válido para el sistema operativo indicado |
targetRegions/name |
Nombre de una región en la que se va a replicar |
Validación de la región de Azure |
targetRegions/regionalReplicaCount |
Opcional. Número de réplicas de la región que se van a crear. De manera predeterminada, su valor es 1. |
Un entero comprendido entre 1 y 3, ambos incluidos |
endOfLifeDate |
Fecha de finalización futura de la versión de la aplicación. Tenga en cuenta que esto es solo para referencia del cliente y no se aplica. |
Fecha futura válida |
excludeFromLatest |
Si se especifica, esta versión no se tendrá en cuenta para la versión más reciente. |
Verdadero o falso |
Para agregar una versión de la aplicación de máquina virtual a una máquina virtual, realice una operación PUT en la máquina virtual.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/virtualMachines/\<**VMName**\>?api-version=2019-03-01
{
"properties": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version}",
"configurationReference": "{path to configuration storage blob}",
"treatFailureAsDeploymentFailure": false
}
]
}
},
"name": "{vm name}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group}/providers/Microsoft.Compute/virtualMachines/{vm name}",
"location": "{vm location}"
}
Para aplicar la aplicación de máquina virtual a un conjunto de escalado uniforme:
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/
virtualMachineScaleSets/\<**VMSSName**\>?api-version=2019-03-01
{
"properties": {
"virtualMachineProfile": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version}",
"configurationReference": "{path to configuration storage blob}",
"treatFailureAsDeploymentFailure": false
}
]
}
}
},
"name": "{vm name}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group}/providers/Microsoft.Compute/virtualMachines/{vm name}",
"location": "{vm location}"
}
Nombre del campo |
Descripción |
Limitaciones |
orden |
Opcional. Orden en el que se deben implementar las aplicaciones. Véase a continuación. |
Validación de entero |
packageReferenceId |
Referencia a la versión de la aplicación de la galería |
Referencia válida de la versión de la aplicación |
configurationReference |
Opcional. Dirección URL completa de un blob de almacenamiento que contiene la configuración de esta implementación. Esto invalidará cualquier valor proporcionado anteriormente para defaultConfiguration. |
Referencia válida de blob de almacenamiento |
treatFailureAsDeploymentFailure |
Opcional. Estado de aprovisionamiento de la aplicación de máquina virtual. Cuando se establece en false, el estado de aprovisionamiento siempre mostrará "realizado correctamente", independientemente del error de implementación de la aplicación. |
Verdadero o falso |
Se puede usar el campo order para especificar dependencias entre aplicaciones. Las reglas de orden son las siguientes:
Caso |
Significado de instalación |
Significado del error |
No se especifica ningún orden |
Las aplicaciones sin ordenar se instalan después de las aplicaciones ordenadas. No hay ninguna garantía de orden de instalación entre las aplicaciones sin ordenar. |
Los errores de instalación de otras aplicaciones, ya sean ordenadas o sin ordenar, no afectan a la instalación de las aplicaciones sin ordenar. |
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 orden se instalarán después de las que tienen órdenes inferiores y antes de las que tienen órdenes superiores. |
Si no se ha podido instalar una aplicación anterior con un orden inferior, no se instala ninguna aplicación con este orden. Si no se ha podido instalar una aplicación con este orden, no se instala ninguna aplicación con un orden superior. |
Órdenes crecientes |
Las aplicaciones se instalarán después de las que tienen órdenes inferiores y antes de las que de órdenes superiores. |
Si no se puede instalar una aplicación anterior con un orden inferior, esta aplicación no se instalará. Si no se puede instalar esta aplicación, no se instala ninguna aplicación con un orden superior. |
La respuesta incluye el modelo de máquina virtual completo. A continuación se den los elementos pertinentes.
{
"name": "{vm name}",
"id": "{vm id}",
"type": "Microsoft.Compute/virtualMachines",
"location": "{vm location}",
"properties": {
"applicationProfile": {
"galleryApplications": ""
},
"provisioningState": "Updating"
},
"resources": [
{
"name": "VMAppExtension",
"id": "{extension id}",
"type": "Microsoft.Compute/virtualMachines/extensions",
"location": "centraluseuap",
"properties": "@{autoUpgradeMinorVersion=True; forceUpdateTag=7c4223fc-f4ea-4179-ada8-c8a85a1399f5; provisioningState=Creating; publisher=Microsoft.CPlat.Core; type=VMApplicationManagerLinux; typeHandlerVersion=1.0; settings=}"
}
]
}
Si las aplicaciones de máquina virtual todavía no se han instalado en la máquina virtual, el valor estará vacío.
Para obtener el resultado de la vista de instancia de máquina virtual:
GET
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/virtualMachines/\<**VMName**\>/instanceView?api-version=2019-03-01
El resultado tiene el aspecto siguiente:
{
...
"extensions" [
...
{
"name": "VMAppExtension",
"type": "Microsoft.CPlat.Core.VMApplicationManagerLinux",
"typeHandlerVersion": "1.0.9",
"statuses": [
{
"code": "ProvisioningState/succeeded",
"level": "Info",
"displayStatus": "Provisioning succeeded",
"message": "Enable succeeded: {\n \"CurrentState\": [\n {\n \"applicationName\": \"doNothingLinux\",\n \"version\": \"1.0.0\",\n \"result\": \"Install SUCCESS\"\n },\n {
\n \"applicationName\": \"badapplinux\",\n \"version\": \"1.0.0\",\n \"result\": \"Install FAILED Error executing command \u0027exit 1\u0027: command terminated with exit status=1\"\n }\n ],\n \"ActionsPerformed\": []\n}
"
}
]
}
...
]
}
El estado de la aplicación de máquina virtual se encuentra en el mensaje de estado del resultado de la extensión de la aplicación de la máquina virtual en la vista de instancia.
Para obtener el estado de una aplicación de VMSS:
GET
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/ virtualMachineScaleSets/\<**VMSSName**\>/virtualMachines/<**instanceId**>/instanceView?api-version=2019-03-01
La salida es similar al ejemplo de máquina virtual anterior.