Udostępnij za pośrednictwem


Omówienie aplikacji maszyn wirtualnych

Aplikacje maszyn wirtualnych to typ zasobu w galerii obliczeń platformy Azure, który zapewnia nowoczesne, elastyczne podejście do zarządzania i wdrażania aplikacji na maszynach wirtualnych i zestawach skalowania. Dzięki oddzieleniu instalacji aplikacji z podstawowych obrazów maszyn wirtualnych można usprawnić aktualizacje, zmniejszyć nakład pracy związany z konserwacją obrazu i przyspieszyć cykle wdrażania. Takie podejście eliminuje konieczność ponownego kompilowania i ponownego publikowania obrazów maszyn wirtualnych dla każdej zmiany aplikacji, umożliwiając szybszą iterację i większą elastyczność operacyjną. Aplikacje maszyn wirtualnych najlepiej nadają się do wdrażania sztucznej inteligencji, wysokiej skali, małych opóźnień, mikrousług, bezpiecznych i zgodnych obciążeń na maszynach wirtualnych platformy Azure.

Zasób opis
Galeria obliczeniowa platformy Azure Galeria to repozytorium do zarządzania pakietami aplikacji i udostępniania ich. Użytkownicy mogą udostępniać zasób galerii, a wszystkie zasoby podrzędne są udostępniane automatycznie. Nazwa galerii musi być unikatowa dla subskrypcji. Możesz na przykład mieć jedną galerię do przechowywania wszystkich obrazów systemu operacyjnego i innej galerii do przechowywania wszystkich aplikacji maszyn wirtualnych.
Aplikacja maszyny wirtualnej Definicja aplikacji maszyny wirtualnej. Jest to zasób logiczny, który przechowuje wspólne metadane dla wszystkich używanych wersji. Na przykład możesz mieć definicję aplikacji dla serwera Apache Tomcat i mieć w niej wiele wersji.
Wersja aplikacji maszyny wirtualnej Zasób możliwy do wdrożenia, który zawiera pakiet aplikacji i konfiguracje specyficzne dla wersji. Wersje aplikacji maszyny wirtualnej można globalnie replikować do regionów docelowych bliżej infrastruktury maszyny wirtualnej. Wersja aplikacji maszyny wirtualnej musi zostać zreplikowana do regionu, zanim będzie mogła zostać wdrożona na maszynie wirtualnej w tym regionie.
Konto magazynu Pakiety aplikacji są najpierw przekazywane na konto przechowywania. Następnie Galeria Obliczeń Azure pobiera pakiet aplikacji z tego konta magazynu przy użyciu adresów URL SAS i przechowuje go w wersji aplikacji na maszynie wirtualnej. Galeria zasobów obliczeniowych platformy Azure replikuje również ten pakiet między regionami i replikami regionalnymi zgodnie z definicją wersji aplikacji maszyny wirtualnej. Pakiet aplikacji na koncie magazynowym można usunąć po utworzeniu wersji aplikacji dla maszyny wirtualnej w Azure Compute Gallery.

Diagram przedstawiający kroki tworzenia aplikacji maszyny wirtualnej i wdrażania jej na platformie Azure

