Udostępnij za pośrednictwem


Testowanie obrazu maszyny wirtualnej

W tym artykule opisano sposób testowania obrazu maszyny wirtualnej, aby upewnić się, że spełnia ona najnowsze wymagania dotyczące publikowania w witrynie Azure Marketplace.

Wdrażanie maszyny wirtualnej platformy Azure

Aby wdrożyć maszynę wirtualną z galerii obliczeń platformy Azure (wcześniej znanej jako galeria obrazów udostępnionych):

  1. Otwórz wersję obrazu galerii obliczeniowej platformy Azure.
  2. Wybierz pozycję Utwórz maszynę wirtualną.
  3. Podaj nazwę maszyny wirtualnej i wybierz pozycję Rozmiar maszyny wirtualnej.
  4. Wybierz pozycję Przejrzyj i utwórz. Po zakończeniu walidacji wybierz pozycję Utwórz.

Uwaga

Aby utworzyć maszynę wirtualną na podstawie pliku wirtualnego dysku twardego, wykonaj poniższe instrukcje w sekcji Łączenie narzędzia certyfikacji z obrazem maszyny wirtualnej lub Używanie programu PowerShell do korzystania z interfejsu API samodzielnego testowania.

Przed przesłaniem oferty maszyny wirtualnej wykonaj następujące kroki:

Uruchamianie walidacji

Istnieją dwa sposoby uruchamiania walidacji na wdrożonym obrazie.

Korzystanie z narzędzia do testowania certyfikacji dla platformy Azure Certified

Ważne

Aby uruchomić narzędzie do testowania certyfikacji, usługa zdalnego zarządzania systemem Windows musi być uruchomiona i skonfigurowana w systemie Windows. Umożliwia to dostęp do portu 5986. Aby uzyskać informacje, zobacz Instalacja i konfiguracja zarządzania zdalnego systemu Windows.

Pobieranie i uruchamianie narzędzia do testowania certyfikacji

Narzędzie do testowania certyfikacji dla platformy Azure certyfikowane działa na lokalnym komputerze z systemem Windows, ale testuje maszynę wirtualną z systemem Windows lub Linux opartą na platformie Azure. Potwierdza to, że obraz maszyny wirtualnej użytkownika może być używany z platformą Microsoft Azure oraz że zostały spełnione wskazówki i wymagania dotyczące przygotowywania dysku VHD.

  1. Pobierz i zainstaluj najnowsze narzędzie do testowania certyfikacji dla platformy Azure Certified.
  2. Otwórz narzędzie certyfikacji, a następnie wybierz pozycję Rozpocznij nowy test.
  3. Na ekranie Informacje o teście wprowadź nazwę testu dla przebiegu testu.
  4. Wybierz platformę dla maszyny wirtualnej— Windows Server (zezwalaj na port 5986 dla systemu Windows) lub Linux (zezwalaj na port 22 dla systemu Linux). Wybór platformy wpływa na pozostałe opcje.
  5. Jeśli maszyna wirtualna korzysta z tej usługi bazy danych, zaznacz pole wyboru Test dla usługi Azure SQL Database .

Łączenie narzędzia certyfikacji z obrazem maszyny wirtualnej

  1. Wybierz tryb uwierzytelniania SSH: uwierzytelnianie haseł lub uwierzytelnianie pliku klucza.

  2. W przypadku korzystania z uwierzytelniania opartego na hasłach wprowadź wartości nazwy DNS maszyny wirtualnej, nazwy użytkownika i hasła. Można również zmienić domyślny numer portu SSH.

    Przedstawia wybór informacji o teście maszyny wirtualnej.

  3. W przypadku korzystania z uwierzytelniania opartego na plikach wprowadź wartości dla nazwy DNS maszyny wirtualnej, nazwy użytkownika i lokalizacji klucza prywatnego. Możesz również dołączyć hasło lub zmienić domyślny numer portu SSH.

  4. Wprowadź w pełni kwalifikowaną nazwę DNS maszyny wirtualnej (na przykład MyVMName.Cloudapp.net).

  5. Wprowadź nazwę użytkownika i hasło.

    Przedstawia wybór nazwy użytkownika i hasła maszyny wirtualnej.

  6. Wybierz Dalej.

Uruchamianie testu certyfikacji

Po podaniu wartości parametrów obrazu maszyny wirtualnej w narzędziu certyfikacji wybierz pozycję Testuj połączenie, aby utworzyć prawidłowe połączenie z maszyną wirtualną. Po zweryfikowaniu połączenia wybierz przycisk Dalej , aby rozpocząć test. Po zakończeniu testu wyniki są wyświetlane w tabeli. W kolumnie Stan jest wyświetlana wartość (Pass/Fail/Warning) dla każdego testu. Jeśli którykolwiek z testów nie powiedzie się, obraz nie jest certyfikowany. W takim przypadku przejrzyj wymagania i komunikaty o błędach, wprowadź sugerowane zmiany i ponownie uruchom test.

Po zakończeniu testu automatycznego podaj dodatkowe informacje o obrazie maszyny wirtualnej na dwóch kartach ekranu Kwestionariusz, Ogólne oceny i Dostosowywanie jądra, a następnie wybierz przycisk Dalej.

Ostatni ekran umożliwia podanie dodatkowych informacji, takich jak informacje o dostępie do protokołu SSH dla obrazu maszyny wirtualnej z systemem Linux oraz wyjaśnienie ewentualnych niepowodzeń ocen, jeśli szukasz wyjątków.

Na koniec wybierz pozycję Generuj raport, aby pobrać wyniki testu i pliki dziennika dla wykonanych przypadków testowych wraz z odpowiedziami na kwestionariusz.

Uwaga

Niewielu wydawców ma scenariusze, w których maszyny wirtualne muszą być zablokowane, ponieważ mają oprogramowanie, takie jak zapory zainstalowane na maszynie wirtualnej. W takim przypadku pobierz narzędzie Certified Test Tool tutaj i prześlij raport w pomocy technicznej Centrum partnerskiego.

Używanie programu PowerShell do korzystania z interfejsu API samodzielnego testowania

W systemie operacyjnym Linux

Wywołaj interfejs API w programie PowerShell:

  1. Wygeneruj token dostępu.
  2. Wywołaj interfejs API za pomocą polecenia Invoke-WebRequest.
  3. Metoda to Post, a typ zawartości to JSON, jak pokazano w poniższym przykładzie kodu i przechwytywaniu ekranu.
  4. Określ parametry treści w formacie JSON.

Następujące polecenia generują token dostępu:

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/x-www-form-urlencoded")
$body = "grant_type=client_credentials&client_id=$clientId&client_secret=$clientSecret&resource=https%3A%2F%2Fmanagement.core.windows.net"
$response = Invoke-RestMethod "https://login.microsoftonline.com/$tenantId/oauth2/token" -Method 'POST' -Headers $headers -Body $body
$accessToken = $response.access_token

Przedstawia przykład ekranu generowania tokenu dostępu w programie PowerShell.

W tym przykładzie pokazano wywołanie programu PowerShell do interfejsu API (zezwalaj na port 22 podczas tworzenia maszyny wirtualnej):

$accesstoken = "token"
$headers = @{ "Authorization" = "Bearer $accesstoken" }
$DNSName = "<Machine DNS Name>"
$UserName = "<User ID>"
$Password = "<Password>"
$OS = "Linux"
$PortNo = "22"
$CompanyName = "ABCD"
$AppId = "<Application ID>"
$TenantId = "<Tenant ID>"

$body = @{
   "DNSName" = $DNSName
   "UserName" = $UserName
   "Password" = $Password
   "OS" = $OS
   "PortNo" = $PortNo
   "CompanyName" = $CompanyName
   "AppId" = $AppId
   "TenantId" = $TenantId
} | ConvertTo-Json

$body

$uri = "https://isvapp.azurewebsites.net/selftest-vm"

$res = (Invoke-WebRequest -Method "Post" -Uri $uri -Body $body -ContentType "application/json" -Headers $headers).Content


Oto przykład wywoływania interfejsu API w programie PowerShell:

Przykład ekranu do wywoływania interfejsu API w programie PowerShell.


Korzystając z poprzedniego przykładu, możesz pobrać kod JSON i przeanalizować go, aby uzyskać następujące szczegóły:

$resVar = $res | ConvertFrom-Json
$actualresult = $resVar.Response | ConvertFrom-Json

Write-Host "OSName: $($actualresult.OSName)"
Write-Host "OSVersion: $($actualresult.OSVersion)"
Write-Host "Overall Test Result: $($actualresult.TestResult)"

For ($i = 0; $i -lt $actualresult.Tests.Length; $i++) {
   Write-Host "TestID: $($actualresult.Tests[$i].TestID)"
   Write-Host "TestCaseName: $($actualresult.Tests[$i].TestCaseName)"
   Write-Host "Description: $($actualresult.Tests[$i].Description)"
   Write-Host "Result: $($actualresult.Tests[$i].Result)"
   Write-Host "ActualValue: $($actualresult.Tests[$i].ActualValue)"
}


Ten przykładowy ekran, który pokazuje $res.Content, pokazuje szczegóły wyników testu w formacie JSON:

Przykład ekranu przedstawiający wywoływanie interfejsu API w programie PowerShell ze szczegółowymi informacjami o wynikach testu.


Oto przykład wyników testów JSON wyświetlanych w przeglądarce JSON online (takiej jak Code Beautify lub JSON Viewer).

Więcej wyników testów w przeglądarce JSON online.

W systemie operacyjnym Windows

Wywołaj interfejs API w programie PowerShell:

  1. Wywołaj interfejs API za pomocą polecenia Invoke-WebRequest.
  2. Metoda to Post, a typ zawartości to JSON, jak pokazano w poniższym przykładzie kodu i przykładowym ekranie.
  3. Utwórz parametry treści w formacie JSON.

Ten przykładowy kod przedstawia wywołanie programu PowerShell do interfejsu API (zezwalaj na port 5986 podczas tworzenia maszyny wirtualnej):

$accesstoken = "Get token for your Client AAD App"
$headers = @{ "Authorization" = "Bearer $accesstoken" }
$Body = @{ 
   "DNSName" = "XXXX.westus.cloudapp.azure.com"
   "UserName" = "XXX"
   "Password" = "XXX@123456"
   "OS" = "Windows"
   "PortNo" = "5986"
   "CompanyName" = "ABCD"
   "AppId" = "XXXX-XXXX-XXXX"
   "TenantId" = "XXXX-XXXX-XXXX"
} | ConvertTo-Json

$res = Invoke-WebRequest -Method "Post" -Uri $uri -Body $Body -ContentType "application/json" –Headers $headers;
$Content = $res | ConvertFrom-Json

Te przykładowe ekrany przedstawiają przykłady wywoływania interfejsu API w programie PowerShell:

Za pomocą klucza SSH:

Wywoływanie interfejsu API w programie PowerShell przy użyciu klucza SSH.

Z hasłem:

Wywoływanie interfejsu API w programie PowerShell przy użyciu hasła.


Korzystając z poprzedniego przykładu, możesz pobrać kod JSON i przeanalizować go, aby uzyskać następujące szczegóły:

$resVar = $res | ConvertFrom-Json
$actualresult = $resVar.Response | ConvertFrom-Json

Write-Host "OSName: $($actualresult.OSName)"
Write-Host "OSVersion: $($actualresult.OSVersion)"
Write-Host "Overall Test Result: $($actualresult.TestResult)"

