Compartilhar via


Criar e implantar aplicativo de VM

O 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 de 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 Máquina Virtual (VM) ou Conjunto de Escala de Máquinas Virtuais, passando a referência do aplicativo em 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. É recomendável usar a conta de armazenamento com acesso anônimo desabilitado para maior segurança.
  2. Crie a Galeria de Computação do Azure para armazenar e compartilhar recursos de aplicativos.

Empacotar o aplicativo

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

1. Empacotar os arquivos do aplicativo

  • Se a instalação do aplicativo exigir um único arquivo (.exe, .msi, .sh, .ps etc.), você poderá usá-lo como está.
  • Se a instalação do aplicativo exigir vários arquivos (arquivo executável com arquivo de configuração, dependências, arquivos de manifesto, scripts etc.), você deverá 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 do aplicativo, o desenvolvimento entre equipes e a instalação sequencial de microsserviços usando order a propriedade no applicationProfile.

2. (Opcional) Empacotar 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 habilitando a instalação personalizada por VM.

3. Criar 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 de instalação devem ser gravados supondo 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 comando padrão usado pelo Azure são /bin/bash no Linux e cmd.exe no Windows. É possível usar um interpretador diferente, como Chocolatey ou PowerShell, se ele estiver instalado no computador. Chame o executável e passe os comandos para ele. Por exemplo, powershell.exe -command '<powershell command>'. Se estiver usando o PowerShell, precisará usar a versão 3.11.0 do módulo Az.Storage.

  • (Opcional) Renomear blob de aplicativos e blob de configuração O Azure não pode reter o nome do 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 passar os nomes nas propriedades packageFileName e configFileName do publishingProfile do recurso de versão de Aplicativo de VM. Em seguida, o Azure usará esses nomes em vez de nomes padrão durante o download dos arquivos.

  • (Opcional) Mover o aplicativo e o blob de configuração para o local apropriado O Azure baixa o blob de aplicativos e o blob de configuração para os locais a seguir. 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>

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

  • Desarquivar blob de aplicativo Para pacotes de aplicativos arquivados, é necessário desarquivar antes de instalar o aplicativo. É recomendável usar .zip ou .tar já que a maioria dos sistemas operacionais tem suporte interno para desarquivar esses formatos. Para outros formatos, verifique se o sistema operacional convidado oferece suporte.

  • (Opcional) Definir a política e as permissões de execução corretas Depois de desarquivar, as permissões de arquivo podem ser redefinidas. É uma boa prática definir as permissões certas antes de executar os arquivos.

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

Aqui estão exemplos de scripts de instalação com base 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 cadeia de caracteres:

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

O script de exclusão permite que você defina as operações de exclusão para o aplicativo. O script de exclusão é fornecido como uma cadeia de caracteres e tem um limite máximo de caracteres de 4.096 caracteres. Escreva os comandos de exclusão supondo 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 aplicativo: Desinstale corretamente o aplicativo da VM. Por exemplo, execute uninstall.exe no Windows ou sudo apt remove app no Linux.

  • Remova 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 na conta de armazenamento do Azure

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

Seu aplicativo pode ser armazenado em um blob de páginas ou bloco. Se você optar por usar um blob de páginas, precisará alinhar os arquivos antes de carregá-los. Use o exemplo a seguir para alinhar por byte seu arquivo.

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 de aplicativos 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 do blob também pode ser usada. No entanto, é recomendável usar a URL sas para melhorar a segurança. Você pode usar Gerenciador de Armazenamento para criar rapidamente um URI de 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 de VM

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

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

Criar a definição de aplicativo de VM usando a "API criar aplicativo da 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 de aplicativo de VM usando a "API criar versão do aplicativo da 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 de VM

Um ou mais aplicativos de VM agora podem ser referenciados na VM do applicationProfile Azure ou nos Conjuntos de Dimensionamento de Máquinas Virtuais do Azure. Em seguida, o Azure extrai o conteúdo do aplicativo da VM e o instala em cada VM usando o script de instalação fornecido. A order propriedade define a ordem sequencial na qual os Aplicativos de VM são instalados na VM.

Consulte o esquema do applicationProfile da VM / Conjunto de Dimensionamento de Máquinas Virtuais para saber mais sobre cada propriedade.

Para adicionar uma versão de aplicativo de 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 de VM a um conjunto de dimensionamento 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. A seguir estão 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óximas etapas

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