Panoramica delle applicazioni VM

Le applicazioni vm sono un tipo di risorsa in Azure Compute Gallery (noto in precedenza come Raccolta immagini condivise) che semplifica la gestione, la condivisione e la distribuzione globale delle applicazioni per le macchine virtuali.

Anche se è possibile creare un'immagine di una macchina virtuale con app preinstallate, è necessario aggiornare l'immagine ogni volta che sono state apportate modifiche all'applicazione. Se si separa l'installazione dell'applicazione dalle immagini di macchina virtuale, non è necessario pubblicare una nuova immagine per ogni modifica di riga di codice.

I pacchetti dell'applicazione offrono vantaggi rispetto ad altri metodi di distribuzione e creazione di pacchetti:

  • Le applicazioni vm hanno supporto per Criteri di Azure

  • Raggruppamento e controllo delle versioni dei pacchetti

  • Le applicazioni vm possono essere replicate a livello globale per essere più vicine all'infrastruttura, quindi non è necessario usare AzCopy o altri meccanismi di copia dell'archiviazione per copiare i bit tra aree di Azure.

  • Condivisione con altri utenti tramite il Controllo di accesso basato su ruoli di Azure

  • Supporto per le macchine virtuali e set di scalabilità flessibili e uniformi

  • Se sono presenti regole del gruppo di sicurezza di rete applicate alla macchina virtuale o al set di scalabilità, il download dei pacchetti da un repository Internet potrebbe non essere possibile. Con gli account di archiviazione, il download di pacchetti in macchine virtuali bloccate richiederebbe la configurazione di collegamenti privati.

  • Supporto per i BLOB in blocchi: questa funzionalità consente la gestione efficiente di file di grandi dimensioni suddividendoli in blocchi più piccoli e gestibili. Ideale per caricare grandi quantità di dati, streaming e caricamento in background.

Che cosa sono i pacchetti di app della macchina virtuale?

I pacchetti dell'applicazione vm usano più tipi di risorse:

Risorsa Descrizione
Raccolta di calcolo di Azure Una raccolta è un repository per la gestione e la condivisione dei pacchetti dell'applicazione. Gli utenti possono condividere la risorsa della raccolta e tutte le risorse figlio vengono condivise automaticamente. Il nome della raccolta deve essere univoco per ogni sottoscrizione. Ad esempio, potrebbe essere disponibile una raccolta per archiviare tutte le immagini del sistema operativo e un'altra raccolta per archiviare tutte le applicazioni vm.
Applicazione vm Definizione dell'applicazione vm. Si tratta di una risorsa logica che archivia i metadati comuni per tutte le versioni sottostanti. Ad esempio, è possibile avere una definizione dell'applicazione per Apache Tomcat e avere più versioni al suo interno.
Versione dell'applicazione vm Risorsa distribuibile. È possibile replicare a livello globale le versioni dell'applicazione vm nelle aree di destinazione più vicine all'infrastruttura di macchine virtuali. La versione dell'applicazione vm deve essere replicata in un'area prima di poter essere distribuita in una macchina virtuale in tale area.

Limiti

  • Non più di 3 repliche per area: quando si crea una versione dell'applicazione vm, il numero massimo di repliche per area è tre.

  • Archiviazione con accesso pubblico o URI di firma di accesso condiviso con privilegi di lettura: L'account di archiviazione deve avere accesso a livello pubblico o usare un URI di firma di accesso condiviso con privilegi di lettura, in quanto altri livelli di restrizione hanno esito negativo nelle distribuzioni.

  • Ripetizione di installazioni non riuscite: attualmente, l'unico modo per ritentare un'installazione non riuscita consiste nel rimuovere l'applicazione dal profilo, quindi aggiungerla nuovamente.

  • Solo 25 applicazioni per macchina virtuale: non più di 25 applicazioni possono essere distribuite in una macchina virtuale in qualsiasi momento.

  • Dimensioni dell'applicazione da 2 GB: la dimensione massima del file di una versione dell'applicazione è di 2 GB.

  • Nessuna garanzia sui riavvii nello script: se lo script richiede un riavvio, è consigliabile posizionare l'applicazione per ultima durante la distribuzione. Mentre il codice tenta di gestire i riavvii, potrebbe non riuscire.

  • Richiede un agente di macchine virtuali: l'agente di macchine virtuali deve esistere nella macchina virtuale ed essere in grado di ricevere gli stati degli obiettivi.

  • Più versioni della stessa applicazione nella stessa macchina virtuale: non è possibile avere più versioni della stessa applicazione in una macchina virtuale.

  • Le operazioni di spostamento non sono attualmente supportate: lo spostamento di macchine virtuali con app di macchine virtuali in altri gruppi di risorse non è attualmente supportato.

Nota

Per le applicazioni della raccolta di calcolo di Azure e delle macchine virtuali, Archiviazione firma di accesso condiviso può essere eliminata dopo la replica.

Costo

Non sono previsti costi aggiuntivi per l'uso dei pacchetti dell'applicazione di macchine virtuali, ma vengono addebitati i costi per le risorse seguenti:

  • Archiviazione costi di archiviazione di ogni pacchetto e di qualsiasi replica.
  • Addebiti in uscita di rete per la replica della prima versione dell'immagine dall'area di origine alle aree replicate. Le repliche successive vengono gestite all'interno dell'area, quindi non sono previsti costi aggiuntivi.

Per altre informazioni sul traffico di rete in uscita, vedere Dettagli sui prezzi per la larghezza di banda.

Applicazioni vm

La risorsa dell'applicazione vm definisce quanto segue sull'applicazione vm:

  • Raccolta di calcolo di Azure in cui è archiviata l'applicazione vm
  • Nome dell'applicazione
  • Tipo di sistema operativo supportato, ad esempio Linux o Windows
  • Descrizione dell'applicazione vm

Versioni dell'applicazione vm

Le versioni dell'applicazione vm sono la risorsa distribuibile. Le versioni vengono definite con le proprietà seguenti:

  • Numero versione
  • Collegamento al file del pacchetto dell'applicazione in un account di archiviazione
  • Stringa di installazione per l'installazione dell'applicazione
  • Rimuovere la stringa per mostrare come rimuovere correttamente l'app
  • Nome file del pacchetto da usare quando viene scaricato nella macchina virtuale
  • Nome file di configurazione da usare per configurare l'app nella macchina virtuale
  • Collegamento al file di configurazione per l'applicazione vm, che è possibile includere i file di licenza
  • Aggiornare la stringa per aggiornare l'applicazione vm a una versione più recente
  • Data di fine vita. Le date di fine vita sono informative; è comunque possibile distribuire le versioni dell'applicazione vm oltre la data di fine vita.
  • Escludi da versione più recente. È possibile impedire l'uso di una versione come versione più recente dell'applicazione.
  • Aree di destinazione per la replica
  • Numero di repliche per area

Scaricare la directory

Il percorso di download del pacchetto dell'applicazione e i file di configurazione sono:

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

I comandi install/update/remove devono essere scritti presupponendo che il pacchetto dell'applicazione e il file di configurazione si trovino nella directory corrente.

Denominazione dei file

Quando il file dell'applicazione viene scaricato nella macchina virtuale, viene rinominato come "MyVmApp" (nessuna estensione). Ciò è dovuto al fatto che la macchina virtuale non è a conoscenza del nome o dell'estensione originale del pacchetto. Usa l'unico nome che ha, ovvero il nome dell'applicazione stesso, "MyVmApp".

Ecco alcune alternative per esplorare questo problema:

È possibile modificare lo script in modo da includere un comando per rinominare il file prima dell'esecuzione:

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

È anche possibile usare la packageFileName proprietà (e la corrispondente configFileName) per indicare a microsoft cosa rinominare il file. Ad esempio, impostandolo su "MyApp.exe", lo script di installazione deve essere solo:

MyAppe.exe /S

Suggerimento

Se il BLOB è stato originariamente denominato "myApp.exe" anziché "myapp", lo script precedente avrebbe funzionato senza impostare la packageFileName proprietà .

Interprete dei comandi

Gli interpreti di comandi predefiniti sono:

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

È possibile usare un interprete diverso, ad esempio Chocolatey o PowerShell, purché sia installato nel computer, chiamando il file eseguibile e passando il comando. Ad esempio, per eseguire il comando in PowerShell in Windows anziché cmd, è possibile passare powershell.exe -Command '<powershell commmand>'

Modalità di gestione degli aggiornamenti

Quando si aggiorna una versione dell'applicazione in una macchina virtuale o set di scalabilità di macchine virtuali, viene usato il comando di aggiornamento specificato durante la distribuzione. Se la versione aggiornata non dispone di un comando di aggiornamento, la versione corrente viene rimossa e viene installata la nuova versione.