For ($i = 0; $i -lt $actualresult.Tests.Length; $i++) {
   Write-Host "TestID: $($actualresult.Tests[$i].TestID)"
   Write-Host "TestCaseName: $($actualresult.Tests[$i].TestCaseName)"
   Write-Host "Description: $($actualresult.Tests[$i].Description)"
   Write-Host "Result: $($actualresult.Tests[$i].Result)"
   Write-Host "ActualValue: $($actualresult.Tests[$i].ActualValue)"
}


Ten ekran, który pokazuje $res.Content, pokazuje szczegóły wyników testu w formacie JSON:

Szczegóły wyników testu w formacie JSON.


Oto przykład wyników testów wyświetlanych w przeglądarce JSON online (np . Code Beautify lub JSON Viewer).

Wyniki testu w przeglądarce JSON online.

Używanie narzędzia CURL do korzystania z interfejsu API samodzielnego testowania w systemie operacyjnym Linux

W tym przykładzie narzędzie curl będzie używane do tworzenia wywołania interfejsu API POST do identyfikatora Entra firmy Microsoft i maszyny wirtualnej self-host.

  1. Żądanie tokenu firmy Microsoft Entra w celu uwierzytelnienia na maszynie wirtualnej z własnym hostem

    Upewnij się, że prawidłowe wartości są zastępowane w żądaniu curl.

    curl --location --request POST 'https://login.microsoftonline.com/{TENANT_ID}/oauth2/token' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'grant_type=client_credentials' \
    --data-urlencode 'client_id={CLIENT_ID} ' \
    --data-urlencode 'client_secret={CLIENT_SECRET}' \
    --data-urlencode 'resource=https://management.core.windows.net'
    

    Oto przykład odpowiedzi z żądania:

    {
        "token_type": "Bearer",
        "expires_in": "86399",
        "ext_expires_in": "86399",
        "expires_on": "1599663998",
        "not_before": "1599577298",
        "resource": "https://management.core.windows.net",
        "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJS…"
    }
    
  2. Przesyłanie żądania dla samoobsługowej maszyny wirtualnej

    Upewnij się, że token elementu nośnego i parametry są zastępowane prawidłowymi wartościami.

    curl --location --request POST 'https://isvapp.azurewebsites.net/selftest-vm' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJS…' \
    --data-raw '{
        "DNSName": "avvm1.eastus.cloudapp.azure.com",
        "UserName": "azureuser",
        "Password": "SECURE_PASSWORD_FOR_THE_SSH_INTO_VM",
        "OS": "Linux",
        "PortNo": "22",
        "CompanyName": "COMPANY_NAME",
        "AppId": "CLIENT_ID_SAME_AS_USED_FOR_AAD_TOKEN ",
        "TenantId": "TENANT_ID_SAME_AS_USED_FOR_AAD_TOKEN"
    }'
    

    Przykładowa odpowiedź wywołania interfejsu API maszyny wirtualnej samodzielnego testowania:

    {
        "TrackingId": "9bffc887-dd1d-40dd-a8a2-34cee4f4c4c3",
        "Response": "{\"SchemaVersion\":1,\"AppCertificationCategory\":\"Microsoft Single VM Certification\",\"ProviderID\":\"050DE427-2A99-46D4-817C-5354D3BF2AE8\",\"OSName\":\"Ubuntu 18.04\",\"OSDistro\":\"Ubuntu 18.04.5 LTS\",\"KernelVersion\":\"5.4.0-1023-azure\",\"KernelFullVersion\":\"Linux version 5.4.0-1023-azure (buildd@lgw01-amd64-053) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #23~18.04.1-Ubuntu SMP Thu Aug 20 14:46:48 UTC 2020\\n\",\"OSVersion\":\"18.04\",\"CreatedDate\":\"09/08/2020 01:13:47\",\"TestResult\":\"Pass\",\"APIVersion\":\"1.5\",\"Tests\":[{\"TestID\":\"48\",\"TestCaseName\":\"Bash History\",\"Description\":\"Bash history files should be cleared before creating the VM image.\",\"Result\":\"Passed\",\"ActualValue\":\"No file Exist\",\"RequiredValue\":\"1024\"},{\"TestID\":\"39\",\"TestCaseName\":\"Linux Agent Version\",\"Description\":\"Azure Linux Agent Version 2.2.41 and above should be installed.\",\"Result\":\"Passed\",\"ActualValue\":\"2.2.49\",\"RequiredValue\":\"2.2.41\"},{\"TestID\":\"40\",\"TestCaseName\":\"Required Kernel Parameters\",\"Description\":\"Verifies the following kernel parameters are set console=ttyS0, earlyprintk=ttyS0, rootdelay=300\",\"Result\":\"Warning\",\"ActualValue\":\"Missing Parameter: rootdelay=300\\r\\nMatched Parameter: console=ttyS0,earlyprintk=ttyS0\",\"RequiredValue\":\"console=ttyS0#earlyprintk=ttyS0#rootdelay=300\"},{\"TestID\":\"41\",\"TestCaseName\":\"Swap Partition on OS Disk\",\"Description\":\"Verifies that no Swap partitions are created on the OS disk.\",\"Result\":\"Passed\",\"ActualValue\":\"No. of Swap Partitions: 0\",\"RequiredValue\":\"swap\"},{\"TestID\":\"42\",\"TestCaseName\":\"Root Partition on OS Disk\",\"Description\":\"It is recommended that a single root partition is created for the OS disk.\",\"Result\":\"Passed\",\"ActualValue\":\"Root Partition: 1\",\"RequiredValue\":\"1\"},{\"TestID\":\"44\",\"TestCaseName\":\"OpenSSL Version\",\"Description\":\"OpenSSL Version should be >=0.9.8.\",\"Result\":\"Passed\",\"ActualValue\":\"1.1.1\",\"RequiredValue\":\"0.9.8\"},{\"TestID\":\"45\",\"TestCaseName\":\"Python Version\",\"Description\":\"Python version 2.6+ is highly recommended. \",\"Result\":\"Passed\",\"ActualValue\":\"2.7.17\",\"RequiredValue\":\"2.6\"},{\"TestID\":\"46\",\"TestCaseName\":\"Client Alive Interval\",\"Description\":\"It is recommended to set ClientAliveInterval to 180. On the application need, it can be set between 30 to 235. \\nIf you are enabling the SSH for your end users this value must be set as explained.\",\"Result\":\"Warning\",\"ActualValue\":\"120\",\"RequiredValue\":\"ClientAliveInterval 180\"},{\"TestID\":\"49\",\"TestCaseName\":\"OS Architecture\",\"Description\":\"Only 64-bit operating system should be supported.\",\"Result\":\"Passed\",\"ActualValue\":\"x86_64\\n\",\"RequiredValue\":\"x86_64,amd64\"},{\"TestID\":\"50\",\"TestCaseName\":\"Security threats\",\"Description\":\"Identifies OS with recent high profile vulnerability that might need patching.  Ignore warning if system was patched as appropriate.\",\"Result\":\"Passed\",\"ActualValue\":\"Ubuntu 18.04\",\"RequiredValue\":\"OS impacted by GHOSTS\"},{\"TestID\":\"51\",\"TestCaseName\":\"Auto Update\",\"Description\":\"Identifies if Linux Agent Auto Update is enabled or not.\",\"Result\":\"Passed\",\"ActualValue\":\"# AutoUpdate.Enabled=y\\n\",\"RequiredValue\":\"Yes\"},{\"TestID\":\"52\",\"TestCaseName\":\"SACK Vulnerability patch verification\",\"Description\":\"Checks if the running Kernel Version has SACK vulnerability patch.\",\"Result\":\"Passed\",\"ActualValue\":\"Ubuntu 18.04.5 LTS,Linux version 5.4.0-1023-azure (buildd@lgw01-amd64-053) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #23~18.04.1-Ubuntu SMP Thu Aug 20 14:46:48 UTC 2020\",\"RequiredValue\":\"Yes\"}]}"
    }