Najważniejsze korzyści:

  • Scentralizowane i elastyczne zarządzanie aplikacjami:
    • Spakuj raz, wdróż w dowolnym miejscu: pakowanie aplikacji w formacie ZIP, MSI (zainstalowany pakiet Microsoft) lub formaty EXE i zarządzaj nimi centralnie w galerii obliczeń platformy Azure.
    • Kontrola wersji: wdróż najnowszą lub określoną wersję, utrzymując wiele wersji każdej aplikacji.
  • Bezproblemowe udostępnianie i kontrola dostępu
    • Tenant-Wide Udostępnianie: Aplikacje można udostępniać w zespołach lub w całej organizacji (dzierżawcy).
    • Zintegrowana kontrola dostępu oparta na rolach: kontrolowanie dostępu do publikowania i wdrażania przy użyciu kontroli dostępu na Role-Based podstawie ról (RBAC) platformy Azure.
  • Niezawodne i dostosowywalne wdrożenia
    • Indywidualna kontrola aplikacji: instaluj, aktualizuj lub usuwaj aplikacje niezależnie — nie trzeba odtwarzać obrazów maszyn wirtualnych.
    • Operacje dostosowywalne: dostosowywanie operacji instalacji, aktualizacji i usuwania dla aplikacji, w tym obsługi ponownego uruchamiania.
    • Built-In Obsługa awarii: Zapewnij odporność wdrożeń przez powiązanie awarii aplikacji maszyny wirtualnej z awarią maszyny wirtualnej.
  • Skalowalna i Low-Latency Dystrybucja
    • Replikacja globalna i Intra-Region: Automatyczne replikowanie aplikacji między regionami oraz w ich obrębie w celu zmniejszenia opóźnień i zwiększenia odporności — nie ma potrzeby korzystania z AzCopy ani przeprowadzania ręcznego transferu.
    • Zoptymalizowane pod kątem scenariuszy High-Scale: osiągnij niskie opóźnienie tworzenia nawet podczas wdrożeń na dużą skalę.
  • Zabezpieczanie i zgodność według projektu
    • Wymuszanie oparte na zasadach: użyj usługi Azure Policy, aby wymusić obecność i konfigurację aplikacji w całej flocie.
    • Bezpieczne wdrożenia: unikaj pobierania internetowego i złożonych konfiguracji linków prywatnych, które nie są idealne dla zablokowanych lub bezpiecznych środowisk.
  • Obsługa szerokiej platformy
    • Maszyny wirtualne i zestawy skalowania: wdróż na poszczególnych maszynach wirtualnych, elastyczne zestawy skalowania lub jednolite zestawy skalowania z pełną obsługą.
    • Obsługa obiektów blokowych w Azure: Wydajna obsługa dużych pakietów aplikacji (do 2 GB) przy użyciu blokowych obiektów platformy Azure, które umożliwiają przesyłanie w segmentach i strumieniowanie w tle.

Aplikacje maszyn wirtualnych i zasób wersji aplikacji maszyn wirtualnych

Zasób aplikacji maszyny wirtualnej definiuje następujące elementy dotyczące aplikacji maszyny wirtualnej:

  • Galeria obliczeń platformy Azure, w której jest przechowywana aplikacja maszyny wirtualnej
  • Nazwa aplikacji
  • Obsługiwany typ systemu operacyjnego, taki jak Linux lub Windows
  • Opis aplikacji maszyny wirtualnej

Wersje aplikacji maszyny wirtualnej to zasób możliwy do wdrożenia. Wersje są definiowane z następującymi właściwościami:

  • Numer wersji
  • Łączenie z plikiem pakietu aplikacji na koncie magazynu
  • Zainstaluj ciąg, aby prawidłowo zainstalować aplikację
  • Usuń ciąg, aby prawidłowo usunąć aplikację
  • Zaktualizuj ciąg, aby poprawnie zaktualizować aplikację VM do nowszej wersji
  • Nazwa pliku pakietu do użycia podczas pobierania pakietu na maszynę wirtualną.
  • Nazwa pliku konfiguracji, która ma być używana do konfigurowania aplikacji na maszynie wirtualnej
  • Link do pliku konfiguracji aplikacji maszyny wirtualnej, który można dołączyć pliki licencji
  • Data zakończenia użytkowania. Daty zakończenia wsparcia są informacyjne; nadal możesz wdrożyć wersje aplikacji maszyny wirtualnej po upływie tej daty.
  • Wyklucz z najnowszej wersji. Możesz zachować możliwość użycia wersji jako najnowszej wersji aplikacji.
  • Regiony docelowe replikacji
  • Liczba replik na region

{
  "$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 (e.g., 1.0.0)"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "West US"
    },
    "supportedOSType": {
      "type": "string",
      "allowedValues": ["Windows", "Linux"]
    },
    "endOfLifeDate": {
      "type": "string"
    },
    "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. E.g. echo 'Installing application...'"
      }
    },
    "updateScript": {
      "type": "string",
      "metadata": {
        "description": "Optional. Script to run to update the application. E.g. echo 'Updating application...'"
      }
    },
    "removeScript": {
      "type": "string",
      "metadata": {
        "description": "Optional. Script to run to delete the application. E.g. 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')]"
      }
    }
  ]
}

Koszt

Za korzystanie z pakietów aplikacji maszyny wirtualnej nie są naliczane dodatkowe opłaty, ale są naliczane opłaty za następujące zasoby:

  • Koszty magazynowania przechowywania każdego pakietu i wszystkich replik.
  • Opłaty za ruch wychodzący sieci za replikację pierwszej wersji obrazu z regionu źródłowego do zreplikowanych regionów. Kolejne repliki są obsługiwane w regionie, więc nie ma dodatkowych opłat.

Aby uzyskać więcej informacji na temat ruchu wychodzącego sieci, zobacz Cennik przepustowości.

Szczegóły techniczne

Zagadnienia i bieżące limity

  • Maksymalnie 10 replik na region: Podczas tworzenia wersji aplikacji maszyny wirtualnej maksymalna liczba replik na region wynosi 10 zarówno dla stronicowego bloba, jak i bloba blokowego.

  • Magazyn z dostępem publicznym i identyfikatorem URI SAS z uprawnieniami do odczytu: Konto magazynu musi mieć dostęp na poziomie publicznym i używać identyfikatora URI SAS z uprawnieniami do odczytu, ponieważ inne poziomy ograniczeń powodują niepowodzenie wdrożeń. Tokeny sygnatury dostępu współdzielonego można pominąć, publikując artefakt na koncie magazynu, zezwalając na dostęp anonimowy.

  • Ręczne ponawianie prób w przypadku instalacji, które zakończyły się niepowodzeniem: obecnie jedynym sposobem ponawiania próby nieudanej instalacji jest usunięcie aplikacji z profilu, a następnie dodanie jej z powrotem.

  • Maksymalnie 25 aplikacji na maszynę wirtualną: maksymalnie 25 aplikacji można wdrożyć na jednej maszynie wirtualnej.

  • Rozmiar aplikacji 2 GB: maksymalny rozmiar pliku aplikacji mediaLink to 2 GB. Maksymalny rozmiar pliku to defaultConfigurationLink 1 GB.

  • Wymaga agenta maszyny wirtualnej: agent maszyny wirtualnej musi istnieć na maszynie wirtualnej i mieć możliwość odbierania stanów celu.

  • Pojedyncza wersja aplikacji na maszynę wirtualną: na maszynie wirtualnej można wdrożyć tylko jedną wersję danej aplikacji.

  • Operacje przenoszenia nie są obecnie obsługiwane: Przenoszenie maszyn wirtualnych ze skojarzonymi aplikacjami maszyn wirtualnych między grupami zasobów nie jest obecnie obsługiwane.

Uwaga

W przypadku galerii obliczeń platformy Azure i aplikacji maszyn wirtualnych sygnatury dostępu współdzielonego magazynu można usunąć po replikacji. Jednak każda kolejna operacja aktualizacji wymaga prawidłowego SAS.

Pobieranie katalogu na maszynie wirtualnej

Lokalizacja pobierania pakietu aplikacji i pliki konfiguracji to:

  • 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>

Polecenia instalacji/aktualizacji/usuwania powinny być zapisywane przy założeniu, że pakiet aplikacji i plik konfiguracji znajdują się w bieżącym katalogu.

Nadawanie nazwy plikom

Gdy plik aplikacji zostanie pobrany na maszynę wirtualną, nazwa pliku zostanie zmieniona na "MyVmApp" i nie ma rozszerzenia pliku (np. .exe, .msi). Maszyna wirtualna nie zna oryginalnej nazwy i rozszerzenia pliku .

Oto kilka alternatyw, aby nawigować po tym problemie:

Skrypt można zmodyfikować tak, aby zawierał polecenie zmiany nazwy pliku przed wykonaniem:

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

Możesz również użyć właściwości (i odpowiadającej packageFileNameconfigFileNamejej ), aby poinstruować nas, co należy zmienić nazwę pliku. Na przykład ustawienie go na "MyApp.exe" powoduje, że skrypt instalacji jest następujący.

MyAppe.exe /S

Napiwek

