Compartir vía


Creación e implementación de una aplicación de máquina virtual

La aplicación de máquina virtual es un tipo de recurso en Azure Compute Gallery que simplifica la administración, el uso compartido y la distribución global de aplicaciones para las máquinas virtuales. Más información sobre la aplicación de máquina virtual

Para crear e implementar aplicaciones en máquinas virtuales de Azure, primero empaquete y cargue la aplicación en la cuenta de Azure Storage como un blob de almacenamiento. A continuación, cree un Azure VM application recurso y VM application version un recurso que haga referencia a estos blobs de almacenamiento. Por último, implemente la aplicación en cualquier máquina virtual o conjunto de escalado de máquinas virtuales pasando la referencia de la aplicación en applicationProfile.

Prerrequisitos

  1. Cree una cuenta de almacenamiento de Azure y un contenedor de almacenamiento. Este contenedor se usa para cargar los archivos de la aplicación. Se recomienda usar la cuenta de almacenamiento con acceso anónimo deshabilitado para mayor seguridad.
  2. Cree azure Compute Gallery para almacenar y compartir recursos de la aplicación.

Empaquetar la aplicación

Captura de pantalla que muestra la estructura de carpetas recomendada para cargar y crear aplicaciones de máquina virtual.

1. Empaquetar los archivos de aplicación

  • Si la instalación de la aplicación requiere un único archivo (.exe, .msi, .sh, .ps, etc.), puede usarlo tal como está.
  • Si la instalación de la aplicación requiere varios archivos (archivo ejecutable con archivo de configuración, dependencias, archivos de manifiesto, scripts, etc.), debe archivarlo (mediante .zip, .tar, .tar.gz, etc.) en un solo archivo.
  • Para la aplicación de microservicios, puede empaquetar y publicar cada microservicio como una aplicación de máquina virtual de Azure independiente. Esto facilita la reutilización de aplicaciones, el desarrollo entre equipos y la instalación secuencial de microservicios mediante order la propiedad en applicationProfile.

2. (Opcional) Empaquetar el archivo de configuración de la aplicación

  • Opcionalmente, puede proporcionar el archivo de configuración por separado. Esto reduce la sobrecarga del archivado y la desarchivación de paquetes de aplicación. Los archivos de configuración también se pueden pasar durante la implementación de la aplicación, lo que permite la instalación personalizada por máquina virtual.

3. Creación del script de instalación

Después de descargar la aplicación y el blob de configuración en la máquina virtual, Azure ejecuta el script de instalación proporcionado para instalar la aplicación. El script de instalación se proporciona como una cadena y tiene un límite máximo de caracteres de 4096 caracteres. Los comandos de instalación deben escribirse suponiendo que el paquete de aplicación y el archivo de configuración estén en el directorio actual.

Puede haber pocas operaciones necesarias para realizarse en el script de instalación.

  • (Opcional) Use el intérprete de comandos correcto . El intérprete de comandos predeterminado usado por Azure está /bin/bash en el sistema operativo Linux y cmd.exe en el sistema operativo Windows. Es posible usar un intérprete diferente, como Chocolatey o PowerShell, si está instalado en la máquina. Llame al archivo ejecutable y pase los comandos a él. Por ejemplo, powershell.exe -command '<powershell command>'. Si tiene PowerShell, debe usar la versión 3.11.0 del módulo Az.Storage.

  • (Opcional) Cambiar el nombre del blob de la aplicación y el blob de configuración Azure no puede conservar el nombre de archivo original y las extensiones de archivo. Por lo tanto, el archivo de aplicación descargado y el archivo de configuración tienen un nombre predeterminado como "MyVMApp" y "MyVMApp-config" sin una extensión de archivo. Puede cambiar el nombre del archivo con la extensión de archivo mediante el script de instalación o también puede pasar los nombres en packageFileName y configFileName las propiedades del recurso de versión de lapublishingProfile aplicación de máquina virtual. A continuación, Azure usará estos nombres en lugar de los nombres predeterminados al descargar los archivos.

  • (Opcional) Mover la aplicación y el blob de configuración a la ubicación adecuada Azure descarga el blob de aplicación y el blob de configuración en las siguientes ubicaciones. El script de instalación debe mover los archivos a las ubicaciones adecuadas cuando sea necesario.

    Linux: /var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<application name>/<application version>

    Windows: C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.16\Downloads\<application name>\<application version>

  • Desarchivar blob de aplicación Para los paquetes de aplicación archivados, debe desarchivarse antes de instalar la aplicación. Se recomienda usar .zip o .tar, ya que la mayoría del sistema operativo tiene compatibilidad integrada para desarchivar estos formatos. Para otros formatos, asegúrese de que el sistema operativo invitado proporciona compatibilidad.

  • (Opcional) Establecer la directiva de ejecución correcta y los permisos Después de anular el archivo, se podrían restablecer los permisos de archivo. Se recomienda establecer los permisos adecuados antes de ejecutar los archivos.

  • Conversión del script en una cadena El script de instalación se pasa como una cadena para la install propiedad en el recurso de la publishingProfile versión de la aplicación de máquina virtual de Azure.