I comandi di aggiornamento devono essere scritti con la previsione che potrebbe essere aggiornata da qualsiasi versione precedente dell'applicazione vm.

Suggerimenti per la creazione di applicazioni di macchine virtuali in Linux

Le applicazioni di terze parti per Linux possono essere incluse in alcuni modi. Si esaminerà ora come gestire la creazione dei comandi di installazione per alcuni dei più comuni.

File con estensione tar e gz

Questi file sono archivi compressi e possono essere estratti in una posizione desiderata. Controllare le istruzioni di installazione per il pacchetto originale nel caso in cui debbano essere estratte in una posizione specifica. Se il file tar.gz contiene codice sorgente, vedere le istruzioni per il pacchetto per l'installazione dall'origine.

Esempio di comando per installare in golang un computer Linux:

sudo tar -C /usr/local -xzf go_linux

Comando remove di esempio:

sudo rm -rf /usr/local/go

Creazione di pacchetti di applicazioni tramite .deb, .rpme altri pacchetti specifici della piattaforma per le macchine virtuali con accesso a Internet limitato

È possibile scaricare singoli pacchetti per gestioni pacchetti specifici della piattaforma, ma in genere non contengono tutte le dipendenze. Per questi file, è necessario includere anche tutte le dipendenze nel pacchetto dell'applicazione oppure fare in modo che gestione pacchetti di sistema scarichi le dipendenze tramite i repository disponibili per la macchina virtuale. Se si usa una macchina virtuale con accesso a Internet con restrizioni, è necessario creare un pacchetto di tutte le dipendenze manualmente.

Capire le dipendenze può essere un po' complicato. Sono disponibili strumenti di terze parti che consentono di visualizzare l'intero albero delle dipendenze.

In Ubuntu è possibile eseguire sudo apt show <package_name> | grep Depends per visualizzare tutti i pacchetti installati durante l'esecuzione del sudo apt-get install <packge_name> comando. È quindi possibile usare tale output per scaricare tutti i .deb file per creare un archivio che può essere usato come pacchetto dell'applicazione.

  1. Ad esempio, per creare un pacchetto dell'applicazione vm per installare PowerShell per Ubuntu, eseguire prima i comandi seguenti per abilitare il repository da cui è possibile scaricare PowerShell e anche per identificare le dipendenze del pacchetto in una nuova macchina virtuale Ubuntu.
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
sudo rm -rf packages-microsoft-prod.deb
sudo apt update
sudo apt show powershell | grep Depends
  1. Controllare l'output della riga Depends (Dipende) che elenca i pacchetti seguenti:
Depends: libc6, libgcc1, libgssapi-krb5-2, libstdc++6, zlib1g, libicu72|libicu71|libicu70|libicu69|libicu68|libicu67|libicu66|libicu65|libicu63|libicu60|libicu57|libicu55|libicu52, libssl3|libssl1.1|libssl1.0.2|libssl1.
  1. Scaricare ognuno di questi file usando sudo apt-get download <package_name> e creare un archivio compresso tar con tutti i file.
  • Ubuntu 18.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download libgcc1
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 libgcc1
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 libgcc1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl3
sudo apt-get download libicu70
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  1. Questo archivio tar è il file del pacchetto dell'applicazione.
  • Il comando install in questo caso è:
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
  • E il comando remove è:
sudo apt remove powershell

Usare sudo apt autoremove anziché tentare in modo esplicito di rimuovere tutte le dipendenze. È possibile che siano state installate altre applicazioni con dipendenze sovrapposte. In tal caso, un comando di rimozione esplicito avrà esito negativo.

Se non si vogliono risolvere manualmente le dipendenze ed apt è in grado di connettersi ai repository, è possibile installare un'applicazione con un .deb solo file e consentire la apt gestione delle dipendenze.

Comando di installazione di esempio:

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

Suggerimenti per la creazione di applicazioni di macchine virtuali in Windows

La maggior parte delle applicazioni di terze parti in Windows è disponibile come programmi di installazione con estensione exe o msi. Alcuni sono disponibili anche come estrai ed esegui file ZIP. Esaminiamo le procedure consigliate per ognuna di esse.

Programma di installazione .exe

I file eseguibili del programma di installazione in genere avviano un'interfaccia utente e richiedono a un utente di selezionare l'interfaccia utente. Se il programma di installazione supporta un parametro in modalità invisibile all'utente, deve essere incluso nella stringa di installazione.

Cmd.exe prevede anche che i file eseguibili abbiano l'estensione .exe, quindi è necessario rinominare il file in modo che abbia l'estensione .exe .

