Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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. |
Najważniejsze korzyści:
-
Scentralizowane i elastyczne zarządzanie aplikacjami:
- Spakuj wszystko raz, wdróż w dowolnym miejscu: aplikacje pakietu (windows/linux), skrypty lub pliki jako aplikacje maszyn wirtualnych. Następnie wdróż je na maszynach wirtualnych platformy Azure lub zestawach skalowania maszyn wirtualnych i zarządzaj nimi centralnie w galerii zasobów obliczeniowych platformy Azure. Aplikacje lub pliki mogą znajdować się w .zip, .msi, .exe, .tar.gz, .deb, rpm, .sh lub innym formacie.
- 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.
Tworzenie zasobu wersji aplikacji maszyn wirtualnych i aplikacji maszyn wirtualnych
Aplikacja maszyny wirtualnej jest przechowywana w galerii zasobów obliczeniowych platformy Azure. Zasób aplikacji maszyny wirtualnej definiuje następujące elementy dotyczące aplikacji maszyny wirtualnej:
| Majątek | opis | Ograniczenia |
|---|---|---|
| nazwa | Nazwa aplikacji | Maksymalna długość 117 znaków. Dozwolone znaki to wielkie lub małe litery, cyfry, łącznik(-), kropka (.), podkreślenie (_). Nazwy nie mogą kończyć się kropką(.). |
| supportedOSType | Definiowanie obsługiwanego typu systemu operacyjnego | "Linux" lub "Windows" |
| endOfLifeDate | Data przyszłego zakończenia życia aplikacji. Data dotyczy tylko odwołania i nie jest wymuszana. | |
| opis | Opcjonalny. Opis aplikacji maszyny wirtualnej | |
| Eula | Opcjonalny. Odwołanie do umowy licencyjnej użytkownika końcowego (EULA) | |
| privacyStatementUri | Opcjonalny. Odwołanie do zasad zachowania poufności informacji dla aplikacji. | |
| releaseNoteUri | Opcjonalny. Odwołanie do informacji o wersji aplikacji. |
Wersje aplikacji maszyny wirtualnej to zasoby możliwe do wdrożenia w ramach zasobu aplikacji maszyny wirtualnej. Wersje są definiowane z następującymi właściwościami:
| Majątek | opis | Ograniczenia |
|---|---|---|
| lokalizacja | Lokalizacja źródłowa wersji aplikacji maszyny wirtualnej. | Prawidłowy region świadczenia usługi Azure |
| source/mediaLink | Łączenie z plikiem pakietu aplikacji na koncie magazynu | Prawidłowy i istniejący adres URL magazynu |
| source/defaultConfigurationLink | Opcjonalny. Link do pliku konfiguracji aplikacji maszyny wirtualnej. Można go zastąpić w czasie wdrażania. | Prawidłowy i istniejący adres URL magazynu |
| manageActions/install | Zainstaluj skrypt jako ciąg, aby prawidłowo zainstalować aplikację | Prawidłowe polecenie dla danego systemu operacyjnego w formacie ciągu. |
| manageActions/remove | Usuń skrypt jako ciąg, aby prawidłowo usunąć aplikację | Prawidłowe polecenie dla danego systemu operacyjnego w formacie ciągu |
| manageActions/update | Opcjonalny. Zaktualizuj skrypt jako ciąg, aby poprawnie zaktualizować aplikację maszyny wirtualnej do nowszej wersji. | Prawidłowe polecenie dla danego systemu operacyjnego w formacie ciągu |
| targetRegions/name | Nazwa regionów docelowych, do których mają być replikowane. Zwiększa odporność na awarie regionów i tworzy opóźnienie. | Prawidłowy region świadczenia usługi Azure |
| targetRegions/regionalReplicaCount | Opcjonalny. Liczba replik do utworzenia w regionie. Poprawia obsługę obciążenia i tworzy opóźnienie. Wartość domyślna to 1. | Liczba całkowita z zakresu od 1 do 3 włącznie |
| replicaCount | Opcjonalny. Definiuje liczbę replik w każdym regionie. Ma zastosowanie, jeśli parametr regionalReplicaCount nie jest zdefiniowany. Zwiększa odporność na awarie regionu lub klastra i tworzy opóźnienie podczas dużej skali. | Liczba całkowita z zakresu od 1 do 3 włącznie. |
| endOfLifeDate | Opcjonalny. Data przyszłego zakończenia życia wersji aplikacji. Ta właściwość dotyczy tylko odwołania klienta i nie jest wymuszana. | Prawidłowa data przyszłej |
| excludeFromLatest | Wyklucz wersję używaną jako najnowsza wersja aplikacji, gdy słowo kluczowe "latest" jest używane w pliku applicationProfile. | |
| storageAccountType | Opcjonalny. Typ konta magazynu do użycia w każdym regionie do przechowywania pakietu aplikacji. Wartość domyślna to Standard_LRS. | Ta właściwość nie jest aktualizowalna. |
| safetyProfile/allowDeletionOfReplicatedLocations | Opcjonalny. Wskazuje, czy ta wersja obrazu galerii z replikowanych regionów jest dozwolona. | |
| settings/packageFileName | Nazwa pliku pakietu do użycia podczas pobierania pakietu na maszynę wirtualną. | Jest to ograniczone do 4096 znaków. |
| settings/configFileName | Nazwa pliku konfiguracji do użycia podczas pobierania konfiguracji do maszyny wirtualnej. | Jest to ograniczone do 4096 znaków. |
| settings/scriptBehaviorAfterReboot | Opcjonalny. Akcja, która ma zostać podjęta w celu zainstalowania, zaktualizowania lub usunięcia aplikacji galerii po ponownym uruchomieniu maszyny wirtualnej. |
{
"$schema": "https://schema.management.azure.com/schemas/2020-06-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"galleryName": {
"type": "string"
},
"applicationName": {
"type": "string"
},
"versionName": {
"type": "string",
"metadata": {
"description": "Must follow the format: major.minor.patch (Example: 1.0.0)"
}
},
"location": {
"type": "string",
"defaultValue": "West US"
},
"supportedOSType": {
"type": "string",
"allowedValues": ["Windows", "Linux"]
},
"endOfLifeDate": {
"type": "string",
"metadata": {
"description": "Optional. This property is for information only and doesn't block app deployment."
}
},
"description": {
"type": "string",
"defaultValue": "Description of the application"
},
"eula": {
"type": "string",
"defaultValue": ""
},
"privacyStatementUri": {
"type": "string",
"defaultValue": ""
},
"releaseNoteUri": {
"type": "string",
"defaultValue": ""
},
"mediaLink": {
"type": "string"
},
"configLink": {
"type": "string"
},
"appConfigFileName": {
"type": "string"
},
"appPackageFileName": {
"type": "string"
},
"replicaRegion1": {
"type": "string",
"defaultValue": "East US"
},
"replicaRegion2": {
"type": "string",
"defaultValue": "South Central US"
},
"installScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to install the application. Example: echo 'Installing application...'"
}
},
"updateScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to update the application. Example: echo 'Updating application...'"
}
},
"removeScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to delete the application. Example: echo 'Deleting application...'"
}
},
"storageAccountType": {
"type": "string",
"allowedValues": ["PremiumV2_LRS", "Premium_LRS", "Standard_LRS", "Standard_ZRS"],
"defaultValue": "Standard_LRS"
}
},
"resources": [
{
"type": "Microsoft.Compute/galleries",
"apiVersion": "2024-03-03",
"name": "[parameters('galleryName')]",
"location": "[parameters('location')]",
"properties": {
"identifier": {}
}
},
{
"type": "Microsoft.Compute/galleries/applications",
"apiVersion": "2024-03-03",
"name": "[format('{0}/{1}', parameters('galleryName'), parameters('applicationName'))]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries', parameters('galleryName'))]"
],
"properties": {
"supportedOSType": "[parameters('supportedOSType')]",
"endOfLifeDate": "[parameters('endOfLifeDate')]",
"description": "[parameters('description')]",
"eula": "[if(equals(parameters('eula'), ''), json('null'), parameters('eula'))]",
"privacyStatementUri": "[if(equals(parameters('privacyStatementUri'), ''), json('null'), parameters('privacyStatementUri'))]",
"releaseNoteUri": "[if(equals(parameters('releaseNoteUri'), ''), json('null'), parameters('releaseNoteUri'))]"
}
},
{
"type": "Microsoft.Compute/galleries/applications/versions",
"apiVersion": "2024-03-03",
"name": "[format('{0}/{1}/{2}', parameters('galleryName'), parameters('applicationName'), parameters('versionName'))]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries/applications', parameters('galleryName'), parameters('applicationName'))]"
],
"properties": {
"publishingProfile": {
"source": {
"mediaLink": "[parameters('mediaLink')]",
"defaultConfigurationLink": "[parameters('configLink')]"
},
"manageActions": {
"install": "[parameters('installScript')]",
"remove": "[parameters('removeScript')]",
"update": "[parameters('updateScript')]"
},
"settings": {
"scriptBehaviorAfterReboot": "Rerun",
"configFileName": "[parameters('appConfigFileName')]",
"packageFileName": "[parameters('appPackageFileName')]"
},
"targetRegions": [
{
"name": "[parameters('location')]",
"regionalReplicaCount": 3,
"storageAccountType": "[parameters('storageAccountType')]"
},
{
"name": "[parameters('replicaRegion1')]",
"regionalReplicaCount": 1,
"storageAccountType": "[parameters('storageAccountType')]"
},
{
"name": "[parameters('replicaRegion2')]"
},
],
"excludeFromLatest": false,
"replicaCount": 2,
"storageAccountType": "[parameters('storageAccountType')]"
},
"safetyProfile": {
"allowDeletionOfReplicatedLocations": true
},
"endOfLifeDate": "[parameters('endOfLifeDate')]"
}
}
]
}
Wdrażanie aplikacji maszyn wirtualnych platformy Azure
Po opublikowaniu wersji aplikacji maszyny wirtualnej w usłudze Azure Compute Gallery można wdrożyć wersję w usłudze Azure Virtual Machines (VM) i usłudze Azure Virtual Machine Scale Sets.
W obszarze Maszyna wirtualna applicationProfile platformy Azure i zestawy skalowania maszyn wirtualnych zdefiniowano następujące elementy:
| Majątek | opis | Ograniczenia |
|---|---|---|
| galleryApplications | Aplikacje galerii do wdrożenia | |
| Identyfikator pakietu referencyjnego | Odwołanie do wersji aplikacji do wdrożenia | Prawidłowa dokumentacja wersji aplikacji |
| Odniesienie do konfiguracji | Opcjonalny. Pełny adres URL obiektu blob magazynu zawierającego konfigurację dla tego wdrożenia. Spowoduje to zastąpienie dowolnej wartości podanej wcześniej dla parametru defaultConfiguration. | Prawidłowa dokumentacja obiektu blob magazynu |
| porządek | Opcjonalny. Kolejność wdrażania aplikacji | Prawidłowa liczba całkowita |
| traktujAwarięJakoAwarięWdrożenia | Opcjonalny. Oznaczanie niepowodzenia aplikacji jako niepowodzenia wdrażania maszyny wirtualnej na potrzeby obsługi niepowodzeń | Prawda czy Fałsz |
Pole zamówienia może służyć do określania zależności między aplikacjami. Reguły kolejności są następujące:
| Sprawa | Znaczenie instalacji | Znaczenie błędu |
|---|---|---|
| Nie określono zamówienia | Aplikacje nieurządzane są instalowane po uporządkowanych aplikacjach. Nie ma gwarancji kolejności instalacji między nieurządkowanych aplikacji. | Błędy instalacji innych aplikacji, jeśli są uporządkowane lub nieurządzone, nie wpływają na instalację nieurządkowanych aplikacji. |
| Zduplikowane wartości kolejności | Aplikacja jest instalowana w dowolnej kolejności w porównaniu z innymi aplikacjami z tą samą kolejnością. Wszystkie aplikacje tego samego zamówienia są instalowane po tych z niższymi zamówieniami i przed tymi z wyższymi zamówieniami. | Jeśli instalacja poprzedniej aplikacji o niższej kolejności nie powiodła się, nie ma aplikacji z tą kolejnością instalacji. Jeśli instalacja jakiejkolwiek aplikacji z tą kolejnością nie powiedzie się, nie ma aplikacji z instalacją wyższego zamówienia. |
| Zwiększanie zamówień | Aplikacja zostanie zainstalowana po tych z niższymi zamówieniami i przed tymi z wyższymi zamówieniami. | Jeśli instalacja poprzedniej aplikacji o niższej kolejności nie powiodła się, ta aplikacja nie zostanie zainstalowana. Jeśli instalacja tej aplikacji nie powiedzie się, żadna aplikacja nie ma zainstalowanej wyższej kolejności. |
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmssName": {
"type": "string"
},
"location": {
"type": "string"
},
"subscriptionId": {
"type": "string"
},
"resourceGroupName": {
"type": "string"
},
"galleryName": {
"type": "string"
},
"applicationName1": {
"type": "string"
},
"applicationVersion1": {
"type": "string",
"defaultValue": "latest"
},
"configurationReference1": {
"type": "string",
"metadata": {
"description": "Optional path to configuration file from Storage Account. Overrides default configuration file."
}
},
"applicationName2": {
"type": "string"
},
"applicationVersion2": {
"type": "string",
"defaultValue": "latest"
}
},
"variables": {
"packageReferenceId1": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName1'), parameters('applicationVersion1'))]",
"packageReferenceId2": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName2'), parameters('applicationVersion2'))]"
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"apiVersion": "2024-03-03",
"name": "[parameters('vmssName')]",
"location": "[parameters('location')]",
"properties": {
"virtualMachineProfile": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "[variables('packageReferenceId1')]",
"configurationReference": "[parameters('configurationReference1')]",
"treatFailureAsDeploymentFailure": true
},
{
"order": 2,
"packageReferenceId": "[variables('packageReferenceId2')]",
"treatFailureAsDeploymentFailure": false
}
]
}
}
}
}
]
}
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.
Maksymalnie 300 wersji na region: podczas tworzenia wersji aplikacji maszyny wirtualnej można mieć do 300 wersji aplikacji na region.
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
mediaLinkto 2 GB. Maksymalny rozmiar pliku todefaultConfigurationLink1 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 do maszyny wirtualnej, nazwa pliku zostanie zmieniona na "MyVmApp" i nie ma rozszerzenia pliku (na przykład .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 obiekt blob jest pierwotnie nazwany jako "myApp.exe" zamiast "myapp", skrypt działa bez ustawiania packageFileName właściwości.
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.
Pakowanie i instalowanie 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:
- Uruchom następujące polecenia, aby umożliwić repozytorium pobieranie programu PowerShell i identyfikowanie 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
- 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.
- 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
- 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 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
- Dowiedz się, jak tworzyć i wdrażać pakiety aplikacji maszyn wirtualnych.
- Dowiedz się, jak zarządzać aplikacjami maszyn wirtualnych platformy Azure i usuwać je.