Share via


Testar uma imagem de máquina virtual

Este artigo descreve como testar uma imagem de máquina virtual (VM) para garantir que ela atenda aos requisitos de publicação mais recentes do Azure Marketplace.

Implantar uma VM do Azure

Para implantar uma VM a partir da imagem da Galeria de Computação do Azure (anteriormente conhecida como Galeria de Imagens Compartilhadas):

  1. Abra a versão da imagem da Galeria de Computação do Azure.
  2. Selecione Criar VM.
  3. Forneça um Nome de Máquina Virtual e selecione um Tamanho de VM.
  4. Selecione Rever + criar. Depois que a validação for aprovada, selecione Criar.

Nota

Para criar uma VM a partir de um arquivo vhd, siga as instruções abaixo em Conectar a ferramenta de certificação a uma imagem de VM ou Usando o PowerShell para consumir a API de autoteste.

Conclua estas etapas antes de enviar sua oferta de VM:

Executar validações

Há duas maneiras de executar validações na imagem implantada.

Usar a Ferramenta de Teste de Certificação para o Azure Certified

Importante

Para executar a ferramenta de teste de certificação, o serviço de Gerenciamento Remoto do Windows deve estar em execução e configurado no Windows. Isso permite o acesso à porta 5986. Para obter informações, consulte Instalação e configuração do Gerenciamento Remoto do Windows.

Baixe e execute a ferramenta de teste de certificação

A Ferramenta de Teste de Certificação para Azure Certified é executada em uma máquina Windows local, mas testa uma VM Windows ou Linux baseada no Azure. Ele certifica que sua imagem de VM de usuário pode ser usada com o Microsoft Azure e que as orientações e os requisitos em torno da preparação de seu VHD foram atendidos.

  1. Transfira e instale a Ferramenta de Teste de Certificação mais recente para o Azure Certified.
  2. Abra a ferramenta de certificação e selecione Iniciar novo teste.
  3. Na tela Informações de teste, insira um Nome de teste para a execução do teste.
  4. Selecione a plataforma para sua VM, Windows Server (permitir porta 5986 para Windows) ou Linux (permitir porta 22 para Linux ). Sua escolha de plataforma afeta as opções restantes.
  5. Se sua VM estiver usando esse serviço de banco de dados, marque a caixa de seleção Testar para o Banco de Dados SQL do Azure.

Conectar a ferramenta de certificação a uma imagem de VM

  1. Selecione o modo de Autenticação SSH: Autenticação de Senha ou Autenticação de Arquivo de Chave.

  2. Se estiver usando a autenticação baseada em senha, insira valores para o Nome DNS da VM, Nome de usuário e Senha. Você também pode alterar o número da porta SSH padrão.

    Shows the selection of VM test information.

  3. Se estiver usando a autenticação baseada em arquivo de chave, insira valores para o Nome DNS da VM, Nome de usuário e Local da chave privada. Você também pode incluir uma senha ou alterar o número da porta SSH padrão.

  4. Insira o nome DNS da VM totalmente qualificado (por exemplo, MyVMName.Cloudapp.net).

  5. Introduza o Nome de Utilizador e a Palavra-passe.

    Shows the selection of VM user name and password.

  6. Selecione Seguinte.

Executar um teste de certificação

Depois de fornecer os valores de parâmetro para sua imagem de VM na ferramenta de certificação, selecione Testar conexão para criar uma conexão válida com sua VM. Depois que uma conexão for verificada, selecione Avançar para iniciar o teste. Quando o teste estiver concluído, os resultados serão exibidos em uma tabela. A coluna Status mostra (Aprovado/Reprovado/Aviso) para cada teste. Se algum dos testes falhar, a sua imagem não é certificada. Nesse caso, revise os requisitos e as mensagens de falha, faça as alterações sugeridas e execute o teste novamente.

Após a conclusão do teste automatizado, forneça informações adicionais sobre a imagem da VM nas duas guias da tela Questionário, Avaliação Geral e Personalização do kernel e selecione Avançar.

A última tela permite fornecer mais informações, como informações de acesso SSH para uma imagem de VM Linux e uma explicação para quaisquer avaliações com falha se você estiver procurando exceções.

Por fim, selecione Gerar relatório para baixar os resultados do teste e os arquivos de log dos casos de teste executados, juntamente com suas respostas ao questionário.

Nota

Poucos editores têm cenários em que as VMs precisam ser bloqueadas, pois têm software, como firewalls, instalados na VM. Nesse caso, faça o download da Ferramenta de Teste Certificada aqui e envie o relatório no suporte do Partner Center.

Usando o PowerShell para consumir a API de autoteste

No sistema operacional Linux

Chame a API no PowerShell:

  1. Gere o token de acesso.
  2. Use o comando Invoke-WebRequest para chamar a API.
  3. O método é Post e o tipo de conteúdo é JSON, conforme mostrado no exemplo de código e captura de tela a seguir.
  4. Especifique os parâmetros do corpo no formato JSON.

Os comandos a seguir geram um token de acesso:

$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

Shows a screen example for generating an access token in PowerShell.

Este exemplo mostra uma chamada do PowerShell para a API (permitir a porta 22 durante a criação da VM):

$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


Veja um exemplo de como chamar a API no PowerShell:

Screen example for calling the API in PowerShell.


Usando o exemplo anterior, você pode recuperar o JSON e analisá-lo para obter os seguintes detalhes:

$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)"
}


Esta tela de exemplo, que mostra , mostra $res.Contentdetalhes dos resultados do teste no formato JSON:

Screen example for calling the API in PowerShell with details of test results.


Aqui está um exemplo de resultados de teste JSON exibidos em um visualizador JSON online (como Code Beautify ou JSON Viewer).

More test results in an online JSON viewer.

No sistema operacional Windows

Chame a API no PowerShell:

  1. Use o comando Invoke-WebRequest para chamar a API.
  2. O método é Post e o tipo de conteúdo é JSON, conforme mostrado no exemplo de código e na tela de exemplo a seguir.
  3. Crie os parâmetros do corpo no formato JSON.

Este exemplo de código mostra uma chamada do PowerShell para a API (permitir a porta 5986 durante a criação da VM):

$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

Estas telas de exemplo mostram exemplos para chamar a API no PowerShell:

Com chave SSH:

Calling the API in PowerShell with an SSH Key.

Com senha:

Calling the API in PowerShell with a password.


Usando o exemplo anterior, você pode recuperar o JSON e analisá-lo para obter os seguintes detalhes:

$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)"
}


Esta tela, que mostra , mostra $res.Contentos detalhes dos resultados do teste no formato JSON:

Details of test results in JSON format.


Aqui está um exemplo de resultados de teste exibidos em um visualizador JSON online (como Code Beautify ou JSON Viewer).

Test results in an online JSON viewer.

Usando CURL para consumir a API de autoteste no sistema operacional Linux

Neste exemplo, curl será usado para fazer uma chamada de API POST para o Microsoft Entra ID e a VM Self-Host.

  1. Solicitar um token do Microsoft Entra para autenticar na VM de autohost

    Certifique-se de que os valores corretos são substituídos na solicitação de ondulação.

    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'
    

    Aqui está um exemplo da resposta da solicitação:

    {
        "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. Enviar uma solicitação para a VM de autoteste

    Certifique-se de que o token e os parâmetros do portador sejam substituídos pelos valores corretos.

    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"
    }'
    

    Exemplo de resposta da chamada de api de VM de autoteste:

    {
        "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\"}]}"
    }
    

Próximos passos