Os Aplicativos 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.
Verifique se a conta de armazenamento tem acesso em nível público ou use um URI SAS com privilégio de leitura, pois outros níveis de restrição falham nas implantações. Você pode usar o Gerenciador de Armazenamento para criar rapidamente um URI SAS, se ainda não tiver um.
Se você estiver usando o PowerShell, precisará estar usando a versão 3.11.0 do módulo Az.Storage.
- Vá para o portal do Azure e, em seguida, procure e selecione Galeria de Computação do Azure.
- Selecione a galeria que deseja usar na lista.
- Na página da sua galeria, selecione Adicionar na parte superior da página e, em seguida, selecione Definição de aplicativo VM na lista suspensa. A página Criar uma definição de aplicativo VM é aberta.
- Na guia Noções básicas, insira um nome para seu aplicativo e escolha se o aplicativo é para VMs que executam Linux ou Windows.
- Selecione a guia Opções de publicação se quiser especificar qualquer uma das seguintes configurações opcionais para sua definição de aplicativo VM:
- Uma descrição da definição de aplicativo VM.
- Data de fim de vida
- Link para um Eula
- URI de uma declaração de privacidade
- URI para notas de versão
- Quando terminar, selecione Rever + criar.
- Quando a validação for concluída, selecione Criar para que a definição seja implantada.
- Quando a implantação estiver concluída, selecione Ir para o recurso.
- Na página do aplicativo, selecione Criar uma versão do aplicativo VM. A página Criar uma versão do aplicativo VM é aberta.
- Insira um número de versão como 1.0.0.
- Selecione a região onde carregou o pacote de aplicação.
- Em Pacote do aplicativo de origem, selecione Procurar. Selecione a conta de armazenamento e, em seguida, o contêiner onde o pacote está localizado. Selecione o pacote na lista e, em seguida, selecione Selecionar quando terminar. Como alternativa, você pode colar o URI SAS neste campo, se preferir.
- Digite o script Instalar. Você também pode fornecer o script Desinstalar e o script Atualizar. Consulte Visão geral para obter informações sobre como criar os scripts.
- Se você tiver um arquivo de configuração padrão carregado em uma conta de armazenamento, poderá selecioná-lo em Configuração padrão.
- Selecione Excluir da versão mais recente se não quiser que esta versão apareça como a versão mais recente quando você cria uma VM.
- Para Data de fim de vida, escolha uma data no futuro para controlar quando esta versão deve ser aposentada. Ele não é excluído ou removido automaticamente, é apenas para seu próprio rastreamento.
- Para replicar essa versão para outras regiões, selecione a guia Replicação , adicione mais regiões e faça alterações no número de réplicas por região. A região original onde sua versão foi criada deve estar na lista e não pode ser removida.
- Quando terminar de fazer alterações, selecione Rever + criar na parte inferior da página.
- Quando a validação for mostrada como aprovada, selecione Criar para implantar a versão do aplicativo VM.
Agora você pode criar uma VM e implantar o aplicativo VM nela usando o portal. Basta criar a VM como de costume e, na guia Avançado , escolha Selecionar um aplicativo VM para instalar.
Selecione o aplicativo VM na lista e, em seguida, selecione Salvar na parte inferior da página.
Se você tiver mais de um aplicativo VM para instalar, poderá definir a ordem de instalação para cada aplicativo VM novamente na guia Avançado.
Você também pode implantar o aplicativo VM em VMs em execução no momento. Selecione a opção Extensões + aplicativos em Configurações no menu esquerdo ao visualizar os detalhes da VM no portal.
Escolha aplicativos VM e, em seguida, selecione Adicionar aplicativo para adicionar seu aplicativo VM.
Selecione o aplicativo VM na lista e, em seguida, selecione Salvar na parte inferior da página.
Para mostrar o status do aplicativo VM, vá para a guia/configurações Extensões + aplicativos e verifique o status do VMAppExtension:
Para mostrar o status do aplicativo VM para VMSS, vá para a página VMSS, Instances, selecione uma delas e vá para VMAppExtension:
Os aplicativos VM exigem a CLI do Azure versão 2.30.0 ou posterior.
Crie a definição de aplicativo VM usando az sig gallery-application create. Neste exemplo, estamos criando uma definição de aplicativo VM chamada myApp para VMs baseadas em Linux.
az sig gallery-application create \
--application-name myApp \
--gallery-name myGallery \
--resource-group myResourceGroup \
--os-type Linux \
--location "East US"
Crie uma versão do aplicativo VM usando az sig gallery-application version create. Os caracteres permitidos para a versão são números e pontos. Os números devem estar dentro do intervalo de um inteiro de 32 bits. Formato: MajorVersion.Versão Menor.Adesivo.
Substitua os valores dos parâmetros pelos seus.
az sig gallery-application version create \
--version-name 1.0.0 \
--application-name myApp \
--gallery-name myGallery \
--location "East US" \
--resource-group myResourceGroup \
--package-file-link "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" \
--install-command "mv myApp .\myApp\myApp" \
--remove-command "rm .\myApp\myApp" \
--update-command "mv myApp .\myApp\myApp" \
--default-configuration-file-link "https://<storage account name>.blob.core.windows.net/<container name>/<filename>"\
Defina um aplicativo VM para uma VM existente usando az vm application set e substitua os valores dos parâmetros pelo seu próprio.
az vm application set \
--resource-group myResourceGroup \
--name myVM \
--app-version-ids /subscriptions/{subID}/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 \
--treat-deployment-as-failure true
Para definir vários aplicativos em uma VM:
az vm application set \
--resource-group myResourceGroup \
--name myVM \
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp2/versions/1.0.1 \
--treat-deployment-as-failure true true
Para adicionar um aplicativo a um VMSS, use az vmss application set:
az vmss application set \
--resource-group myResourceGroup \
--name myVmss \
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 \
--treat-deployment-as-failure true
Para adicionar vários aplicativos a um VMSS:
az vmss application set \
--resource-group myResourceGroup \
--name myVmss
--app-version-ids /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp/versions/1.0.0 /subscriptions/{subId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/galleries/myGallery/applications/myApp2/versions/1.0.0 \
--treat-deployment-as-failure true
Para verificar o status de implantação da VM do aplicativo, use az vm get-instance-view:
az vm get-instance-view -g myResourceGroup -n myVM --query "instanceView.extensions[?name == 'VMAppExtension']"
Para verificar o status de implantação do VMSS do aplicativo, use az vmss get-instance-view:
az vmss get-instance-view --ids (az vmss list-instances -g myResourceGroup -n myVmss --query "[*].id" -o tsv) --query "[*].extensions[?name == 'VMAppExtension']"
Nota
O comando VMSS deployment status acima não lista o ID da instância com o resultado. Para mostrar o ID da instância com o status da extensão em cada instância, alguns scripts adicionais são necessários. Consulte o exemplo de CLI do VMSS abaixo que contém a sintaxe do PowerShell:
$ids = az vmss list-instances -g myResourceGroup -n myVmss --query "[*].{id: id, instanceId: instanceId}" | ConvertFrom-Json
$ids | Foreach-Object {
$iid = $_.instanceId
Write-Output "instanceId: $iid"
az vmss get-instance-view --ids $_.id --query "extensions[?name == 'VMAppExtension']"
}
Crie a definição de aplicativo VM usando New-AzGalleryApplication
o . Neste exemplo, estamos criando um aplicativo Linux chamado myApp na Galeria de Computação do Azure myGallery, no grupo de recursos myGallery e dei uma breve descrição do aplicativo VM para meu próprio uso. Substitua os valores conforme necessário.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
New-AzGalleryApplication `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-Location "East US" `
-Name $applicationName `
-SupportedOSType Linux `
-Description "Backend Linux application for finance."
Crie uma versão do seu aplicativo usando New-AzGalleryApplicationVersion
o . Os caracteres permitidos para a versão são números e pontos. Os números devem estar dentro do intervalo de um inteiro de 32 bits. Formato: MajorVersion.Versão Menor.Adesivo.
Neste exemplo, estamos criando o número de versão 1.0.0. Substitua os valores das variáveis conforme necessário.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$version = "1.0.0"
New-AzGalleryApplicationVersion `
-ResourceGroupName $rgName `
-GalleryName $galleryName `
-GalleryApplicationName $applicationName `
-Name $version `
-PackageFileLink "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" `
-DefaultConfigFileLink "https://<storage account name>.blob.core.windows.net/<container name>/<filename>" `
-Location "East US" `
-Install "mv myApp .\myApp\myApp" `
-Remove "rm .\myApp\myApp" `
Para adicionar o aplicativo a uma VM existente, obtenha a versão do aplicativo e use-a para obter a ID da versão do aplicativo VM. Use a ID para adicionar o aplicativo à configuração da VM.
$galleryName = "myGallery"
$rgName = "myResourceGroup"
$applicationName = "myApp"
$version = "1.0.0"
$vmName = "myVM"
$vm = Get-AzVM -ResourceGroupName $rgname -Name $vmName
$appVersion = Get-AzGalleryApplicationVersion `
-GalleryApplicationName $applicationName `
-GalleryName $galleryName `
-Name $version `
-ResourceGroupName $rgName
$packageId = $appVersion.Id
$app = New-AzVmGalleryApplication -PackageReferenceId $packageId
Add-AzVmGalleryApplication -VM $vm -GalleryApplication $app -TreatFailureAsDeploymentFailure true
Update-AzVM -ResourceGroupName $rgName -VM $vm
Para adicionar o aplicativo a um VMSS:
$vmss = Get-AzVmss -ResourceGroupName $rgname -Name $vmssName
$appVersion = Get-AzGalleryApplicationVersion `
-GalleryApplicationName $applicationName `
-GalleryName $galleryName `
-Name $version `
-ResourceGroupName $rgName
$packageId = $appVersion.Id
$app = New-AzVmssGalleryApplication -PackageReferenceId $packageId
Add-AzVmssGalleryApplication -VirtualMachineScaleSetVM $vmss.VirtualMachineProfile -GalleryApplication $app
Update-AzVmss -ResourceGroupName $rgName -VirtualMachineScaleSet $vmss -VMScaleSetName $vmssName
Verifique se o aplicativo foi bem-sucedido:
$rgName = "myResourceGroup"
$vmName = "myVM"
$result = Get-AzVM -ResourceGroupName $rgName -VMName $vmName -Status
$result.Extensions | Where-Object {$_.Name -eq "VMAppExtension"} | ConvertTo-Json
Para verificar se há VMSS:
$rgName = "myResourceGroup"
$vmssName = "myVMss"
$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
Crie a definição do aplicativo.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/galleries/\<**galleryName**\>/applications/\<**applicationName**\>?api-version=2019-03-01
{
"location": "West US",
"name": "myApp",
"properties": {
"supportedOSType": "Windows | Linux",
"endOfLifeDate": "2020-01-01"
}
}
Nome do Campo |
Description |
Limitações |
nome |
Um nome exclusivo para o aplicativo VM na galeria |
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 |
Quer se trate de uma aplicação Windows ou Linux |
"Windows" ou "Linux" |
Fim da VidaData |
Uma data futura de fim de vida para o aplicativo. Observe que isso é apenas para referência e não é imposto. |
Data futura válida |
Crie uma versão do aplicativo VM.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/galleries/\<**galleryName**\>/applications/\<**applicationName**\>/versions/\<**versionName**\>?api-version=2019-03-01
{
"location": "$location",
"properties": {
"publishingProfile": {
"source": {
"mediaLink": "$mediaLink",
"defaultConfigurationLink": "$configLink"
},
"manageActions": {
"install": "echo installed",
"remove": "echo removed",
"update": "echo update"
},
"targetRegions": [
{
"name": "$location1",
"regionalReplicaCount": 1
},
{ "name": "$location1" }
]
},
"endofLifeDate": "datetime",
"excludeFromLatest": "true | false"
}
}
Nome do Campo |
Description |
Limitações |
localização |
Local de origem da versão do aplicativo VM |
Região válida do Azure |
MediaLink |
A url que contém o pacote de versão do aplicativo |
URL de armazenamento válido e existente |
defaultConfigurationLink |
Opcional. A url que contém a configuração padrão, que pode ser substituída no momento da implantação. |
URL de armazenamento válido e existente |
Instalar |
O comando para instalar o aplicativo |
Comando válido para o SO fornecido |
Remover |
O comando para remover o aplicativo |
Comando válido para o SO fornecido |
Atualizar |
Opcional. O comando para atualizar o aplicativo. Se não for especificado e for necessária uma atualização, a versão antiga é removida e a nova instalada. |
Comando válido para o SO fornecido |
targetRegions/nome |
O nome de uma região para a qual replicar |
Validar região do Azure |
targetRegions/regionalReplicaCount |
Opcional. O número de réplicas na região a serem criadas. O padrão é 1. |
Inteiro entre 1 e 3 inclusive |
Fim da VidaData |
Uma data de fim de vida futura para a versão do aplicativo. Observe que isso é apenas para referência do cliente e não é imposto. |
Data futura válida |
excludeFromLatest |
Se especificado, esta versão não será considerada para a versão mais recente. |
Verdadeiro ou falso |
Para adicionar uma versão de aplicativo VM a uma VM, execute um PUT na VM.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/virtualMachines/\<**VMName**\>?api-version=2019-03-01
{
"properties": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version}",
"configurationReference": "{path to configuration storage blob}",
"treatFailureAsDeploymentFailure": false
}
]
}
},
"name": "{vm name}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group}/providers/Microsoft.Compute/virtualMachines/{vm name}",
"location": "{vm location}"
}
Para aplicar o aplicativo VM a um conjunto de escala uniforme:
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/
virtualMachineScaleSets/\<**VMSSName**\>?api-version=2019-03-01
{
"properties": {
"virtualMachineProfile": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "/subscriptions/{subscriptionId}/resourceGroups/<resource group>/providers/Microsoft.Compute/galleries/{gallery name}/applications/{application name}/versions/{version}",
"configurationReference": "{path to configuration storage blob}",
"treatFailureAsDeploymentFailure": false
}
]
}
}
},
"name": "{vm name}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group}/providers/Microsoft.Compute/virtualMachines/{vm name}",
"location": "{vm location}"
}
Nome do Campo |
Description |
Limitações |
ordem |
Opcional. A ordem em que os aplicativos devem ser implantados. Ver abaixo. |
Validar número inteiro |
packageReferenceId |
Uma referência à versão do aplicativo galeria |
Referência de versão válida do aplicativo |
configurationReference |
Opcional. A url completa de um blob de armazenamento que contém a configuração para esta implantação. Isso substituirá qualquer valor fornecido para defaultConfiguration anteriormente. |
Referência de blob de armazenamento válida |
tratarFailureAsDeploymentFailure |
Opcional. Status de provisionamento para VM App. Quando definido como false, o status de provisionamento sempre mostrará "bem-sucedido", independentemente da falha na implantação do aplicativo. |
Verdadeiro ou Falso |
O campo de ordem pode ser usado para especificar dependências entre aplicativos. As regras de ordem são as seguintes:
Incidente |
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. Todas as aplicações da mesma ordem serão instaladas depois daquelas com ordens mais baixas e antes daquelas 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 for instalado, esse aplicativo não será instalado. Se este aplicativo não for instalado, nenhum aplicativo com uma ordem superior será instalado. |
A resposta inclui o modelo de VM completo. Seguem-se as partes relevantes.
{
"name": "{vm name}",
"id": "{vm id}",
"type": "Microsoft.Compute/virtualMachines",
"location": "{vm location}",
"properties": {
"applicationProfile": {
"galleryApplications": ""
},
"provisioningState": "Updating"
},
"resources": [
{
"name": "VMAppExtension",
"id": "{extension id}",
"type": "Microsoft.Compute/virtualMachines/extensions",
"location": "centraluseuap",
"properties": "@{autoUpgradeMinorVersion=True; forceUpdateTag=7c4223fc-f4ea-4179-ada8-c8a85a1399f5; provisioningState=Creating; publisher=Microsoft.CPlat.Core; type=VMApplicationManagerLinux; typeHandlerVersion=1.0; settings=}"
}
]
}
Se os aplicativos de VM ainda não tiverem sido instalados na VM, o valor estará vazio.
Para obter o resultado da exibição da instância da VM:
GET
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/virtualMachines/\<**VMName**\>/instanceView?api-version=2019-03-01
O resultado tem o seguinte aspeto:
{
...
"extensions" [
...
{
"name": "VMAppExtension",
"type": "Microsoft.CPlat.Core.VMApplicationManagerLinux",
"typeHandlerVersion": "1.0.9",
"statuses": [
{
"code": "ProvisioningState/succeeded",
"level": "Info",
"displayStatus": "Provisioning succeeded",
"message": "Enable succeeded: {\n \"CurrentState\": [\n {\n \"applicationName\": \"doNothingLinux\",\n \"version\": \"1.0.0\",\n \"result\": \"Install SUCCESS\"\n },\n {
\n \"applicationName\": \"badapplinux\",\n \"version\": \"1.0.0\",\n \"result\": \"Install FAILED Error executing command \u0027exit 1\u0027: command terminated with exit status=1\"\n }\n ],\n \"ActionsPerformed\": []\n}
"
}
]
}
...
]
}
O status do Aplicativo VM está na mensagem de status do resultado da extensão do Aplicativo VM na exibição de instância.
Para obter o status de um aplicativo VMSS:
GET
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/ virtualMachineScaleSets/\<**VMSSName**\>/virtualMachines/<**instanceId**>/instanceView?api-version=2019-03-01
A saída é semelhante ao exemplo de VM anterior.