Se si vuole creare un pacchetto dell'applicazione vm per myApp.exe, che viene fornito come eseguibile, l'applicazione di macchina virtuale è denominata "myApp", quindi si scrive il comando presupponendo che il pacchetto dell'applicazione si trova nella directory corrente:

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

Se il file eseguibile del programma di installazione non supporta un parametro di disinstallazione, a volte è possibile cercare il Registro di sistema in un computer di test per sapere qui che si trova il programma di disinstallazione.

Nel Registro di sistema, la stringa di disinstallazione viene archiviata in Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString in modo da usare il contenuto come comando remove:

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

Programma di installazione msi

Per l'esecuzione da riga di comando dei programmi di .msi installazione, i comandi per installare o rimuovere un'applicazione devono usare msiexec. In genere, msiexec viene eseguito come processo separato e cmd non attende il completamento, che può causare problemi durante l'installazione di più applicazioni di macchine virtuali. Il start comando può essere usato con msiexec per assicurarsi che l'installazione venga completata prima che il comando venga restituito. Ad esempio:

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

Comando remove di esempio:

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

File compressi

Per i file zip o altri file compressi, rinominare e decomprimere il contenuto del pacchetto dell'applicazione nella destinazione desiderata.

Comando di installazione di esempio:

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

Comando remove di esempio:

rmdir /S /Q C:\\myapp

Considerare l'errore come errore di distribuzione

L'estensione dell'applicazione vm restituisce sempre un esito positivo indipendentemente dal fatto che un'app vm non sia riuscita durante l'installazione o l'aggiornamento o la rimozione. L'estensione dell'applicazione vm segnala lo stato dell'estensione come errore solo quando si verifica un problema con l'estensione o l'infrastruttura sottostante. Questo comportamento viene attivato dal flag "considera l'errore come errore di distribuzione", impostato su $false per impostazione predefinita e può essere modificato in $true. Il flag di errore può essere configurato in PowerShell o nell'interfaccia della riga di comando.

Risoluzione dei problemi relativi alle applicazioni di macchine virtuali

Per sapere se un'applicazione vm specifica è stata aggiunta correttamente all'istanza della macchina virtuale, controllare il messaggio dell'estensione dell'applicazione vm.

Per altre informazioni su come ottenere lo stato delle estensioni della macchina virtuale, vedere Estensioni e funzionalità delle macchine virtuali per Linux e Estensioni macchina virtuale e funzionalità per Windows.

Per ottenere lo stato delle estensioni di macchina virtuale, usare Get-AzVM:

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

Per ottenere lo stato delle estensioni del set di scalabilità, usare 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

messaggi di errore

