Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplicativos de 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 dimensionamento. Ao desacoplar a instalação do aplicativo de suas imagens de VM base, você pode simplificar as atualizações, reduzir a sobrecarga de manutenção de imagem e acelerar os ciclos de implantação. Essa abordagem elimina a necessidade de recriar 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 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 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, que contém o pacote de aplicativos 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 ser implantada em uma VM nessa região. |
Conta de armazenamento | Os pacotes de aplicativos são carregados pela primeira vez em sua conta de armazenamento. Em seguida, a Galeria de Computação do Azure baixa o pacote de aplicativos dessa conta de armazenamento usando URLs SAS e o armazena na versão do Aplicativo de VM. A Galeria de Computação do Azure também replica esse pacote entre regiões e réplicas regionais de acordo com a definição de versão do aplicativo de VM. O pacote de aplicativos na conta de armazenamento pode ser excluído após a criação da versão do aplicativo VM na Galeria de Computação do Azure. |
Principais benefícios:
-
Gerenciamento centralizado e flexível de aplicativos:
- Empacotar qualquer coisa uma vez, implantar em qualquer lugar: empacotar aplicativos (windows/linux), scripts ou arquivos como aplicativos de VM. Em seguida, implante-o em VMs do Azure ou conjuntos de dimensionamento de máquinas virtuais e gerencie-os centralmente na Galeria de Computação do Azure. 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 específica mantendo várias versões de cada aplicativo.
-
Compartilhamento contínuo e controle de acesso
- Tenant-Wide Compartilhamento: compartilhar aplicativos em equipes ou em toda a sua organização (locatário).
- RBAC integrado: controlar 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: instalar, atualizar ou excluir aplicativos de forma independente, sem necessidade de recriar imagens de VM.
- Operações personalizáveis: personalize operações de instalação, atualização e exclusão para aplicativos, incluindo tratamento de reinicialização.
- Built-In Tratamento de Falhas: garanta implantações resilientes conectando falha do aplicativo VM à falha da VM.
-
Distribuição escalonável e Low-Latency
- Replicação global e Intra-Region: replique automaticamente aplicativos entre regiões e regiões para reduzir a latência e melhorar a resiliência, sem necessidade de AzCopy ou transferências manuais.
- Otimizado para cenários de High-Scale: obter baixa latência de criação mesmo durante implantações em grande escala.
-
Seguro e compatível por design
- Imposição orientada por políticas: use o Azure Policy para impor a presença e a configuração do aplicativo em toda a sua frota.
- Implantações seguras: evite downloads baseados na Internet e configurações complexas de link privado, que não são ideais para ambientes bloqueados ou seguros.
-
Suporte amplo à plataforma
- VMs e Conjuntos de Dimensionamento: implantar em VMs individuais, conjuntos de dimensionamento flexíveis ou conjuntos de dimensionamento uniformes com suporte total.
- Suporte ao Blob de Blocos: manipule com eficiência pacotes de aplicativos grandes (até 2 GB) usando Blobs de Blocos do Azure para uploads em partes e streaming em segundo plano.
Criar recurso de versão de Aplicativos de VM > VM
O aplicativo de VM é armazenado na Galeria de Computação do Azure. O recurso de aplicativo de VM define o seguinte sobre seu aplicativo de VM:
Propriedade | Descrição | Limitações |
---|---|---|
nome | Nome do aplicativo | Comprimento máximo de 117 caracteres. Os caracteres permitidos são letras maiúsculas ou minúsculas, dígitos, hifen(-), ponto (.), sublinhado (_). Nomes não permitidos para terminar com period(.). |
supportedOSType | Definir o tipo de sistema operacional com suporte | "Linux" ou "Windows" |
endOfLifeDate | Uma data de fim de vida futura para o aplicativo. A data é somente para referência e não é imposta. | |
descrição | Optional. Uma descrição da aplicação VM | |
Eula | Optional. Referência ao EULA (Contrato de Licença de Usuário Final) | |
privacyStatementUri | Optional. Referência à política de privacidade do aplicativo. | |
releaseNoteUri | Optional. Referência às notas de versão do aplicativo. |
As versões do aplicativo VM são os recursos implantáveis dentro do recurso aplicativo de VM. As versões são definidas com as seguintes propriedades:
Propriedade | Descrição | Limitações |
---|---|---|
local | Local de origem para a versão do aplicativo de VM. | Região válida do Azure |
source/mediaLink | Link para o arquivo de pacote de aplicativos em uma conta de armazenamento | URL de armazenamento válida e existente |
source/defaultConfigurationLink | Optional. Um link para o arquivo de configuração do aplicativo de VM. Ele pode ser substituído no momento da implantação. | URL de armazenamento válida e existente |
manageActions/install | Instalar o script como cadeia de caracteres para instalar corretamente o aplicativo | Comando válido para o sistema operacional especificado no formato de cadeia de caracteres. |
manageActions/remove | Remover o script como cadeia de caracteres para remover corretamente o aplicativo | Comando válido para o sistema operacional especificado no formato de cadeia de caracteres |
manageActions/update | Optional. Atualize o script como cadeia de caracteres para atualizar corretamente o aplicativo de VM para uma versão mais recente. | Comando válido para o sistema operacional especificado no formato de cadeia de caracteres |
targetRegions/name | Nome das regiões de destino para as quais replicar. Melhora a resiliência à falha de região e cria latência. | Região válida do Azure |
targetRegions/regionalReplicaCount | Optional. O número de réplicas a serem criadas na região. Melhora o tratamento de carga e cria latência. O padrão é 1. | Inteiro entre 1 e 3 inclusive |
replicaCount | Optional. Define o número de réplicas em cada região. Entrará em vigor se regionalReplicaCount não estiver definido. Melhora a resiliência à região ou à falha do cluster e cria latência durante a alta escala. | Inteiro entre 1 e 3 inclusive. |
endOfLifeDate | Optional. Uma data de fim de vida futura para a versão do aplicativo. Essa propriedade é somente 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 'latest' for usada no applicationProfile. | |
storageAccountType | Optional. Tipo de conta de armazenamento a ser usada em cada região para armazenar o pacote de aplicativos. O padrão é Standard_LRS. | Essa propriedade não é atualizável. |
safetyProfile/allowDeletionOfReplicatedLocations | Optional. Indica se a remoção ou não dessa Versão da Imagem da Galeria de regiões replicadas é permitida. | |
settings/packageFileName | Nome do arquivo de pacote a ser usado quando o pacote é baixado para a VM. | Isso é limitado a 4.096 caracteres. |
settings/configFileName | Nome do arquivo de configuração a ser usado quando a configuração é baixada para a VM. | Isso é limitado a 4.096 caracteres. |
settings/scriptBehaviorAfterReboot | Optional. A ação a ser tomada para instalar, atualizar ou remover o aplicativo da 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 em VMs (Máquinas Virtuais) do Azure e conjuntos de dimensionamento de máquinas virtuais do Azure.
Os applicationProfile
conjuntos de dimensionamento de máquinas virtuais e VM do Azure definem o seguinte:
Propriedade | Descrição | Limitações |
---|---|---|
galleryApplications | Aplicativos da Galeria a serem implantados | |
ID de referência do pacote | Referência à versão do aplicativo a ser implantada | Referência de versão válida do aplicativo |
referência de configuração | Optional. A URL completa de um blob de armazenamento que contém a configuração dessa implantação. Isso substitui qualquer valor fornecido para defaultConfiguration anteriormente. | Referência de blob de armazenamento válida |
ordem | Optional. Ordem na qual implantar aplicativos | Inteiro válido |
treatFailureAsDeploymentFailure | Optional. 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:
Caso | Instalar significado | Significado da falha |
---|---|---|
Nenhuma ordem especificada | Aplicativos não ordenados são instalados após aplicativos ordenados. Não há garantia de ordem de instalação entre os aplicativos não ordenados. | 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 pedido 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 após os com pedidos mais baixos e antes daqueles com pedidos mais altos. | Se um aplicativo anterior com uma ordem inferior não tiver sido instalado, nenhum aplicativo com essa ordem será instalado. Se algum aplicativo com essa ordem não for instalado, nenhum aplicativo com uma instalação de ordem superior. |
Aumentando os pedidos | O aplicativo será instalado após os pedidos mais baixos e antes dos pedidos mais altos. | Se um aplicativo anterior com uma ordem inferior não tiver sido instalado, esse aplicativo não será instalado. Se esse 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á 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.
Detalhes técnicos
Considerações e limites atuais
Até 10 réplicas por região: quando você está criando uma versão do aplicativo VM, o número máximo de réplicas por região é 10 para blob de páginas e blob de blocos.
Até 300 versões por região: ao criar uma versão do 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 ao publicar o artefato na conta de armazenamento, permitindo acesso anônimo.
Repetição manual para instalações com falha: atualmente, a única maneira de tentar novamente uma instalação com falha é remover o aplicativo do perfil e adicioná-lo novamente.
Até 25 aplicativos por VM: no máximo 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
mediaLink
do aplicativo é de 2 GB. O tamanho máximo do arquivo édefaultConfigurationLink
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.
Atualmente, não há suporte para operações de movimentação: atualmente, não há suporte para mover VMs com aplicativos de VM associados entre grupos de recursos.
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, qualquer operação de atualização subsequente requer uma SAS válida.
Baixar o diretório dentro da VM
O local de download do pacote de aplicativos 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 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, o arquivo é renomeado como "MyVmApp" e não tem nenhuma extensão de arquivo (por exemplo, .exe, .msi). A VM não está ciente do nome e da extensão originais do arquivo.
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" torna o script de instalação da seguinte maneira.
MyAppe.exe /S
Dica
Se o blob for originalmente nomeado como 'myApp.exe' em vez de 'myapp', o script funcionará sem definir a packageFileName
propriedade.
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.
Tratar a falha como uma falha de implantação
A extensão aplicativo de VM sempre retorna um sucesso , independentemente de qualquer aplicativo de VM ter falhado ao ser instalado/atualizado/removido. 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.
Empacotar e instalar aplicativos de VM no Linux
Para criar um aplicativo de VM, você precisa de um pacote 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 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.
Para criar um pacote de aplicativo de VM para instalar o PowerShell no Ubuntu, execute as seguintes etapas:
- Execute os comandos a seguir para habilitar o repositório para baixar o PowerShell e identificar dependências de 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 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
- 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
Criando 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 quiser criar um pacote de aplicativo de VM para myApp.exe
, que é fornecido como um executável, meu aplicativo de VM é chamado de 'myApp', portanto, eu gravo o comando supondo que o pacote do aplicativo esteja 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 myapp /quiet /forcerestart /log myapp_uninstall.log
Normalmente, o comando start
seria chamado dentro de um script em lotes. Se usado com o /wait
parâmetro, 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
Solucionar problemas de aplicativos de VM
Para saber se um aplicativo de VM específico foi adicionado com êxito à instância da VM, verifique a mensagem da extensão aplicativo da 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 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}. 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 configFileName) | 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
- Saiba como Criar e implantar pacotes de aplicativos de VM.
- Saiba como gerenciar e excluir aplicativos de VM do Azure.