Aplicativos de VM são um tipo de recurso na Galeria de Computação do Azure (anteriormente conhecida como Galeria de Imagens Compartilhadas) que simplifica o gerenciamento, o compartilhamento e a distribuição global de aplicativos para suas máquinas virtuais.
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 Gerenciador de Armazenamento para criar rapidamente um URI de SAS se ainda não tiver um.
Se estiver usando o PowerShell, precisará usar a versão 3.11.0 do módulo Az.Storage.
- Vá até o portal do Azure, pesquise por Galeria de Computação do Azure e selecione essa opção.
- Selecione a galeria que você deseja usar a partir da lista.
- Na página da galeria, selecione Adicionar na parte superior da página e, em seguida, selecione definição de aplicativo da VM na lista suspensa. A página Criar uma definição de aplicativo de VM é aberta.
- Na guia Noções Básicas, insira um nome para seu aplicativo e escolha se o aplicativo é para VMs que executam o Linux ou o Windows.
- Selecione a guia Opções de publicação se desejar especificar qualquer uma das seguintes configurações opcionais para a definição de aplicativo da VM:
- Uma descrição da definição do aplicativo da VM.
- Data de fim da vida útil
- Link para um EULA
- URI de uma declaração de privacidade
- URI para notas de versão
- Quando terminar, selecione Review + create.
- Depois que a validação for concluída, selecione Criar para que a definição seja implantada.
- Após a conclusão da implantação, selecione Ir para o recurso.
- Na página do aplicativo, selecione Criar uma versão de aplicativo da VM. A página Criar uma Versão do Aplicativo de VM é aberta.
- Insira um número de versão, como 1.0.0.
- Selecione a região na qual carregou o pacote de aplicativos.
- Em Pacote de Aplicativo de origem,selecione Procurar. Selecione a conta de armazenamento e, em seguida, o contêiner em que seu pacote está localizado. Selecione o pacote na lista e selecione Selecionar quando terminar. Como alternativa, você pode colar o URI SAS neste campo, se preferir.
- Digite no script Instalar. Você também pode fornecer o script Desinstalar e o script Atualizar. Consulte a 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 a partir do mais recente se não quiser que essa versão apareça como a versão mais recente ao criar uma VM.
- Para Data de fim da vida útil, escolha uma data no futuro para acompanhar quando essa versão deverá ser desativada. Ela não é excluída nem removida automaticamente, é apenas para seu próprio acompanhamento.
- 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 em que sua versão foi criada deve estar na lista e não pode ser removida.
- Quando terminar de fazer as alterações, clique em Revisar + Criar na parte inferior da página.
- Quando a validação aparecer como aprovada, selecione Criar para implantar a versão de aplicativo da VM.
Agora você pode criar uma VM e implantar o aplicativo de VM nela usando o portal. Basta criar a VM como de costume, e na guia Avançado, escolha Selecionar um aplicativo de VM para instalar.
Selecione o aplicativo de VM na lista e, em seguida, selecione Salvar na parte inferior da página.
Se você tiver mais de um aplicativo de VM para instalar, poderá definir a ordem de instalação para cada aplicativo de VM novamente na guia Avançado.
Você também pode implantar o aplicativo de VM em VMs atualmente em execução. Ao exibir os detalhes da VM no portal, selecione a opção Extensões + aplicativos em Configurações no menu esquerdo.
Escolha Aplicativos de VM e, em seguida, selecione Adicionar aplicativo para adicionar seu aplicativo de VM.
Selecione o aplicativo de VM na lista e, em seguida, selecione Salvar na parte inferior da página.
Para mostrar o status do aplicativo de VM, acesse a guia Extensões + aplicativos/configurações e verifique o status da VMAppExtension:
Para mostrar o status do aplicativo de VM para o VMSS, vá para a página do VMSS, Instâncias, selecione uma delas e, em seguida, vá para VMAppExtension:
O aplicativo de VM exige a CLI do Azure versão 2.30.0 ou posterior.
Crie a definição do aplicativo de VM usando az sig gallery-application create. Neste exemplo, estamos criando uma definição de aplicativo de 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 de aplicativo da VM usando az sig gallery-application version create. Caracteres permitidos para a versão da imagem são números e pontos. Os números devem estar dentro do intervalo de um inteiro de 32 bits. Formato: MajorVersion.MinorVersion.Patch.
Substitua os valores dos parâmetros pelos seus próprios.
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 de VM para uma VM existente usando az vm application set e substitua os valores dos parâmetros pelos seus próprios.
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 configurar 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 do aplicativo de VM, 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 aplicativo do VMSS, use az vm 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']"
Observação
O comando de status de implantação do VMSS acima não lista a ID da instância com o resultado. Para mostrar a ID da instância com o status da extensão em cada instância, alguns scripts adicionais são necessários. Veja o exemplo da 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 de VM usando New-AzGalleryApplication
. Nesse exemplo, estamos criando um aplicativo Linux chamado myApp na Galeria de Computação do Azure myGallery, no grupo de recursos myGallery, e forneci uma breve descrição do aplicativo de 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 o New-AzGalleryApplicationVersion
. Caracteres permitidos para a versão da imagem são números e pontos. Os números devem estar dentro do intervalo de um inteiro de 32 bits. Formato: MajorVersion.MinorVersion.Patch.
Nesse 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 da 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 |
Descrição |
Limitações |
name |
Um nome exclusivo para o aplicativo de VM dentro da galeria |
Comprimento máximo de 117 caracteres. Os caracteres permitidos são letras maiúsculas ou minúsculas, dígitos, hífen (-), ponto final (.), sublinhado (_). Nomes sem permissão para terminar com o ponto final(.). |
supportedOSType |
Se este é um aplicativo Windows ou Linux |
“Windows” ou “Linux” |
endOfLifeDate |
Uma próxima data de vida para o aplicativo. Observe que isso é apenas para referência, não sendo obrigatório. |
Data futura válida |
Crie uma versão de aplicativo de 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 |
Descrição |
Limitações |
local |
Local de origem da versão do aplicativo da VM |
Região do Azure válida |
mediaLink |
A URL que contém o pacote de versão do aplicativo |
URL de armazenamento válida 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álida e existente |
Instalar |
O comando para instalar o aplicativo |
Comando válido para o sistema operacional fornecido |
Remover |
O comando para remover o aplicativo |
Comando válido para o sistema operacional fornecido |
Atualizar |
Opcional. O comando para atualizar o aplicativo. Se não for especificado e uma atualização for necessária, a versão antiga será removida e a nova será instalada. |
Comando válido para o sistema operacional fornecido |
targetRegions/name |
O nome de uma região para a qual replicar |
Validar a região do Azure |
targetRegions/regionalReplicaCount |
Opcional. O número de réplicas na região a ser criado. O valor padrão é 1. |
Um inteiro entre 1 e 3, inclusive |
endOfLifeDate |
Uma data de fim de vida futura para a versão do aplicativo. Observe que isso é apenas para referência do cliente, não sendo obrigatório. |
Data futura válida |
excludeFromLatest |
Se especificada, essa versão não será considerada para a versão mais recente. |
Verdadeiro ou falso |
Para adicionar uma versão de aplicativo de VM a uma VM, execute um PUT na VM.
PUT
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/virtualMachines/\<**VMName**\>?api-version=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 de VM a um conjunto de dimensionamento 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 |
Descrição |
Limitações |
ordem |
Opcional. A ordem na qual os aplicativos devem ser implantados. Veja abaixo. |
Validar inteiro |
packageReferenceId |
Uma referência à versão do aplicativo da galeria |
Referência de versão do aplicativo válida |
configurationReference |
Opcional. A URL completa de um blob de armazenamento que contém a configuração para essa implantação. Isso substituirá qualquer valor fornecido para defaultConfiguration anteriormente. |
Referência de blob de armazenamento válida |
treatFailureAsDeploymentFailure |
Opcional. Status de provisionamento do aplicativo de VM. Quando definido como falso, o status de provisionamento sempre mostrará 'êxito' independentemente de falha na implantação do aplicativo. |
Verdadeiro ou Falso |
O campo order pode ser usado para especificar dependências entre aplicativos. As regras para a ordem são as seguintes:
Caixa |
Instalar Significado |
Significado da falha |
Nenhuma ordem especificada |
Aplicativos não ordenados são instalados após aplicativos ordenados. Não há nenhuma garantia de ordem de instalação entre os aplicativos não pedidos. |
Falhas de instalação de outros aplicativos, seja ordenadas ou não ordenadas, não afetam a instalação de aplicativos não ordenados. |
Valores de ordem duplicada |
O aplicativo é instalado em qualquer ordem em comparação com outros aplicativos com a mesma ordem. Todos os aplicativos da mesma ordem serão instalados depois daqueles com pedidos inferiores 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 ordem superior será instalado. |
Aumento de pedidos |
O aplicativo será instalado depois daqueles com pedidos inferiores e antes daqueles com pedidos mais altos. |
Se a instalação de um aplicativo anterior com uma ordem inferior falhar, esse aplicativo não será instalado. Se esse aplicativo não for instalado, nenhum aplicativo com uma ordem superior será instalado. |
A resposta inclui o modelo de VM completo. A seguir estão as partes relevantes.
{
"name": "{vm name}",
"id": "{vm id}",
"type": "Microsoft.Compute/virtualMachines",
"location": "{vm location}",
"properties": {
"applicationProfile": {
"galleryApplications": ""
},
"provisioningState": "Updating"
},
"resources": [
{
"name": "VMAppExtension",
"id": "{extension id}",
"type": "Microsoft.Compute/virtualMachines/extensions",
"location": "centraluseuap",
"properties": "@{autoUpgradeMinorVersion=True; forceUpdateTag=7c4223fc-f4ea-4179-ada8-c8a85a1399f5; provisioningState=Creating; publisher=Microsoft.CPlat.Core; type=VMApplicationManagerLinux; typeHandlerVersion=1.0; settings=}"
}
]
}
Se os aplicativos de VM ainda não tiverem sido instalados na VM, o valor estará vazio.
Para obter o resultado da exibição de instância de VM:
GET
/subscriptions/\<**subscriptionId**\>/resourceGroups/\<**resourceGroupName**\>/providers/Microsoft.Compute/virtualMachines/\<**VMName**\>/instanceView?api-version=2019-03-01
O resultado será semelhante a este:
{
...
"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 de VM está na mensagem de status do resultado da extensão de aplicativo de VM no modo de exibição da instância.
Para obter o status de um Aplicativo do 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.