Compartilhar via


Visão geral dos aplicativos de VM

Aplicativos de VM são um tipo de recurso na Galeria de Computação do Azure (anteriormente conhecida como Galeria de Imagens Compartilhadas) que simplifica o gerenciamento, o compartilhamento e a distribuição global de aplicativos para suas máquinas virtuais.

Embora seja possível criar uma imagem de uma VM com aplicativos pré-instalados, você precisará atualizar sua imagem sempre que tiver alterações de aplicativo. Separar a instalação do aplicativo das imagens de VM significa que não há necessidade de publicar uma nova imagem para cada linha de alteração de código.

Os pacotes de aplicativos oferecem benefícios em relação a outros métodos de implantação e empacotamento:

  • Aplicativos de VM têm suporte para Políticas do Azure

  • Agrupar e controle de versão de seus pacotes

  • Os aplicativos de VM podem ser replicados globalmente para estar mais próximos de sua infraestrutura, portanto, você não precisa usar o AzCopy ou outros mecanismos de cópia de armazenamento para copiar os bits entre regiões do Azure.

  • Compartilhamento com outros usuários por meio do RBAC (Controle de Acesso Baseado em Função) do Azure

  • Suporte para máquinas virtuais e conjuntos de dimensionamento flexíveis e uniformes

  • Se você tiver regras de NSG (Grupo de Segurança de Rede) aplicadas em sua VM ou conjunto de dimensionamento, talvez não seja possível baixar os pacotes de um repositório da Internet. E com contas de armazenamento, baixar pacotes em VMs bloqueadas exigiria a configuração de links privados.

  • Suporte para Blobs de Blocos: esse recurso permite o tratamento de arquivos grandes com eficiência dividindo-os em blocos menores e gerenciáveis. Ideal para carregar grandes quantidades de dados, streaming e carregamento em segundo plano.

O que são pacotes de aplicativos de VM?

Os pacotes de aplicativos de VM usam vários tipos de recursos:

Recurso Descrição
Galeria de Computação do Azure Uma galeria é um repositório para gerenciar e compartilhar pacotes de aplicativos. Os usuários podem compartilhar o recurso da galeria e todos os recursos filho são compartilhados automaticamente. O nome da galeria deve ser exclusivo por assinatura. Por exemplo, você pode ter uma galeria para armazenar todas as imagens do sistema operacional e outra galeria para armazenar todos os seus aplicativos de VM.
Aplicativo de VM A definição do aplicativo de VM. É um recurso lógico que armazena os metadados comuns para todas as versões abaixo dele. Por exemplo, você pode ter uma definição de aplicativo para Apache Tomcat e ter várias versões dentro dela.
Versão do Aplicativo de VM O recurso implantável. Você pode replicar globalmente suas versões de aplicativo de VM para regiões de destino mais próximas de sua infraestrutura de VM. A Versão do Aplicativo da VM deve ser replicada para uma região antes que ela possa ser implantada em uma VM nessa região.

Limitações

  • Não mais do que 3 réplicas por região: ao criar uma versão de aplicativo de VM, o número máximo de réplicas por região é três.

  • Armazenamento com acesso público ou URI SAS com privilégio de leitura: a conta de armazenamento precisa ter acesso em nível público ou usar um URI SAS com privilégio de leitura, pois outros níveis de restrição falham nas implantações.

  • Repetir instalações com falha: atualmente, a única maneira de repetir uma instalação com falha é remover o aplicativo do perfil e, em seguida, adicioná-lo novamente.

  • Somente 25 aplicativos por VM: não mais de 25 aplicativos podem ser implantados em uma VM a qualquer momento.

  • Tamanho do aplicativo de 2 GB: o tamanho máximo do arquivo de uma versão do aplicativo é 2 GB.

  • Nenhuma garantia sobre reinicializações em seu script: se o script exigir uma reinicialização, a recomendação é colocar esse aplicativo por último durante a implantação. Embora o código tenta lidar com reinicializações, ele pode falhar.

  • Requer um Agente de VM: o agente de VM deve existir na VM e ser capaz de receber estados de meta.

  • Várias versões do mesmo aplicativo na mesma VM: não é possível ter várias versões do mesmo aplicativo em uma VM.

  • No momento, não há suporte para operações de movimentação: não há suporte para mover VMs com Aplicativos de VM para outros grupos de recursos no momento.