Jeśli twój obiekt blob jest pierwotnie nazwany „myApp.exe” zamiast „myapp”, wtedy skrypt działa bez konieczności ustawiania właściwości packageFileName.

Interpreter poleceń

Domyślne interpretery poleceń to:

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

Można użyć innego interpretera, takiego jak Chocolatey lub PowerShell, o ile jest on zainstalowany na maszynie, wywołując plik wykonywalny i przekazując do niego polecenie. Aby na przykład uruchomić polecenie w programie PowerShell w systemie Windows zamiast polecenia cmd, możesz przekazać polecenie powershell.exe -Command '<powershell commmand>'

Jak są obsługiwane aktualizacje

Podczas aktualizowania wersji aplikacji na maszynie wirtualnej lub w usłudze Virtual Machine Scale Sets używane jest polecenie aktualizacji podane podczas wdrażania. Jeśli zaktualizowana wersja nie ma polecenia aktualizacji, bieżąca wersja zostanie usunięta i zostanie zainstalowana nowa wersja.

Polecenia aktualizacji powinny być zapisywane z oczekiwaniami, że może być aktualizowana z dowolnej starszej wersji aplikacji maszyny wirtualnej.

Traktuj niepowodzenie jako niepowodzenie wdrożenia

Rozszerzenie aplikacji maszyny wirtualnej zawsze zwraca sukces, niezależnie od tego, czy jakakolwiek aplikacja maszyny wirtualnej zakończyła się niepowodzeniem podczas instalowania, aktualizowania lub usuwania. Rozszerzenie aplikacji maszyny wirtualnej zgłasza stan rozszerzenia tylko jako błąd, gdy występuje problem z rozszerzeniem lub podstawową infrastrukturą. To zachowanie jest wyzwalane przez flagę "traktuj niepowodzenie jako niepowodzenie wdrożenia", która jest domyślnie ustawiona na $false wartość i może zostać zmieniona na $true. Flagę niepowodzenia można skonfigurować w programie PowerShell lub interfejsie wiersza polecenia.

Tworzenie aplikacji maszyn wirtualnych w systemie Linux

Aby utworzyć aplikację maszyny wirtualnej, potrzebujesz pakietu aplikacji i skryptów, aby prawidłowo zainstalować, zaktualizować i usunąć aplikację.
Aplikacje innych firm dla systemu Linux można spakować na kilka sposobów. Przyjrzyjmy się, jak obsługiwać tworzenie poleceń instalacji dla niektórych z najbardziej typowych.

pliki .tar i .gz

Te pliki są skompresowane archiwami i można je wyodrębnić do żądanej lokalizacji. Sprawdź instrukcje instalacji oryginalnego pakietu, aby w razie potrzeby wyodrębnienia ich do określonej lokalizacji. Jeśli plik .tar.gz zawiera kod źródłowy, zapoznaj się z instrukcjami dotyczącymi sposobu instalowania pakietu ze źródła.

Przykład instalacji polecenia instalacji golang na maszynie z systemem Linux:

sudo tar -C /usr/local -xzf go_linux

Przykładowe polecenie usuwania:

sudo rm -rf /usr/local/go

Tworzenie pakietów aplikacji przy użyciu pakietów .deb, .rpmi innych pakietów specyficznych dla platformy dla maszyn wirtualnych z ograniczonym dostępem do Internetu

Poszczególne pakiety można pobrać dla menedżerów pakietów specyficznych dla platformy, ale zwykle nie zawierają wszystkich zależności. W przypadku tych plików należy również uwzględnić wszystkie zależności w pakiecie aplikacji lub pobrać zależności przez menedżera pakietów systemowych za pośrednictwem repozytoriów dostępnych dla maszyny wirtualnej. Jeśli pracujesz z maszyną wirtualną z ograniczonym dostępem do Internetu, musisz spakować wszystkie zależności samodzielnie.

Ustalenie zależności może być nieco trudne. Istnieją narzędzia innych firm, które mogą wyświetlać całe drzewo zależności.

W systemie Ubuntu można uruchomić polecenie sudo apt show <package_name> | grep Depends , aby wyświetlić wszystkie pakiety zainstalowane podczas wykonywania sudo apt-get install <packge_name> polecenia. Następnie możesz użyć tych danych wyjściowych, aby pobrać wszystkie .deb pliki w celu utworzenia archiwum, którego można użyć jako pakietu aplikacji.