Estos son los scripts de instalación de ejemplo basados en la extensión de archivo del blob de la aplicación.

#!/bin/bash

# Rename blobs
mv MyVMApp app.tar
mv MyVMApp-config app-config.yaml

# Unarchive application
mkdir -p app
tar -xf app.tar -C app

# Set permissions
chmod -R +x app
chmod -R +r app

# Install the script (example: install.sh with config)
bash ./app/install.sh --config app-config.yaml

# OR Install the .deb package (example: install.deb without config)
# sudo dpkg -i ./app/install.deb

# OR Install the .rpm package (example: install.rpm without config)
# sudo rpm -ivh ./app/install.rpm

Script como cadena:

"#!/bin/bash\nmv MyVMApp app.tar\nmv MyVMApp-config app-config.yaml\nmkdir -p app\ntar -xf app.tar -C app\nchmod -R +x app\nchmod -R +r app\nbash ./app/install.sh --config app-config.yaml\n# sudo dpkg -i ./app/install.deb\n# sudo rpm -ivh ./app/install.rpm"

4. Creación del script de eliminación

El script de eliminación permite definir las operaciones de eliminación de la aplicación. El script de eliminación se proporciona como una cadena y tiene un límite máximo de caracteres de 4096 caracteres. Escriba los comandos delete suponiendo que el paquete de aplicación y el archivo de configuración estén en el directorio actual.

Puede haber pocas operaciones que eliminen el script.

  • Desinstalar aplicación: Desinstale correctamente la aplicación de la máquina virtual. Por ejemplo, ejecute uninstall.exe en Windows o sudo apt remove app en Linux.

  • Quitar archivos residuales: Elimine los archivos de aplicaciones residuales de la máquina virtual. Por ejemplo, ejecute Remove-Item -Path "$PWD\*" -Recurse -Force -ErrorAction SilentlyContinue en Windows o sudo rm -rf ./* ./.??* en Linux.

Carga de los archivos de aplicación en la cuenta de Azure Storage

1. Cargue los archivos de configuración y aplicación en un contenedor de una cuenta de almacenamiento de Azure.

La aplicación se puede almacenar en un blob en bloques o un blob en páginas. Si decide usar un blob en páginas, debe alinear los archivos por bytes antes de cargarlos. Use el ejemplo siguiente para alinear el archivo por bytes.

inputFile="<the file you want to pad>"

# Get the file size
fileSize=$(stat -c %s "$inputFile")

# Calculate the remainder when divided by 512
remainder=$((fileSize % 512))

if [ "$remainder" -ne 0 ]; then
    # Calculate how many bytes to pad
    difference=$((512 - remainder))
    
    # Create padding (empty bytes)
    dd if=/dev/zero bs=1 count=$difference >> "$inputFile"
fi

2. Generar la dirección URL de SAS para el paquete de aplicación y el archivo de configuración

Una vez que la aplicación y los archivos de configuración se cargan en la cuenta de almacenamiento, debe generar una dirección URL de SAS con privilegios de lectura para estos blobs. Estas direcciones URL de SAS se proporcionan como referencia al crear el recurso de versión de la aplicación de máquina virtual. En el caso de las cuentas de almacenamiento habilitadas para el acceso anónimo, también se puede usar la dirección URL del blob. Sin embargo, se recomienda usar la dirección URL de SAS para mejorar la seguridad. Puede usar Explorador de Storage para crear rápidamente un URI de SAS si todavía no tiene uno.


#!/bin/bash

# === CONFIGURATION ===
STORAGE_ACCOUNT="yourstorageaccount"
CONTAINER_NAME="yourcontainer"
LOCAL_FOLDER="./your-local-folder"
SAS_EXPIRY_HOURS=24

# === LOGIN (if not already logged in) ===
az login --only-show-errors

# === CREATE CONTAINER IF NOT EXISTS ===
az storage container create \
  --name $CONTAINER_NAME \
  --account-name $STORAGE_ACCOUNT \
  --auth-mode login \
  --only-show-errors

# === UPLOAD FILES ===
az storage blob upload-batch \
  --account-name $STORAGE_ACCOUNT \
  --destination $CONTAINER_NAME \
  --source $LOCAL_FOLDER \
  --auth-mode login \
  --only-show-errors

# === GENERATE SAS URLs ===
echo "Generating SAS URLs..."
FILES=$(find $LOCAL_FOLDER -type f)

for FILE in $FILES; do
  BLOB_NAME="${FILE#$LOCAL_FOLDER/}"
  EXPIRY=$(date -u -d "+$SAS_EXPIRY_HOURS hours" '+%Y-%m-%dT%H:%MZ')

  SAS_TOKEN=$(az storage blob generate-sas \
    --account-name $STORAGE_ACCOUNT \
    --container-name $CONTAINER_NAME \
    --name "$BLOB_NAME" \
    --permissions r \
    --expiry $EXPIRY \
    --auth-mode login \
    -o tsv)

  SAS_URL="https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER_NAME}/${BLOB_NAME}?${SAS_TOKEN}"
  echo "$BLOB_NAME: $SAS_URL"
done

Creación de la aplicación de máquina virtual

Para crear la aplicación de máquina virtual, cree primero el recurso aplicación de máquina virtual, que describe la aplicación. A continuación, cree un recurso de versión de aplicación de máquina virtual en él, que contiene la carga de la aplicación de máquina virtual y los scripts para instalar, actualizar y eliminar la aplicación. La carga se proporciona mediante la dirección URL de SAS en el contenedor de blobs en la cuenta de Azure Storage.

Consulte esquema para el recurso aplicación de máquina virtual y versión de la aplicación de máquina virtual para obtener más información sobre cada propiedad.

Cree la definición de la aplicación de máquina virtual usando la API de creación de aplicaciones de la galería

PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{applicationName}?api-version=2024-03-03

{
    "location": "West US",
    "name": "myApp",
    "properties": {
        "supportedOSType": "Windows | Linux",
        "endOfLifeDate": "2020-01-01",
	"description": "Description of the App",
	"eula": "Link to End-User License Agreement (EULA)",
	"privacyStatementUri": "Link to privacy statement for the application",
	"releaseNoteUri": "Link to release notes for the application"
    }
}

Cree una versión de aplicación de máquina virtual utilizando la API de creación de versiones de aplicaciones de galería.

PUT
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/applications/{applicationName}/versions/{versionName}?api-version=2024-03-03

{
  "location": "$location",
  "properties": {
    "publishingProfile": {
      "source": {
        "mediaLink": "$mediaLink",
        "defaultConfigurationLink": "$configLink"
      },
      "manageActions": {
        "install": "echo installed",
        "remove": "echo removed",
        "update": "echo update"
      },
      "targetRegions": [
        {
          "name": "West US",
          "regionalReplicaCount": 1
        },
	{
	  "name": "East US"
	}
      ]
      "endofLifeDate": "datetime",
      "replicaCount": 1,
      "excludeFromLatest": false,
      "storageAccountType": "PremiumV2_LRS | Premium_LRS | Standard_LRS | Standard_ZRS"
      "safetyProfile": {
	"allowDeletionOfReplicatedLocations": false
      }
      "settings": {
	"scriptBehaviorAfterReboot": "None | Rerun",
	"configFileName": "$appConfigFileName",
	"packageFileName": "$appPackageFileName"
      }
   }
}

Implementación de las aplicaciones de máquina virtual

Ahora se puede hacer referencia a una o varias aplicaciones de máquina virtual en la applicationProfile de máquinas virtuales de Azure o conjuntos de escalado de máquinas virtuales de Azure. A continuación, Azure extrae la carga de la aplicación de máquina virtual e la instala en cada máquina virtual mediante el script de instalación proporcionado. La order propiedad define el orden secuencial en el que se instalan las aplicaciones de máquina virtual en la máquina virtual.

Consulte el esquema de applicationProfile de la máquina virtual o el conjunto de escalado de máquinas virtuales para obtener más información sobre cada propiedad.

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=2024-03-03

{
  "properties": {
    "applicationProfile": {
      "galleryApplications": [
        {
          "order": 1,
          "packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version | latest}",
          "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=2024-03-03

{
  "properties": {
    "virtualMachineProfile": {
      "applicationProfile": {
        "galleryApplications": [
          {
            "order": 1,
            "packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version | latest}",
            "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}"
}

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=}"
    }
  ]
}

Pasos siguientes

Obtenga más información sobre las aplicaciones de máquina virtual de Azure. Aprenda a administrar, actualizar o eliminar aplicaciones de máquina virtual de Azure.