Observação

No caso da Galeria de Computação e aplicativos de VM do Azure, a SAS de Armazenamento pode ser excluída após a replicação. No entanto, as operações de atualização subsequentes exigirão uma SAS válida.

Custo

Não há nenhum custo adicional para usar pacotes de aplicativos de VM, mas você é cobrado pelos seguintes recursos:

  • Armazenamento custos de armazenamento de cada pacote e todas as réplicas.
  • Encargos de saída de rede para replicação da primeira versão de imagem da região de origem para as regiões replicadas. As réplicas subsequentes são tratadas dentro da região, portanto, não há encargos adicionais.

Para saber mais sobre saída de rede, confira Preços de largura de banda.

Aplicativos da VM

O recurso de aplicativo de VM define o seguinte sobre seu aplicativo de VM:

  • A Galeria de Computação do Azure em que o aplicativo de VM está armazenado
  • Nome do aplicativo
  • Tipo de sistema operacional com suporte, como Linux ou Windows
  • Uma descrição da aplicação VM

Versão do Aplicativo de VM

As versões de aplicativos de VM são o recurso implantável. As versões são definidas com as seguintes propriedades:

  • Número de versão
  • Link para o arquivo de pacote de aplicativos em uma conta de armazenamento
  • Instalar cadeia de caracteres para instalar o aplicativo
  • Remover cadeia de caracteres para mostrar como remover corretamente o aplicativo
  • Nome do arquivo de pacote a ser usado quando ele é baixado para a VM
  • Nome do arquivo de configuração a ser usado para configurar o aplicativo na VM
  • Um link para o arquivo de configuração do aplicativo VM, que você pode incluir arquivos de licença
  • Atualizar cadeia de caracteres para saber como atualizar o aplicativo de VM para uma versão mais recente
  • Data de fim da vida útil. As datas de fim da vida útil são informativas; você ainda pode implantar versões de aplicativo de VM após a data de fim da vida útil.
  • Excluir a versão dos mais recentes. Você pode impedir que uma versão seja usada como a versão mais do aplicativo.
  • Regiões de destino para replicação
  • Contagem de réplicas por região

Baixar diretório

O local de download do pacote de aplicativos e os arquivos de configuração são:

  • Linux: /var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<appname>/<app version>
  • Windows: C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<appname>\<app version>

Os comandos install/update/remove devem ser gravados supondo que o pacote de aplicativos e o arquivo de configuração estão no diretório atual.

Nome do arquivo

Quando o arquivo de aplicativo é baixado para a VM, ele é renomeado como "MyVmApp" (sem extensão). Isso ocorre porque a VM não está ciente do nome ou da extensão original do pacote. Ele utiliza o único nome que tem, que é o próprio nome do aplicativo – "MyVmApp".

Aqui estão algumas alternativas para navegar por esse problema:

Você pode modificar o script para incluir um comando para renomear o arquivo antes da execução:

move .\\MyVmApp .\\MyApp.exe & MyApp.exe /S

Você também pode usar a propriedade packageFileName (e seu configFileName correspondente) para nos instruir sobre como renomear seu arquivo. Por exemplo, defini-lo como "MyApp.exe" fará com que o script de instalação só precise ser:

MyAppe.exe /S

Dica

Se o blob foi originalmente chamado de "myApp.exe" em vez de "myapp", o script acima teria funcionado sem definir a propriedade packageFileName.

Interpretador de comando

Os interpretadores de comando padrão são:

  • Linux: /bin/bash
  • Windows: cmd.exe

É possível usar um interpretador diferente, como Chocolatey ou PowerShell, desde que ele seja instalado no computador, chamando o executável e passando o comando para ele. Por exemplo, para que o comando seja executado no PowerShell Windows em vez de cmd, você pode passarpowershell.exe -Command '<powershell commmand>'

Como as atualizações são controladas

Ao atualizar uma versão do aplicativo em uma VM ou em Conjuntos de Dimensionamento de Máquinas Virtuais, o comando de atualização fornecido durante a implantação será usado. Se a versão atualizada não tiver um comando de atualização, a versão atual será removida e a nova versão será instalada.

