Partilhar via


Criar e implantar aplicativo VM

Aplicativo VM é um tipo de recurso na Galeria de Computação do Azure que simplifica o gerenciamento, o compartilhamento e a distribuição global de aplicativos para suas máquinas virtuais. Saiba mais sobre o aplicativo VM

Para criar e implantar aplicativos na VM do Azure, primeiro empacote e carregue seu aplicativo na Conta de Armazenamento do Azure como um blob de armazenamento. Em seguida, crie Azure VM application recursos e VM application version recursos referenciando esses blobs de armazenamento. Por fim, implante o aplicativo em qualquer VM ou Conjunto de Escala de Máquina Virtual passando a referência do aplicativo no applicationProfile.

Pré-requisitos

  1. Crie uma conta de armazenamento do Azure e um contêiner de armazenamento. Esse contêiner é usado para carregar seus arquivos de aplicativo. Recomenda-se usar uma conta de armazenamento com acesso anônimo desativado para maior segurança.
  2. Crie a Galeria de Computação do Azure para armazenar e compartilhar recursos do aplicativo.

Empacotar o aplicativo

Captura de tela mostrando a estrutura de pastas recomendada para carregar e criar aplicativos VM.

1. Empacote os arquivos do aplicativo

  • Se a instalação do seu aplicativo requer um único arquivo (.exe, .msi, .sh, .ps, etc.), então você pode usá-lo como está.
  • Se a instalação do seu aplicativo requer vários arquivos (arquivo executável com arquivo de configuração, dependências, arquivos de manifesto, scripts, etc.), então você deve arquivá-lo (usando .zip, .tar, .tar.gz, etc.) em um único arquivo.
  • Para o aplicativo de microsserviço, você pode empacotar e publicar cada microsserviço como um Aplicativo de VM do Azure separado. Isso facilita a reutilização de aplicativos, o desenvolvimento entre equipes e a instalação sequencial de microsserviços usando order a propriedade no applicationProfile.

2. (Opcional) Empacote o arquivo de configuração do aplicativo

  • Opcionalmente, você pode fornecer o arquivo de configuração separadamente. Isso reduz a sobrecarga de arquivamento e desarquivamento de pacotes de aplicativos. Os arquivos de configuração também podem ser passados durante a implantação do aplicativo, permitindo a instalação personalizada por VM.

3. Crie o script de instalação

Depois que o aplicativo e o blob de configuração são baixados na VM, o Azure executa o script de instalação fornecido para instalar o aplicativo. O script de instalação é fornecido como uma cadeia de caracteres e tem um limite máximo de caracteres de 4.096 caracteres. Os comandos install devem ser escritos assumindo que o pacote do aplicativo e o arquivo de configuração estejam no diretório atual.

Pode haver poucas operações necessárias para serem executadas no script de instalação

  • (Opcional) Use o interpretador de comando correto O interpretador de comandos padrão usado pelo Azure está /bin/bash no sistema operacional Linux e cmd.exe no sistema operacional Windows. É possível usar um interpretador diferente, como Chocolatey ou PowerShell, se estiver instalado na máquina. Chame o executável e passe os comandos para ele. Por exemplo, powershell.exe -command '<powershell command>'. Se você estiver usando o PowerShell, precisará estar usando a versão 3.11.0 do módulo Az.Storage.

  • (Opcional) Renomear blob de aplicativo e blob de configuração O Azure não pode manter o nome de arquivo original e as extensões de arquivo. Portanto, o arquivo de aplicativo baixado e o arquivo de configuração têm um nome padrão como "MyVMApp" e "MyVMApp-config" sem uma extensão de arquivo. Você pode renomear o arquivo com a extensão de arquivo usando o script de instalação ou também pode passar os nomes packageFileName e configFileName as propriedades do publishingProfile recurso de versão do aplicativo VM. O Azure usará esses nomes em vez de nomes padrão durante o download dos arquivos.

  • (Opcional) Mova o aplicativo e o blob de configuração para o local apropriado O Azure baixa o blob de aplicativo e o blob de configuração para os seguintes locais. O script de instalação deve mover os arquivos para locais apropriados quando necessário.

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

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

  • Desarquivar o blob do aplicativo Para pacotes de aplicativos arquivados, ele precisa ser desarquivado antes de instalar o aplicativo. Recomenda-se o uso de .zip ou .tar, já que a maioria dos sistemas operacionais tem suporte interno para desarquivar esses formatos. Para outros formatos, certifique-se de que o SO convidado fornece suporte.

  • (Opcional) Definir políticas e permissões de execução corretas Após o desarquivamento, as permissões de arquivo podem ser redefinidas. É uma boa prática definir as permissões corretas antes de executar os arquivos.

  • Converter o script em string O script de instalação é passado como uma cadeia de caracteres para a install propriedade no publishingProfile recurso de versão do Aplicativo VM do Azure.