Aby utworzyć pakiet aplikacji maszyny wirtualnej na potrzeby instalowania programu PowerShell w systemie Ubuntu, wykonaj następujące kroki:

  1. Uruchom następujące polecenia, aby włączyć repozytorium pobierania programu PowerShell i zidentyfikować zależności pakietów na nowej maszynie wirtualnej z systemem 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. Sprawdź dane wyjściowe wiersza Depends , aby wyświetlić listę następujących pakietów:
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.
  1. Pobierz każde z tych plików przy użyciu i sudo apt-get download <package_name> utwórz skompresowane archiwum tar ze wszystkimi plikami.
  • 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
  1. To archiwum tar jest plikiem pakietu aplikacji.
  • Polecenie instalacji w tym przypadku to:
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
  • Polecenie remove to:
sudo apt remove powershell

Zamiast sudo apt autoremove jawnie próbować usunąć wszystkie zależności. Być może zainstalowano inne aplikacje z nakładającymi się zależnościami, a w takim przypadku jawne polecenie usuwania zakończy się niepowodzeniem.

Jeśli nie chcesz samodzielnie rozwiązywać zależności i apt można nawiązać połączenie z repozytoriami, możesz zainstalować aplikację przy użyciu tylko jednego .deb pliku i umożliwić apt obsługę zależności.

Przykładowe polecenie instalacji:

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

Tworzenie aplikacji maszyn wirtualnych w systemie Windows

Większość aplikacji innych firm w systemie Windows jest dostępna jako instalatory .exe lub .msi. Niektóre są również dostępne jako wyodrębnianie i uruchamianie plików zip. Przyjrzyjmy się najlepszym rozwiązaniom dla każdego z nich.

Instalator .exe

Pliki wykonywalne instalatora zazwyczaj uruchamiają interfejs użytkownika i wymagają od kogoś wyboru za pośrednictwem interfejsu użytkownika. Jeśli instalator obsługuje parametr trybu dyskretnego, powinien zostać uwzględniony w ciągu instalacji.

Cmd.exe oczekuje się również, że pliki wykonywalne mają rozszerzenie .exe, więc należy zmienić nazwę pliku na .exe rozszerzenie .

Jeśli chcę utworzyć pakiet aplikacji maszyny wirtualnej dla myApp.exe, która jest dostarczana jako plik wykonywalny, a moja aplikacja maszyny wirtualnej nosi nazwę "myApp", napiszę polecenie, zakładając, że pakiet aplikacji znajduje się w bieżącym katalogu:

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

Jeśli plik wykonywalny instalatora nie obsługuje parametru odinstalowania, czasami można wyszukać rejestr na maszynie testowej, aby dowiedzieć się, gdzie znajduje się odinstalowywanie.

W rejestrze ciąg dezinstalacji jest przechowywany w Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString pliku , więc użyję zawartości jako mojego polecenia remove:

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

Instalator .msi

W przypadku wykonywania wiersza .msi polecenia instalatorów polecenia do zainstalowania lub usunięcia aplikacji należy użyć polecenia msiexec. msiexec Zazwyczaj działa jako własny oddzielny proces i cmd nie czeka na jego ukończenie, co może prowadzić do problemów podczas instalowania więcej niż jednej aplikacji maszyny wirtualnej. Polecenia start można użyć z poleceniem msiexec , aby upewnić się, że instalacja zostanie ukończona przed zwróceniem polecenia. Na przykład:

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

Przykładowe polecenie usuwania:

start /wait %windir%\\system32\\msiexec.exe /x myapp /quiet /forcerestart /log myapp_uninstall.log

start Zazwyczaj polecenie jest wywoływane w ramach skryptu wsadowego. Jeśli jest używany z parametrem /wait , skrypt wywołujący zostanie wstrzymany do momentu zakończenia wywoływanego procesu. Po zakończeniu skrypt wsadowy sprawdzi zmienną errorlevel ustawioną start przez polecenie i zakończy działanie w następujący sposób:

start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
if %errorlevel% neq 0 exit /b %errorlevel%
...

Spakowane pliki

W przypadku .zip lub innych spakowanych plików zmień nazwę i rozpakuj zawartość pakietu aplikacji do żądanego miejsca docelowego.

Przykładowe polecenie instalacji:

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

Przykładowe polecenie usuwania:

rmdir /S /Q C:\\myapp

Rozwiązywanie problemów z aplikacjami maszyn wirtualnych

Aby dowiedzieć się, czy określona aplikacja maszyny wirtualnej została pomyślnie dodana do wystąpienia maszyny wirtualnej, sprawdź komunikat rozszerzenia aplikacji maszyny wirtualnej.

Aby dowiedzieć się więcej na temat uzyskiwania stanu rozszerzeń maszyn wirtualnych, zobacz Virtual machine extensions and features for Linux and Virtual machine extensions and features for Windows (Rozszerzenia i funkcje maszyn wirtualnych dla systemu Windows).

Aby uzyskać stan rozszerzeń maszyn wirtualnych, użyj polecenia Get-AzVM:

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

Aby uzyskać stan rozszerzeń zestawu skalowania, użyj polecenia Get-AzVMSSS:

$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

Komunikaty o błędach

Wiadomość opis
Bieżąca wersja aplikacji maszyny wirtualnej {name} została przestarzała w dniu {date}. Próbowano wdrożyć wersję aplikacji maszyny wirtualnej, która została już przestarzała. Spróbuj użyć latest zamiast określić określoną wersję.
Bieżąca wersja aplikacji maszyny wirtualnej {name} obsługuje system operacyjny {OS}, a bieżący system operacyjny OSDisk to {OS}. Próbowano wdrożyć aplikację systemu Linux w wystąpieniu systemu Windows lub odwrotnie.
Przekroczono maksymalną liczbę aplikacji maszyn wirtualnych (max=5, current={count}). Użyj mniejszej liczby aplikacji i spróbuj ponownie wysłać żądanie. Obecnie obsługujemy tylko pięć aplikacji maszyn wirtualnych na maszynę wirtualną lub zestaw skalowania.
Określono więcej niż jedną aplikację maszyny wirtualnej o tym samym elemencie PackageReferenceId. Ta sama aplikacja została określona więcej niż raz.
Subskrypcja nie ma autoryzacji dostępu do tego obrazu. Subskrypcja nie ma dostępu do tej wersji aplikacji.
Konto magazynu w argumentach nie istnieje. Brak aplikacji dla tej subskrypcji.
Obraz platformy {image} nie jest dostępny. Sprawdź, czy wszystkie pola w profilu magazynu są poprawne. Aby uzyskać więcej informacji na temat informacji o profilu magazynu, zobacz https://aka.ms/storageprofile. Aplikacja nie istnieje.
Obraz galerii {image} nie jest dostępny w regionie {region}. Skontaktuj się z właścicielem obrazu, aby przeprowadzić replikację do tego regionu lub zmienić żądany region. Wersja aplikacji galerii istnieje, ale nie została ona zreplikowana do tego regionu.
Sygnatura dostępu współdzielonego jest nieprawidłowa dla identyfikatora URI źródła {uri}. Wystąpił Forbidden błąd z magazynu podczas próby pobrania informacji o adresie URL (mediaLink lub defaultConfigurationLink).
Obiekt blob, do których odwołuje się źródłowy identyfikator URI {URI}, nie istnieje. Obiekt blob podany dla właściwości mediaLink lub defaultConfigurationLink nie istnieje.
Nie można uzyskać dostępu do adresu URL wersji aplikacji galerii {url} z powodu następującego błędu: nie można odnaleźć nazwy zdalnej. Upewnij się, że obiekt blob istnieje i że jest on publicznie dostępny lub jest adresem URL sygnatury dostępu współdzielonego z uprawnieniami do odczytu. Najbardziej prawdopodobnym przypadkiem jest to, że nie podano identyfikatora URI sygnatury dostępu współdzielonego z uprawnieniami do odczytu.
Nie można uzyskać dostępu do adresu URL wersji aplikacji galerii {url} z powodu następującego błędu: {opis błędu}. Upewnij się, że obiekt blob istnieje i że jest on publicznie dostępny lub jest adresem URL sygnatury dostępu współdzielonego z uprawnieniami do odczytu. Wystąpił problem z udostępnionym obiektem blob magazynu. Opis błędu zawiera więcej informacji.
Operacja {operationName} nie jest dozwolona w aplikacji {application}, ponieważ została oznaczona do usunięcia. Możesz ponowić próbę wykonania operacji usuwania (lub poczekać na ukończenie trwającej operacji). Spróbuj zaktualizować obecnie usuniętą aplikację.
Wartość {value} parametru "galleryApplicationVersion.properties.publishingProfile.replicaCount" jest poza zakresem. Wartość musi należeć do jednej do trzech, włącznie. Tylko między jedną i trzema replikami są dozwolone dla wersji aplikacji maszyny wirtualnej.
Zmiana właściwości "galleryApplicationVersion.properties.publishingProfile.manageActions.install" nie jest dozwolona. (Lub aktualizuj, usuń) Nie można zmienić żadnej akcji zarządzania w istniejącej aplikacji vmApplication. Należy utworzyć nową wersję aplikacji vmApplication.
Zmiana właściwości " galleryApplicationVersion.properties.publishingProfile.settings.packageFileName ' nie jest dozwolona. (Lub configFileName) Nie można zmienić żadnych ustawień, takich jak nazwa pliku pakietu lub nazwa pliku konfiguracji. Należy utworzyć nową wersję aplikacji vmApplication.
Obiekt blob, do których odwołuje się identyfikator URI źródła {URI}, jest zbyt duży: rozmiar = {size}. Maksymalny dozwolony rozmiar obiektu blob to "1 GB". Maksymalny rozmiar obiektu blob, do który odwołuje się mediaLink lub defaultConfigurationLink, wynosi obecnie 1 GB.
Obiekt blob, do których odwołuje się źródłowy identyfikator URI {URI}, jest pusty. Odwołano się do pustego obiektu blob.
Typ obiektu blob {type} nie jest obsługiwany dla operacji {operation}. Obsługiwane są tylko stronicowe obiekty blob i blokowe obiekty blob. Usługa VmApplications obsługuje tylko stronicowe obiekty blob i blokowe obiekty blob.
Sygnatura dostępu współdzielonego jest nieprawidłowa dla identyfikatora URI źródła {uri}. Identyfikator URI sygnatury dostępu współdzielonego podany dla elementu mediaLink lub defaultConfigurationLink nie jest prawidłowym identyfikatorem URI sygnatury dostępu współdzielonego.
Nie można określić {region} w regionach docelowych, ponieważ w subskrypcji brakuje wymaganej funkcji {featureName}. Zarejestruj subskrypcję przy użyciu wymaganej funkcji lub usuń region z listy regionów docelowych. Aby można było używać usługi VmApplications w niektórych regionach z ograniczeniami, musisz mieć flagę funkcji zarejestrowaną dla tej subskrypcji.
Regiony profilu publikowania wersji obrazu galerii {regions} muszą zawierać lokalizację wersji obrazu {location}. Lista regionów replikacji musi zawierać lokalizację, w której znajduje się wersja aplikacji.
Zduplikowane regiony nie są dozwolone w docelowych regionach publikowania. Regiony publikowania mogą nie mieć duplikatów.
Zasoby wersji aplikacji galerii obecnie nie obsługują szyfrowania. Właściwość szyfrowania dla regionów docelowych nie jest obsługiwana w przypadku aplikacji maszyn wirtualnych
Nazwa jednostki nie jest zgodna z nazwą w adresie URL żądania. Wersja aplikacji galerii określona w adresie URL żądania jest niezgodna z wersją określoną w treści żądania.
Nazwa wersji aplikacji galerii jest nieprawidłowa. Nazwa wersji aplikacji powinna być zgodna z ciągiem Major(int32). Pomniejszy(int32). Format patch(int32), gdzie int wynosi od 0 do 2 147 483 647 (włącznie). Na przykład 1.0.0, 2018.12.1 itp. Wersja aplikacji galerii musi być zgodna z określonym formatem.

Następne kroki