Os comandos de atualização devem ser gravados com a expectativa de que ele possa estar atualizando de qualquer versão mais antiga do aplicativo de VM.

Dicas para criar aplicativos de VM no Linux

Aplicativos de terceiros para Linux podem ser empacotados de algumas maneiras. Vamos explorar como lidar com a criação de comandos de instalação para alguns dos mais comuns.

Arquivos .tar e .gz

Esses arquivos são compactados e podem ser extraídos para o local desejado. Verifique as instruções de instalação do pacote original para, caso eles precisem ser extraídos para um local específico. Se o arquivo. tar. gz contiver código-fonte, veja as instruções do pacote para saber como instalar a partir da origem.

Exemplo para instalar o comando para instalar golang o em um computador Linux:

sudo tar -C /usr/local -xzf go_linux

Exemplo de comando de remoção:

sudo rm -rf /usr/local/go

Criação de pacotes de aplicativos usando .deb, .rpm e outros pacotes específicos da plataforma para VMs com acesso restrito à Internet

É possível baixar pacotes individuais para gerenciadores de pacotes específicos da plataforma, mas eles geralmente não contêm todas as dependências. Para esses arquivos, você também deve incluir todas as dependências no pacote de aplicativos ou fazer com que o Gerenciador de pacotes do sistema Baixe as dependências por meio dos repositórios que estão disponíveis para a VM. Se você estiver trabalhando com uma VM com acesso restrito à Internet, você deve empacotar todas as dependências por conta própria.

Descobrir as dependências pode ser um pouco complicado. Há ferramentas de terceiros que podem mostrar toda a árvore de dependência.

No Ubuntu, você pode executar sudo apt show <package_name> | grep Depends para mostrar todos os pacotes que são instalados ao executar o comando sudo apt-get install <packge_name>. Em seguida, você pode usar essa saída para baixar todos os arquivos .deb para criar um arquivo morto que possa ser usado como o pacote de aplicativos.

  1. Por exemplo, para criar um pacote de aplicativos de VM para instalar o PowerShell para Ubuntu, primeiro execute os comandos a seguir para habilitar o repositório do qual o PowerShell pode ser baixado e também para identificar as dependências do pacote em uma nova VM do 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
  1. Verifique a saída da linha Depende, que lista os seguintes pacotes:
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.
  1. Baixe cada um desses arquivos usando sudo apt-get download <package_name> e crie um arquivo tar compactado com todos os arquivos.
  • 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
  1. Este arquivo tar será o arquivo do pacote de aplicativos.
  • O comando install, neste caso, é:
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
  • E o comando Remove é:
sudo apt remove powershell

Use sudo apt autoremove em vez de tentar remover explicitamente todas as dependências. Você pode ter instalado outros aplicativos com dependências sobrepostas e, nesse caso, um comando de remoção explícito falharia.

Caso você não queira resolver as dependências por conta própria, e apt for capaz de se conectar aos repositórios, você pode instalar um aplicativo com apenas um arquivo .deb e permitir que apt manipule as dependências.

Exemplo de comando de instalação:

dpkg -i <package_name> || apt --fix-broken install -y

Dicas para criar aplicativos de VM no Windows

A maioria dos aplicativos de terceiros no Windows está disponível como instaladores .exe ou .msi. Alguns também estão disponíveis como extrair e executar arquivos zip. Vamos examinar as práticas recomendadas para cada uma delas.

.exe instalador

Os executáveis do instalador normalmente iniciam uma interface do usuário e exigem que alguém selecione por meio da IU. Se o instalador oferecer suporte a um parâmetro de modo silencioso, ele deverá ser incluído na sua cadeia de caracteres de instalação.

Cmd.exe também espera que os arquivos executáveis tenham a extensão .exe, portanto, você precisa renomear o arquivo para ter a extensão .exe.

Se eu quero criar um pacote de aplicativo de VM para myApp.exe, que é fornecido como um executável, meu aplicativo de VM é chamado de "myApp", então escrevo o comando supondo que o pacote de aplicativos está no diretório atual:

"move .\\myApp .\\myApp.exe & myApp.exe /S -config myApp_config"

Se o arquivo executável do instalador não oferecer suporte a um parâmetro de desinstalação, às vezes, você pode procurar o registro em um computador de teste para saber onde o desinstalador está localizado.