Message Descrizione
La versione corrente dell'applicazione vm {name} è stata deprecata a {date}. Si è tentato di distribuire una versione dell'applicazione vm già deprecata. Provare a usare latest anziché specificare una versione specifica.
La versione corrente dell'applicazione vm {name} supporta il sistema operativo {OS}, mentre il sistema operativo del disco operativo corrente è {OS}. Si è tentato di distribuire un'applicazione Linux nell'istanza di Windows o viceversa.
È stato superato il numero massimo di applicazioni vm (max=5, current={count}). Usare un minor numero di applicazioni e ripetere la richiesta. Attualmente sono supportate solo cinque applicazioni vm per ogni macchina virtuale o set di scalabilità.
È stata specificata più di un'applicazione vm con lo stesso packageReferenceId. La stessa applicazione è stata specificata più di una volta.
Sottoscrizione non autorizzata ad accedere a questa immagine. La sottoscrizione non ha accesso a questa versione dell'applicazione.
Archiviazione account negli argomenti non esiste. Nessuna applicazione per questa sottoscrizione.
L'immagine della piattaforma {image} non è disponibile. Verificare che tutti i campi nel profilo di archiviazione siano corretti. Per altri dettagli sulle informazioni sul profilo di archiviazione, vedere https://aka.ms/storageprofile. L'applicazione non esiste.
L'immagine della raccolta {image} non è disponibile nell'area {region}. Contattare il proprietario dell'immagine per eseguire la replica in questa area o modificare l'area richiesta. La versione dell'applicazione della raccolta esiste, ma non è stata replicata in questa area.
La firma di accesso condiviso non è valida per l'URI di origine {uri}. È stato ricevuto un Forbidden errore dall'archiviazione quando si tenta di recuperare informazioni sull'URL (mediaLink o defaultConfigurationLink).
Il BLOB a cui fa riferimento l'URI di origine {uri} non esiste. Il BLOB fornito per le proprietà mediaLink o defaultConfigurationLink non esiste.
Non è possibile accedere all'URL della versione dell'applicazione della raccolta {url} a causa dell'errore seguente: nome remoto non trovato. Assicurarsi che il BLOB esista e che sia accessibile pubblicamente o sia un URL di firma di accesso condiviso con privilegi di lettura. Il caso più probabile è che non sia stato fornito un URI di firma di accesso condiviso con privilegi di lettura.
Impossibile accedere all'URL della versione dell'applicazione della raccolta {url} a causa dell'errore seguente: {error description}. Assicurarsi che il BLOB esista e che sia accessibile pubblicamente o sia un URL di firma di accesso condiviso con privilegi di lettura. Si è verificato un problema con il BLOB di archiviazione fornito. La descrizione dell'errore fornisce altre informazioni.
L'operazione {operationName} non è consentita in {application} perché è contrassegnata per l'eliminazione. È solo possibile ripetere l'operazione di eliminazione oppure attendere il completamento di un'operazione in corso. Tentare di aggiornare un'applicazione attualmente in fase di eliminazione.
Il valore {value} del parametro 'galleryApplicationVersion.properties.publishingProfile.replicaCount' non è compreso nell'intervallo. Il valore deve essere compreso tra uno e tre inclusi. Solo tra una e tre repliche sono consentite per le versioni dell'applicazione vm.
La modifica della proprietà 'galleryApplicationVersion.properties.publishingProfile.manageActions.install' non è consentita. (o aggiornare, eliminare) Non è possibile modificare alcuna azione di gestione in una macchina virtuale esistenteApplication. È necessario creare una nuova versione di VmApplication.
La modifica della proprietà ' galleryApplicationVersion.properties.publishingProfile.settings.packageFileName ' non è consentita. (o configFileName) Non è possibile modificare alcuna impostazione, ad esempio il nome del file del pacchetto o il nome del file di configurazione. È necessario creare una nuova versione di VmApplication.
Il BLOB a cui fa riferimento l'URI di origine {URI} è troppo grande: size = {size}. Le dimensioni massime consentite per i BLOB sono "1 GB". La dimensione massima per un BLOB a cui fa riferimento mediaLink o defaultConfigurationLink è attualmente 1 GB.
Il BLOB a cui fa riferimento l'URI di origine {uri} è vuoto. È stato fatto riferimento a un BLOB vuoto.
Il tipo di BLOB {type} non è supportato per l'operazione {operation}. Sono supportati solo BLOB di pagine e BLOB in blocchi. VmApplications supporta solo BLOB di pagine e BLOB in blocchi.
La firma di accesso condiviso non è valida per l'URI di origine {uri}. L'URI di firma di accesso condiviso fornito per mediaLink o defaultConfigurationLink non è un URI di firma di accesso condiviso valido.
Non è possibile specificare {region} nelle aree di destinazione perché la sottoscrizione manca la funzionalità obbligatoria {featureName}. Registrare la sottoscrizione con la funzionalità richiesta o rimuovere l'area dall'elenco di aree di destinazione. Per usare VmApplications in determinate aree con restrizioni, è necessario che il flag di funzionalità sia registrato per tale sottoscrizione.
Le aree del profilo di pubblicazione delle immagini della raccolta {regions} devono contenere la posizione della versione dell'immagine {location}. L'elenco delle aree per la replica deve contenere il percorso in cui si trova la versione dell'applicazione.
Le aree duplicate non sono consentite nelle aree di pubblicazione di destinazione. Le aree di pubblicazione potrebbero non avere duplicati.
Le risorse della versione dell'applicazione della raccolta attualmente non supportano la crittografia. La proprietà di crittografia per le aree di destinazione non è supportata per le applicazioni di macchine virtuali
Il nome dell'entità non corrisponde al nome nell'URL della richiesta. La versione dell'applicazione della raccolta specificata nell'URL della richiesta non corrisponde a quella specificata nel corpo della richiesta.
Il nome della versione dell'applicazione della raccolta non è valido. Il nome della versione dell'applicazione deve seguire Major(int32). Minor(int32). Formato Patch(int32), dove int è compreso tra 0 e 2.147.483.647 (inclusi). ad esempio 1.0.0, 2018.12.1 e così via. La versione dell'applicazione della raccolta deve seguire il formato specificato.

Passaggi successivi