Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os Aplicativos VM são um tipo de recurso na Galeria de Computação do Azure que fornece uma abordagem moderna e flexível para gerenciar e implantar aplicativos em suas máquinas virtuais e conjuntos de escala. Ao dissociar a instalação do aplicativo das imagens de VM base, você pode simplificar as atualizações, reduzir a sobrecarga de manutenção de imagens e acelerar os ciclos de implantação. Essa abordagem elimina a necessidade de reconstruir e republicar imagens de VM para cada alteração de aplicativo, permitindo iteração mais rápida e maior agilidade operacional. Os aplicativos de VM são mais adequados para implantar IA, alta escala, baixa latência, microsserviços, cargas de trabalho seguras e compatíveis em VMs do Azure.
| 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 tem de ser exclusivo por subscrição. Por exemplo, você pode ter uma galeria para armazenar todas as imagens do sistema operacional e outra galeria para armazenar todos os aplicativos VM. |
| Aplicativo VM | A definição do seu aplicativo VM. É um recurso lógico que armazena os metadados comuns para todas as versões sob ele. Por exemplo, você pode ter uma definição de aplicativo para o Apache Tomcat e ter várias versões dentro dela. |
| Versão do aplicativo VM | O recurso implantável, que contém o pacote do aplicativo e as configurações específicas da versão. 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 VM deve ser replicada para uma região antes de poder ser implantada em uma VM nessa região. |
| Conta de Armazenamento | Os pacotes de aplicativos são carregados primeiro na sua conta de armazenamento. Em seguida, a Galeria de Computação do Azure baixa o pacote do aplicativo dessa conta de armazenamento usando URLs SAS e o armazena na versão do Aplicativo VM. A Galeria de Computação do Azure também replica este pacote entre regiões e réplicas regionais de acordo com a definição de versão do Aplicativo VM. O pacote de aplicativo na conta de armazenamento pode ser excluído após a versão do aplicativo VM ser criada na Galeria de Computação do Azure. |
Principais Vantagens:
-
Gerenciamento centralizado e flexível de aplicativos:
- Empacote qualquer coisa uma vez, implante em qualquer lugar: empacote aplicativos (windows / linux), scripts ou arquivos como aplicativos VM. Em seguida, implante-o em VMs do Azure ou Conjuntos de Dimensionamento de Máquina Virtual e gerencie-os centralmente na Galeria de Computação do Azure. Os aplicativos ou arquivos podem estar em .zip, .msi, .exe, .tar.gz, .deb, .rpm, .sh ou qualquer outro formato.
- Controle de versão: implante a versão mais recente ou uma versão específica mantendo várias versões de cada aplicativo.
-
Compartilhamento contínuo e controle de acesso
- Tenant-Wide Compartilhamento: compartilhe aplicativos dentro de equipes ou em toda a sua organização (locatário).
- RBAC integrado: controle o acesso à publicação e à implantação usando o RBAC (Controle de Acesso Role-Based do Azure).
-
Implantações confiáveis e personalizáveis
- Controle de aplicativo individual: instale, atualize ou exclua aplicativos de forma independente, sem necessidade de reconstruir imagens de VM.
- Operações personalizáveis: personalize as operações de instalação, atualização e exclusão de aplicativos, incluindo o tratamento de reinicialização.
- Built-In Tratamento de falhas: garanta implantações resilientes conectando a falha do aplicativo VM à falha da VM.
-
Distribuição escalável e Low-Latency
- Replicação global e Intra-Region: replique automaticamente aplicativos entre regiões e dentro delas para reduzir a latência e melhorar a resiliência — sem a necessidade de AzCopy ou transferências manuais.
- Otimizado para Cenários High-Scale: obtenha baixa latência de criação mesmo durante implementações em grande escala.
-
Seguro e em conformidade desde a conceção
- Imposição Orientada por Políticas: use Política do Azure para assegurar a presença e a configuração da aplicação em toda a sua frota.
- Implantações seguras: evite downloads baseados na Internet e configurações complexas de links privados, que não são ideais para ambientes bloqueados ou seguros.
-
Suporte amplo a plataformas
- VMs e conjuntos de escala: implante em VMs individuais, conjuntos de escala flexível ou conjuntos de escala uniforme com suporte total.
- Suporte a Blobs de Bloco: trate eficientemente pacotes de aplicativos grandes (até 2 GB) usando Blobs de Bloco do Azure para carregamentos fragmentados e transmissão em segundo plano.
Criar recurso de versão de Aplicativos VM & Aplicativos VM
O aplicativo VM é armazenado na Galeria de Computação do Azure. O recurso de aplicativo VM define o seguinte sobre seu aplicativo VM:
| Propriedade | Descrição | Limitações |
|---|---|---|
| nome | Nome do pedido | Comprimento máximo de 117 caracteres. Os caracteres permitidos são letras maiúsculas ou minúsculas, dígitos, hífen(-), ponto (.), sublinhado (_). Nomes que não podem terminar com ponto(.). |
| supportedOSType | Definir o tipo de SO suportado | "Linux" ou "Windows" |
| Fim da VidaData | Uma data futura de fim de vida para o aplicativo. A data é apenas para referência e não é imposta. | |
| descrição | Opcional. Uma descrição do aplicativo VM | |
| EULA | Opcional. Referência ao Contrato de Licença de Usuário Final (EULA) | |
| privacidadeDeclaraçãoUri | Opcional. Referência à declaração de privacidade da aplicação. | |
| releaseNoteUri | Opcional. Referência às notas de versão do aplicativo. |
As versões do aplicativo VM são os recursos implantáveis dentro do recurso do aplicativo VM. As versões são definidas com as seguintes propriedades:
| Propriedade | Descrição | Limitações |
|---|---|---|
| localização | Local de origem da versão do aplicativo VM. | Região do Azure válida |
| fonte/mediaLink | Link para o arquivo do pacote do aplicativo em uma conta de armazenamento | URL de armazenamento válido e existente |
| source/defaultConfigurationLink | Opcional. Um link para o arquivo de configuração do aplicativo VM. Ele pode ser substituído no momento da implantação. | URL de armazenamento válido e existente |
| manageActions/instalar | Instale o script como string para instalar corretamente o aplicativo | Comando válido para o SO fornecido em formato de cadeia de caracteres. |
| manageActions/remover | Remover script como string para remover corretamente o aplicativo | Comando válido para o SO fornecido em formato string |
| manageActions/atualização | Opcional. Atualize o script como string para atualizar corretamente o aplicativo VM para uma versão mais recente. | Comando válido para o SO fornecido em formato string |
| targetRegions/nome | Nome das regiões de destino para as quais replicar. Melhora a resiliência a falhas de região e cria latência. | Região válida do Azure |
| targetRegions/regionalReplicaCount | Opcional. O número de réplicas a serem criadas na região. Melhora o manuseio de carga e cria latência. O padrão é 1. | Inteiro entre 1 e 3 inclusive |
| replicaCount | Opcional. Define o número de réplicas em cada região. Entra em vigor se regionalReplicaCount não estiver definido. Melhora a resiliência a falhas de região ou cluster e cria latência durante alta escala. | Inteiro entre 1 e 3 inclusive. |
| Fim da VidaData | Opcional. Uma data de fim de vida futura para a versão do aplicativo. Esta propriedade é apenas para referência do cliente e não é imposta. | Data futura válida |
| excludeFromLatest | Exclua a versão de ser usada como a versão mais recente do aplicativo quando a palavra-chave 'mais recente' é usada em applicationProfile. | |
| storageAccountType | Opcional. Tipo de conta de armazenamento a ser usada em cada região para armazenar o pacote de aplicativos. O padrão é Standard_LRS. | Esta propriedade não é atualizável. |
| safetyProfile/allowDeletionOfReplicatedLocations | Opcional. Indica se a remoção desta Versão da Imagem da Galeria das regiões replicadas é permitida ou não. | |
| configurações/packageFileName | Nome do arquivo do pacote a ser usado quando o pacote for baixado para a VM. | Isso é limitado a 4.096 caracteres. |
| configurações/configFileName | Nome do arquivo de configuração a ser usado quando a configuração for baixada para a VM. | Isso é limitado a 4.096 caracteres. |
| configurações/scriptBehaviorAfterReboot | Opcional. A ação a ser tomada para instalar, atualizar ou remover o aplicativo de galeria após a reinicialização da VM. |
{
"$schema": "https://schema.management.azure.com/schemas/2020-06-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"galleryName": {
"type": "string"
},
"applicationName": {
"type": "string"
},
"versionName": {
"type": "string",
"metadata": {
"description": "Must follow the format: major.minor.patch (Example: 1.0.0)"
}
},
"location": {
"type": "string",
"defaultValue": "West US"
},
"supportedOSType": {
"type": "string",
"allowedValues": ["Windows", "Linux"]
},
"endOfLifeDate": {
"type": "string",
"metadata": {
"description": "Optional. This property is for information only and doesn't block app deployment."
}
},
"description": {
"type": "string",
"defaultValue": "Description of the application"
},
"eula": {
"type": "string",
"defaultValue": ""
},
"privacyStatementUri": {
"type": "string",
"defaultValue": ""
},
"releaseNoteUri": {
"type": "string",
"defaultValue": ""
},
"mediaLink": {
"type": "string"
},
"configLink": {
"type": "string"
},
"appConfigFileName": {
"type": "string"
},
"appPackageFileName": {
"type": "string"
},
"replicaRegion1": {
"type": "string",
"defaultValue": "East US"
},
"replicaRegion2": {
"type": "string",
"defaultValue": "South Central US"
},
"installScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to install the application. Example: echo 'Installing application...'"
}
},
"updateScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to update the application. Example: echo 'Updating application...'"
}
},
"removeScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to delete the application. Example: echo 'Deleting application...'"
}
},
"storageAccountType": {
"type": "string",
"allowedValues": ["PremiumV2_LRS", "Premium_LRS", "Standard_LRS", "Standard_ZRS"],
"defaultValue": "Standard_LRS"
}
},
"resources": [
{
"type": "Microsoft.Compute/galleries",
"apiVersion": "2024-03-03",
"name": "[parameters('galleryName')]",
"location": "[parameters('location')]",
"properties": {
"identifier": {}
}
},
{
"type": "Microsoft.Compute/galleries/applications",
"apiVersion": "2024-03-03",
"name": "[format('{0}/{1}', parameters('galleryName'), parameters('applicationName'))]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries', parameters('galleryName'))]"
],
"properties": {
"supportedOSType": "[parameters('supportedOSType')]",
"endOfLifeDate": "[parameters('endOfLifeDate')]",
"description": "[parameters('description')]",
"eula": "[if(equals(parameters('eula'), ''), json('null'), parameters('eula'))]",
"privacyStatementUri": "[if(equals(parameters('privacyStatementUri'), ''), json('null'), parameters('privacyStatementUri'))]",
"releaseNoteUri": "[if(equals(parameters('releaseNoteUri'), ''), json('null'), parameters('releaseNoteUri'))]"
}
},
{
"type": "Microsoft.Compute/galleries/applications/versions",
"apiVersion": "2024-03-03",
"name": "[format('{0}/{1}/{2}', parameters('galleryName'), parameters('applicationName'), parameters('versionName'))]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries/applications', parameters('galleryName'), parameters('applicationName'))]"
],
"properties": {
"publishingProfile": {
"source": {
"mediaLink": "[parameters('mediaLink')]",
"defaultConfigurationLink": "[parameters('configLink')]"
},
"manageActions": {
"install": "[parameters('installScript')]",
"remove": "[parameters('removeScript')]",
"update": "[parameters('updateScript')]"
},
"settings": {
"scriptBehaviorAfterReboot": "Rerun",
"configFileName": "[parameters('appConfigFileName')]",
"packageFileName": "[parameters('appPackageFileName')]"
},
"targetRegions": [
{
"name": "[parameters('location')]",
"regionalReplicaCount": 3,
"storageAccountType": "[parameters('storageAccountType')]"
},
{
"name": "[parameters('replicaRegion1')]",
"regionalReplicaCount": 1,
"storageAccountType": "[parameters('storageAccountType')]"
},
{
"name": "[parameters('replicaRegion2')]"
},
],
"excludeFromLatest": false,
"replicaCount": 2,
"storageAccountType": "[parameters('storageAccountType')]"
},
"safetyProfile": {
"allowDeletionOfReplicatedLocations": true
},
"endOfLifeDate": "[parameters('endOfLifeDate')]"
}
}
]
}
Implantar aplicativos de VM do Azure
Depois que a versão do Aplicativo VM for publicada na Galeria de Computação do Azure, você poderá implantar a versão nas Máquinas Virtuais (VM) do Azure e nos Conjuntos de Dimensionamento de Máquinas Virtuais do Azure.
A applicationProfile VM do Azure e os Conjuntos de Escala de Máquina Virtual definem o seguinte:
| Propriedade | Descrição | Limitações |
|---|---|---|
| galeriaAplicações | Galeria Aplicativos a serem implantados | |
| IdDeReferenciaDoPacote | Referência à versão do aplicativo a ser implantada | Referência de versão válida do aplicativo |
| Referência de configuração | Opcional. A url completa de um blob de armazenamento que contém a configuração para esta implantação. Isso substitui qualquer valor fornecido para defaultConfiguration anteriormente. | Referência de blob de armazenamento válida |
| order | Opcional. Ordem na qual implantar aplicativos | Inteiro válido |
| tratarFailureAsDeploymentFailure | Opcional. Marcar falha de aplicativo como falha de implantação de VM para tratamento de falhas | Verdadeiro ou Falso |
O campo de ordem pode ser usado para especificar dependências entre aplicativos. As regras de ordem são as seguintes:
| Case | Instalar o Significado | Significado do fracasso |
|---|---|---|
| Nenhuma ordem especificada | As aplicações não ordenadas são instaladas após as aplicações encomendadas. Não há garantia de ordem de instalação entre os aplicativos não solicitados. | Falhas de instalação de outros aplicativos, sejam eles ordenados ou não ordenados, não afetam a instalação de aplicativos não ordenados. |
| Valores de ordem duplicados | O aplicativo é instalado em qualquer ordem em comparação com outros aplicativos com a mesma ordem. Todos os aplicativos da mesma ordem são instalados depois daqueles com ordens mais baixas e antes daqueles com ordens mais altas. | Se um aplicativo anterior com uma ordem inferior não foi instalado, nenhum aplicativo com essa ordem será instalado. Se algum aplicativo com esta ordem não for instalado, nenhum aplicativo com uma ordem superior será instalado. |
| Aumento das encomendas | O aplicativo será instalado depois daqueles com pedidos mais baixos e antes daqueles com pedidos mais altos. | Se um aplicativo anterior com uma ordem inferior não foi instalado, esse aplicativo não será instalado. Se este aplicativo não for instalado, nenhum aplicativo com uma ordem superior será instalado. |
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmssName": {
"type": "string"
},
"location": {
"type": "string"
},
"subscriptionId": {
"type": "string"
},
"resourceGroupName": {
"type": "string"
},
"galleryName": {
"type": "string"
},
"applicationName1": {
"type": "string"
},
"applicationVersion1": {
"type": "string",
"defaultValue": "latest"
},
"configurationReference1": {
"type": "string",
"metadata": {
"description": "Optional path to configuration file from Storage Account. Overrides default configuration file."
}
},
"applicationName2": {
"type": "string"
},
"applicationVersion2": {
"type": "string",
"defaultValue": "latest"
}
},
"variables": {
"packageReferenceId1": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName1'), parameters('applicationVersion1'))]",
"packageReferenceId2": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName2'), parameters('applicationVersion2'))]"
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"apiVersion": "2024-03-03",
"name": "[parameters('vmssName')]",
"location": "[parameters('location')]",
"properties": {
"virtualMachineProfile": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "[variables('packageReferenceId1')]",
"configurationReference": "[parameters('configurationReference1')]",
"treatFailureAsDeploymentFailure": true
},
{
"order": 2,
"packageReferenceId": "[variables('packageReferenceId2')]",
"treatFailureAsDeploymentFailure": false
}
]
}
}
}
}
]
}
Custo
Não há cobrança extra pelo uso de Pacotes de Aplicativos de VM, mas você será cobrado pelos seguintes recursos:
- Custos de armazenamento de armazenamento de cada pacote e quaisquer réplicas.
- A saída de rede cobra pela replicação da primeira versão da 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á cobranças extras.
Para obter mais informações sobre a saída de rede, consulte Preços de largura de banda.
Detalhes técnicos
Considerações e limites atuais
Até 10 réplicas por região: quando você cria uma versão do Aplicativo VM, o número máximo de réplicas por região é 10 para blob de página e blob de bloco.
Até 300 versões por região: ao criar uma versão de aplicativo VM, você pode ter até 300 versões de aplicativo por região.
Armazenamento com acesso público e URI SAS com privilégio de leitura: A conta de armazenamento precisa ter acesso em nível público e usar um URI SAS com privilégio de leitura, pois outros níveis de restrição falham nas implantações. Os tokens SAS podem ser contornados publicando o artefato na conta de armazenamento e permitindo acesso anónimo.
Repetição manual para 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.
Até 25 aplicativos por VM: um máximo de 25 aplicativos podem ser implantados em uma única máquina virtual.
Tamanho do aplicativo de 2 GB: O tamanho máximo do arquivo de uma versão
mediaLinkdo aplicativo é de 2 GB. O tamanho máximo do ficheirodefaultConfigurationLinké de 1 GB.Requer um Agente de VM: O agente de VM deve existir na VM e ser capaz de receber estados de meta.
Versão única do aplicativo por VM: apenas uma versão de um determinado aplicativo pode ser implantada em uma VM.
Operações de movimentação atualmente não suportadas: Atualmente, não há suporte para mover VMs com aplicativos VM associados entre grupos de recursos.
Nota
Para a Galeria de Computação do Azure e Aplicativos VM, o SAS de Armazenamento pode ser excluído após a replicação. No entanto, qualquer operação de atualização subsequente requer uma SAS válida.
Diretório de download dentro da VM
O local de download do pacote do aplicativo e os arquivos de configuração são:
- Linux:
/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<application name>/<application version> - Windows:
C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<application name>\<application version>
Os comandos install/update/remove devem ser escritos assumindo que o pacote do aplicativo e o arquivo de configuração estejam no diretório atual.
Nomeação de ficheiros
Quando o arquivo do aplicativo é baixado para a VM, o arquivo é renomeado como "MyVmApp" e não tem nenhuma extensão de arquivo (Por exemplo, .exe, .msi). A VM não tem conhecimento do nome original e da extensão do arquivo.
Aqui estão algumas alternativas para navegar por esse problema:
Você pode modificar seu 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 packageFileName propriedade (e a correspondente configFileName) para nos instruir sobre o que renomear seu arquivo. Por exemplo, defini-lo como "MyApp.exe" torna o script de instalação da seguinte forma.
MyAppe.exe /S
Gorjeta
Se o blob for originalmente nomeado como 'myApp.exe' em vez de 'myapp', o script funcionará sem definir a packageFileName propriedade.
Interpretador de comandos
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 esteja instalado na máquina, chamando o executável e passando o comando para ele. Por exemplo, para que seu comando seja executado no PowerShell no Windows em vez de cmd, você pode passar powershell.exe -Command '<powershell commmand>'
Como as atualizações são tratadas
Quando você atualiza uma versão do aplicativo em uma VM ou Conjuntos de Escala de Máquina Virtual, o comando update fornecido durante a implantação é usado. Se a versão atualizada não tiver um comando update, a versão atual será removida e a nova versão será instalada.
Os comandos de atualização devem ser escritos com a expectativa de que possam ser atualizados a partir de qualquer versão mais antiga do Aplicativo VM.
Tratar falha como falha de implantação
A extensão do Aplicativo VM sempre retorna um êxito , independentemente de qualquer aplicativo VM ter falhado ao ser instalado/atualizado/removido. A extensão Aplicativo VM só relata o status da extensão como falha quando há um problema com a extensão ou a infraestrutura subjacente. Esse comportamento é acionado pelo sinalizador "tratar falha como falha de implantação", que é definido como $false padrão e pode ser alterado para $true. O sinalizador de falha pode ser configurado no PowerShell ou na CLI.
Empacotar e instalar aplicativos VM no Linux
Para criar um aplicativo VM, você precisa de pacotes de aplicativos e scripts para instalar, atualizar e excluir corretamente o aplicativo.
Aplicativos de terceiros para Linux podem ser empacotados de algumas maneiras. Vamos explorar como lidar com a criação dos comandos de instalação para alguns dos mais comuns.
.tar e .gz arquivos
Esses arquivos são arquivos compactados e podem ser extraídos para um local desejado. Verifique as instruções de instalação do pacote original, caso precisem ser extraídas para um local específico. Se .tar.gz arquivo contiver código-fonte, consulte as instruções para o pacote sobre como instalar a partir do código-fonte.
Exemplo para instalar o comando para instalar golang em uma máquina Linux:
sudo tar -C /usr/local -xzf go_linux
Exemplo de comando remove:
sudo rm -rf /usr/local/go
Criação de pacotes de aplicativos usando .deb, .rpme outros pacotes específicos de plataforma para VMs com acesso restrito à Internet
Você pode 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 do aplicativo ou fazer com que o gerenciador de pacotes do sistema baixe as dependências por meio dos repositórios disponíveis para a VM. Se você estiver trabalhando com uma VM com acesso restrito à Internet, deverá empacotar todas as dependências por conta própria.
Descobrir as dependências pode ser um pouco complicado. Existem 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 estão instalados ao executar o sudo apt-get install <packge_name> comando. Em seguida, você pode usar essa saída para baixar todos os .deb arquivos para criar um arquivo que pode ser usado como o pacote do aplicativo.
Para criar um pacote de aplicativo VM para instalar o PowerShell no Ubuntu, execute as seguintes etapas:
- Execute os seguintes comandos para permitir que o repositório baixe o PowerShell e identifique 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
- 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.
- Baixe cada um desses arquivos usando
sudo apt-get download <package_name>e crie um arquivo compactado tar 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
- Este arquivo tar é o arquivo do pacote do aplicativo.
- 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 explicitamente remover todas as dependências. Você pode ter instalado outros aplicativos com dependências sobrepostas e, nesse caso, um comando remove explícito falharia.
Caso você não queira resolver as dependências sozinho e apt seja capaz de se conectar aos repositórios, você pode instalar um aplicativo com apenas um .deb arquivo e deixar apt lidar com as dependências.
Exemplo de comando de instalação:
dpkg -i <package_name> || apt --fix-broken install -y
Criando aplicativos VM no Windows
A maioria dos aplicativos de terceiros no Windows estão disponíveis como instaladores .exe ou .msi. Alguns também estão disponíveis como extrair e executar arquivos zip. Vejamos as melhores práticas para cada um deles.
.exe instalador
Os executáveis do instalador normalmente iniciam uma interface do usuário (UI) e exigem que alguém selecione através da interface do usuário. Se o instalador suportar um parâmetro de modo silencioso, ele deve ser incluído na cadeia de caracteres de instalação.
Cmd.exe também espera que os arquivos executáveis tenham a extensão .exe, então você precisa renomear o arquivo para ter a .exe extensão.
Se eu quiser criar um pacote de aplicativo VM para myApp.exe, que é fornecido como um executável, meu aplicativo VM é chamado de 'myApp', então escrevo o comando assumindo que o pacote de aplicativo está no diretório atual:
"move .\\myApp .\\myApp.exe & myApp.exe /S -config myApp_config"
Se o arquivo executável do instalador não suportar um parâmetro de desinstalação, às vezes você pode procurar o registro em uma máquina de teste para saber onde o desinstalador está localizado.
No registro, a cadeia de caracteres de desinstalação é armazenada para Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString que eu use o conteúdo como meu comando remover:
'\"C:\\Program Files\\myApp\\uninstall\\helper.exe\" /S'
.msi instalador
Para a execução pela linha de comando dos .msi instaladores, os comandos para instalar ou remover um aplicativo devem usar msiexec. Normalmente, 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 VM. O start comando pode ser usado para msiexec garantir que a instalação seja concluída antes que o comando retorne. Por exemplo:
start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
Exemplo de comando remove:
start /wait %windir%\\system32\\msiexec.exe /x myapp /quiet /forcerestart /log myapp_uninstall.log
Normalmente, o start comando seria chamado dentro de um script em lote. Se usado com o /wait parâmetro, o script de chamada é pausado até que o processo chamado seja encerrado. Uma vez concluído, o script em lote verificaria a errorlevel variável definida pelo start comando e sairia 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 .zip ou outros arquivos compactados, renomeie e descompacte o conteúdo do pacote do aplicativo para o 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 remove:
rmdir /S /Q C:\\myapp
Solução de problemas de aplicativos VM
Para saber se um determinado Aplicativo VM foi adicionado com êxito à instância VM, verifique a mensagem da extensão Aplicativo 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 de máquina virtual e recursos 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 do conjunto de escala, 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 |
|---|---|
| Versão atual do aplicativo VM {name} foi preterida em {date}. | Você tentou implantar uma versão do aplicativo VM que já foi preterida. Tente usar latest em vez de especificar uma versão específica. |
| A versão atual do aplicativo VM {name} suporta OS {OS}, enquanto o sistema operacional atual do OSDisk é {OS}. | Você tentou implantar um aplicativo Linux na instância do Windows ou vice-versa. |
| O número máximo de aplicativos VM (max=5, current={count}) foi excedido. Use menos aplicativos e tente novamente a solicitação. | Atualmente, suportamos apenas cinco aplicativos VM por VM ou conjunto de escala. |
| Mais de um aplicativo VM foi especificado com o mesmo packageReferenceId. | O mesmo pedido foi especificado mais de uma vez. |
| Subscrição não autorizada a aceder a esta imagem. | A subscrição não tem acesso a esta versão da aplicação. |
| A conta de armazenamento nos argumentos não existe. | Não existem aplicações para esta subscrição. |
| A imagem da plataforma {image} não está disponível. Verifique se todos os campos no perfil de armazenamento estão corretos. Para obter mais informações sobre o perfil de armazenamento, consulte https://aka.ms/storageprofile. | O aplicativo não existe. |
| A imagem da galeria {image} não está disponível na região {region}. Entre em contato com o proprietário da imagem para replicar para essa região ou alterar a região solicitada. | A versão do aplicativo de galeria existe, mas não foi replicada para essa região. |
| O SAS não é válido para uri de origem {uri}. | Um Forbidden erro foi recebido 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 versão do aplicativo galeria url {url} não pode ser acessada devido ao seguinte erro: nome remoto não encontrado. Certifique-se de que o blob existe e que é acessível publicamente ou é um URL SAS com privilégios de leitura. | O caso mais provável é que um uri SAS com privilégios de leitura não foi fornecido. |
| A url da versão do aplicativo galeria {url} não pode ser acessada devido ao seguinte erro: {error description}. Certifique-se de que o blob existe e que é acessível publicamente ou é um 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 está marcada para exclusão. Você só pode tentar novamente a operação de exclusão (ou aguardar a conclusão de uma operação em andamento). | Tente 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 um e três, inclusive. | Somente entre uma e três réplicas são permitidas para versões de aplicativos VM. |
| Não é permitido alterar a propriedade 'galleryApplicationVersion.properties.publishingProfile.manageActions.install'. (Ou atualizar, excluir) | Não é possível alterar nenhuma das ações de gerenciamento em um VmApplication existente. Uma nova versão do VmApplication deve ser criada. |
| Não é permitido alterar a propriedade ' galleryApplicationVersion.properties.publishingProfile.settings.packageFileName '. (Ou configFileName) | Não é possível alterar nenhuma das configurações, como o nome do arquivo do 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: size = {size}. O tamanho máximo de blob permitido é '1 GB'. | O tamanho máximo de um blob referido por mediaLink ou defaultConfigurationLink é atualmente de 1 GB. |
| O blob referenciado pelo uri de origem {uri} está vazio. | Um blob vazio foi referenciado. |
| O tipo de blob {type} não é suportado para a operação {operation}. Apenas blobs de página e blobs de bloco são suportados. | VmApplications suporta apenas blobs de página e blobs de bloco. |
| O SAS não é válido para uri de origem {uri}. | O uri SAS fornecido para mediaLink ou defaultConfigurationLink não é um uri SAS válido. |
| Não é possível especificar {region} nas regiões de destino porque a assinatura está faltando o recurso necessário {featureName}. Registe a sua subscrição com a funcionalidade necessária 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 da imagem da galeria {regions} devem conter o local da versão da imagem {location}. | A lista de regiões para replicação deve conter o local onde está a versão do aplicativo. |
| Regiões duplicadas não são permitidas em regiões de publicação de destino. | As regiões de publicação não podem ter duplicatas. |
| Atualmente, os recursos da versão do aplicativo Gallery não oferecem suporte à criptografia. | A propriedade de criptografia para regiões de destino não é suportada para aplicativos VM |
| O nome da entidade não corresponde ao nome no URL da solicitação. | A versão do aplicativo de galeria especificada na URL da solicitação não corresponde à especificada no corpo da solicitação. |
O nome da versão do aplicativo de galeria é inválido. O nome da versão do aplicativo deve seguir Major(int32). Menor(int32). Patch(int32), onde int está entre 0 e 2.147.483.647 (inclusive). Por exemplo, 1.0.0, 2018.12.1 etc. |
A versão do aplicativo galeria deve seguir o formato especificado. |
Próximos passos
- Saiba como criar e implantar pacotes de aplicativos VM.
- Saiba como gerenciar e excluir Aplicativos de VM do Azure.