Aqui estão exemplos de scripts de instalação baseados na extensão de arquivo do blob do aplicativo:

#!/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 string:

"#!/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. Crie o script de exclusão

O script delete permite que você defina as operações de exclusão para o aplicativo. O script delete é fornecido como uma cadeia de caracteres e tem um limite máximo de caracteres de 4.096 caracteres. Escreva os comandos delete assumindo que o pacote do aplicativo e o arquivo de configuração estejam no diretório atual.

Pode haver poucas operações que o script de exclusão deve executar.

  • Desinstalar o aplicativo: Desinstale corretamente o aplicativo da VM. Por exemplo, execute uninstall.exe no Windows ou sudo apt remove app no Linux.

  • Remova os arquivos residuais: Exclua arquivos de aplicativos residuais da VM. Por exemplo, execute Remove-Item -Path "$PWD\*" -Recurse -Force -ErrorAction SilentlyContinue no Windows ou sudo rm -rf ./* ./.??* no Linux.

Carregar os arquivos do aplicativo para a conta de armazenamento do Azure

1. Carregue seus arquivos de aplicativo e configuração em um contêiner em uma conta de armazenamento do Azure.

Seu aplicativo pode ser armazenado em um bloco ou blob de página. Se você optar por usar um blob de página, precisará alinhar os arquivos em bytes antes de carregá-los. Use o exemplo a seguir para alinhar o arquivo 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. Gerar URL SAS para o pacote do aplicativo e o arquivo de configuração

Depois que os arquivos de aplicativo e configuração forem carregados na conta de armazenamento, você precisará gerar uma URL SAS com privilégio de leitura para esses blobs. Essas URLs SAS são fornecidas como referência durante a criação do recurso de versão do aplicativo VM. Para contas de armazenamento habilitadas para acesso anônimo, a URL de blob também pode ser usada. No entanto, recomenda-se o uso de URL SAS para melhorar a segurança. Você pode usar o Gerenciador de Armazenamento para criar rapidamente um URI SAS, se ainda não tiver um.


#!/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

Criar o aplicativo VM

Para criar o Aplicativo VM, primeiro crie o recurso Aplicativo VM, que descreve o aplicativo. Em seguida, crie um recurso de Versão do Aplicativo VM dentro dele, que contém a carga útil do aplicativo VM e scripts para instalar, atualizar e excluir o aplicativo. A carga é fornecida usando a URL SAS para o contêiner de blob na Conta de Armazenamento do Azure.

Consulte o esquema para o recurso de versão do Aplicativo VM e do Aplicativo VM para saber mais sobre cada propriedade.

Crie a definição da aplicação da máquina virtual usando a 'API de criação de aplicações de galeria'

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

Crie uma versão da aplicação de VM usando a 'API de criar versão de aplicação de galeria'.

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

Implantar os aplicativos VM

Um ou mais aplicações de VM agora podem ser referenciadas no applicationProfile da VM do Azure ou nos Conjuntos de Escala de Máquinas Virtuais do Azure. Em seguida, o Azure extrai a carga útil do Aplicativo VM e a instala em cada VM usando o script de instalação fornecido. A order propriedade define a ordem sequencial na qual os aplicativos VM são instalados na VM.

Consulte o esquema de applicationProfile do VM / Virtual Machine Scale set para saber mais sobre cada propriedade.

Para adicionar uma versão de aplicativo VM a uma VM, execute um PUT na VM.

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 o aplicativo VM a um conjunto de escala 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}"
}

A resposta inclui o modelo de VM completo. Seguem-se as partes relevantes.

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

Próximos passos

Saiba mais sobre os Aplicativos de VM do Azure. Saiba como gerenciar, atualizar ou excluir Aplicativos de VM do Azure.