No registro, a cadeia de caracteres de desinstalação é armazenada no Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString, portanto, eu usaria o conteúdo como meu comando de remoção:

'\"C:\\Program Files\\myApp\\uninstall\\helper.exe\" /S'

.msi instalador

Para a execução de linha de comando de instaladores .msi, os comandos para instalar ou remover um aplicativo devem usar o msiexec. Normalmente, o msiexec é executado como seu próprio processo separado e cmd não espera que ele seja concluído, o que pode levar a problemas ao instalar mais de um aplicativo de VM. O comando start pode ser usado com o msiexec para garantir que a instalação seja concluída antes do retorno do comando. Por exemplo:

start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log

Exemplo de comando de remoção:

start /wait %windir%\\system32\\msiexec.exe /x $appname /quiet /forcerestart /log ${appname}_uninstall.log

Normalmente, o comando start seria chamado dentro de um script em lotes. Se usado com o parâmetro /wait, o script de chamada será pausado até que o processo chamado seja encerrado. Após a conclusão, o script do lote verificará a variável errorlevel definida pelo comando start e sairá da seguinte maneira:

start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
if %errorlevel% neq 0 exit /b %errorlevel%
...

Arquivos compactados

Para arquivos .zip ou outros arquivos compactados, basta descompactar o conteúdo do pacote de aplicativos no destino desejado.

Exemplo de comando de instalação:

rename myapp myapp.zip && mkdir C:\myapp && powershell.exe -Command "Expand-Archive -path myapp.zip -destinationpath C:\myapp"

Exemplo de comando de remoção:

rmdir /S /Q C:\\myapp

Tratar a falha como uma falha de implantação

A extensão do aplicativo de VM sempre retorna um sucesso, independentemente de qualquer aplicativo de VM ter falhado durante a instalação/atualização/remoção. A extensão do aplicativo da VM só relata o status da extensão como falha quando há um problema com a extensão ou a infraestrutura subjacente. Esse comportamento é disparado pelo sinalizador "tratar a falha como uma falha de implantação", que é definido como $false por padrão e pode ser alterado para $true. O sinalizador de falha pode ser configurado no PowerShell ou na CLI.

Solucionar problemas de aplicativos de VM

Para saber se um determinado aplicativo de VM foi adicionado com êxito à instância de VM, verifique a mensagem da extensão de aplicativo de VM.

Para saber mais sobre como obter o status das extensões de VM, consulte Extensões e recursos de máquina virtual para Linux e Extensões e recursos de máquina virtual para Windows.

Para obter o status das extensões de VM, use Get-AzVM:

Get-AzVM -name <VM name> -ResourceGroupName <resource group name> -Status | convertto-json -Depth 10

Para obter o status das extensões de conjunto de dimensionamento, 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

Mensagens de erro

Mensagem Descrição
A Versão Atual do Aplicativo da VM {name} foi descontinuada em {date}. Você tentou implantar uma versão de aplicativo de VM que já foi preterida. Tente usar latest em vez de especificar uma versão específica.
A versão atual da aplicação VM {nome} oferece suporte ao sistema operacional OS {OS}, enquanto o sistema operacional atual do Osdisk é {OS}. Você tentou implantar um aplicativo do Linux para Windows instância do ou vice-versa.
O número máximo de aplicativos de VM (max = 5, Current = {Count}) foi excedido. Use menos aplicativos e repita a solicitação. Atualmente, damos suporte apenas a cinco aplicativos de VM por VM ou conjunto de dimensionamento.
Mais de um aplicativo de VM foi especificado com o mesmo packageReferenceId. O mesmo aplicativo foi especificado mais de uma vez.
Assinatura não autorizada a acessar esta imagem. A assinatura não tem acesso a esta versão do aplicativo.
A conta de armazenamento nos argumentos não existe. Não há aplicativos para esta assinatura.
A imagem de plataforma {image} não está disponível. Verifique se todos os campos no perfil de armazenamento estão corretos. Para obter mais detalhes sobre as informações do perfil de armazenamento, confira https://aka.ms/storageprofile. O aplicativo não existe.
A imagem da Galeria {image} não está disponível na região {region}. Contate o proprietário da imagem para replicar nessa região ou altere a região solicitada. A versão do aplicativo da galeria existe, mas não foi replicada para essa região.
A SAS não é válida para o URI de origem {uri}. Foi recebido um erro Forbidden do armazenamento ao tentar recuperar informações sobre a URL (mediaLink ou defaultConfigurationLink).
O blob referenciado pelo URI de origem {URI} não existe. O blob fornecido para as propriedades mediaLink ou defaultConfigurationLink não existe.
A URL da versão do aplicativo da galeria {url} não pode ser acessada devido ao seguinte erro: nome remoto não encontrado. Verifique se o blob existe e se ele está acessível publicamente ou se é uma URL SAS com privilégios de leitura. O caso mais provável é que um URI de SAS com privilégios de leitura não foi fornecido.
A URL da versão do aplicativo da Galeria {URL} não pode ser acessada devido ao seguinte erro: {error description}. Verifique se o blob existe e se ele está acessível publicamente ou se é uma URL SAS com privilégios de leitura. Houve um problema com o blob de armazenamento fornecido. A descrição do erro fornece mais informações.
A operação {operationName} não é permitida em {application}, pois ela está marcada para exclusão. Você só pode repetir a operação de Exclusão (ou aguardar a conclusão de uma em andamento). Tentativa de atualizar um aplicativo que está sendo excluído no momento.
O valor {Value} do parâmetro 'galleryApplicationVersion.properties.publishingProfile.replicaCount' está fora do intervalo. O valor deve estar entre 1 e 3 (ambos incluídos). Somente entre 1 e 3 réplicas são permitidas para versões do aplicativo de VM.
A alteração da propriedade "galleryApplicationVersion.properties.publishingProfile.manageActions.install" não é permitida. (ou Atualizar, excluir) Não é possível alterar nenhuma das ações de gerenciamento em uma VmApplication existente. Uma nova versão do VmApplication deve ser criada.
A alteração da propriedade "galleryApplicationVersion.properties.publishingProfile.settings.packageFileName" não é permitida. (ou Nome_arquivo_config) Não é possível alterar nenhuma das configurações, como o nome do arquivo de pacote ou o nome do arquivo de configuração. Uma nova versão do VmApplication deve ser criada.
O blob referenciado pelo URI de origem {uri} é muito grande: tamanho = {size}. O tamanho máximo de blob permitido é '1 GB'. O tamanho máximo de um blob referenciado por mediaLink ou defaultConfigurationLink atualmente é de 1 GB.
O blob referenciado pelo URI de origem {URI} está vazio. Um blob vazio foi referenciado.
Não há suporte para o tipo de blob {type} para a operação {operation}. Há suporte apenas para blobs de páginas e blobs de blocos. O VmApplications dá suporte apenas a blobs de páginas e blobs de blocos.
A SAS não é válida para o URI de origem {uri}. O URI de SAS fornecido para mediaLink ou defaultConfigurationLink não é um URI de SAS válido.
Não é possível especificar {region} nas regiões de destino porque a assinatura não tem o recurso necessário {featureName}. Registre sua assinatura com o recurso necessário ou remova a região da lista de regiões de destino. Para usar VmApplications em determinadas regiões restritas, é necessário ter o sinalizador de recurso registrado para essa assinatura.
As regiões do perfil de publicação da versão de imagem da galeria {regions} devem conter o local da versão de imagem {location}. A lista de regiões para replicação deve conter o local em que a versão do aplicativo está.
Regiões duplicadas não são permitidas nas regiões de publicação de destino. As regiões de publicação podem não ter duplicatas.
Atualmente, os recursos de versão do aplicativo da galeria não são compatíveis com criptografia. Não há suporte para a propriedade de criptografia para regiões de destino para aplicativos de VM
O nome da entidade não corresponde ao nome na URL da solicitação. A versão do aplicativo da galeria especificada na URL de solicitação não corresponde à especificada no corpo da solicitação.
O nome da versão do aplicativo da galeria é inválido. O nome da versão do aplicativo deve seguir Major(int32). Minor(int32). Formato patch(int32), em que int está entre 0 e 2.147.483.647 (ambos inclusos). por exemplo, 1.0.0, 2018.12.1, etc. A versão do aplicativo da galeria deve seguir o formato especificado.

Próximas etapas