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):
- Abra a versão da imagem da Galeria de Computação do Azure.
- Selecione Criar VM.
- Forneça um Nome de Máquina Virtual e selecione um Tamanho de VM.
- 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:
- Implantar uma VM do Azure usando sua imagem generalizada; consulte Criar uma máquina virtual usando uma base aprovada ou Criar uma máquina virtual usando sua própria imagem.
- Execute validações.
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.
- Transfira e instale a Ferramenta de Teste de Certificação mais recente para o Azure Certified.
- Abra a ferramenta de certificação e selecione Iniciar novo teste.
- Na tela Informações de teste, insira um Nome de teste para a execução do teste.
- 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.
- 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
Selecione o modo de Autenticação SSH: Autenticação de Senha ou Autenticação de Arquivo de Chave.
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.
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.
Insira o nome DNS da VM totalmente qualificado (por exemplo, MyVMName.Cloudapp.net).
Introduza o Nome de Utilizador e a Palavra-passe.
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:
- Gere o token de acesso.
- Use o comando Invoke-WebRequest para chamar a API.
- O método é Post e o tipo de conteúdo é JSON, conforme mostrado no exemplo de código e captura de tela a seguir.
- 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
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:
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.Content
detalhes dos resultados do teste no formato JSON:
Aqui está um exemplo de resultados de teste JSON exibidos em um visualizador JSON online (como Code Beautify ou JSON Viewer).
No sistema operacional Windows
Chame a API no PowerShell:
- Use o comando Invoke-WebRequest para chamar a API.
- 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.
- 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:
Com senha:
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.Content
os detalhes dos resultados do teste no formato JSON:
Aqui está um exemplo de resultados de teste exibidos em um visualizador JSON online (como Code Beautify ou 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.
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…" }
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
- Inicie sessão no Centro de Parceiros.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários