View a markdown version of this page

Use a virtualização aninhada para executar hipervisores em instâncias do Amazon EC2 - Amazon Elastic Compute Cloud

Use a virtualização aninhada para executar hipervisores em instâncias do Amazon EC2

A virtualização aninhada permite que você execute hipervisores como Hyper-V e KVM dentro de instâncias virtuais do Amazon EC2. As instâncias virtuais do EC2 não são instâncias bare metal. Esse recurso amplia a flexibilidade da virtualização ao adicionar suporte de virtualização em nível de processador às instâncias virtuais do EC2, permitindo que um hipervisor em execução na sua instância crie e gerencie máquinas virtuais.

A virtualização aninhada pode ajudar quando você executa ferramentas de desenvolvimento como Docker Desktop, Windows Subsystem for Linux 2 (WSL2), emuladores do Android Studio ou QEMU em seu fluxo de trabalho de desenvolvimento, pois permite escolher entre uma ampla variedade de tipos de instâncias virtuais padrão do Amazon EC2 que atendem aos seus requisitos específicos de desempenho e preço.

Não há custo adicional para usar a virtualização aninhada.

Como funcionam

As instâncias virtuais do EC2 são executadas em um host físico que tem o hipervisor Nitro. Para oferecer suporte à virtualização aninhada, o Sistema Nitro transfere as extensões do processador, como Intel VT-x, para instâncias para facilitar a execução de máquinas virtuais aninhadas. A arquitetura de virtualização aninhada consiste em três camadas: a infraestrutura física da AWS e o hipervisor Nitro (L0), sua instância EC2 executando um hipervisor (L1) e uma ou mais máquinas virtuais criadas nessa instância (L2).

Considerações

Antes de começar a usar a virtualização aninhada, considere o seguinte:

  • Tipos de instância compatíveis: atualmente, a virtualização aninhada é compatível com os seguintes tipos de instância:

    • Uso geral: M7i | M7i-flex | M8i | M8id | M8i-flex

    • Otimizadas para computação: C7i | C7i-flex | C8i | C8id | C8i-flex

    • Otimizadas para memória: R7i | R7iz | R8i | R8id | R8i-flex | X8i

    • Otimizadas para armazenamento: I7i | I7ie

  • Hipervisores compatíveis: atualmente, o KVM e o Hyper-V são os hipervisores L1 compatíveis.

  • Instâncias do Windows: quando a virtualização aninhada está habilitada em uma instância do Windows:

    • Credential Guard: o Virtual Secure Mode (VSM) é automaticamente desativado.

    • Hibernação: a hibernação e a retomada da instância não são compatíveis.

    • Limite de CPU: não é compatível em instâncias do Windows com mais de 192 CPUs, como m8i.96xl.

  • Responsabilidades de segurança: ao usar a virtualização aninhada em instâncias do EC2, a AWS é responsável pela “segurança da nuvem”, protegendo a infraestrutura subjacente e mantendo os fortes limites de isolamento entre as instâncias do EC2 fornecidos pelo AWS Nitro System. Os clientes são responsáveis pela “segurança na nuvem”, que inclui proteger o sistema operacional, o hipervisor, as máquinas virtuais aninhadas, os sistemas operacionais convidados, as aplicações e os dados nas instâncias do EC2.

  • Desempenho: a AWS recomenda que os clientes que desejam executar workloads que exijam acesso a extensões de virtualização de hardware, sejam sensíveis ao desempenho ou tenham requisitos rígidos de latência, avaliem instâncias bare metal.

Iniciar uma nova instância com a virtualização aninhada

Ao iniciar uma nova instância, você pode ativar a virtualização aninhada para executar hipervisores e máquinas virtuais nela.

Console
Para habilitar um virtualização aninhada durante o início da instância
  1. Siga o procedimento Executar uma instância do EC2 usando o assistente de inicialização de instâncias no console e configure sua instância conforme necessário.

  2. Verifique se um tipo de instância compatível está selecionado.

  3. Expanda os detalhes avançados e em Virtualização aninhada, escolha Habilitar.

  4. No painel Resumo, analise a configuração da instância e selecione Iniciar instância.

AWS CLI
Para iniciar uma instância com a virtualização aninhada habilitada

Use o comando run-instances.

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type r8i.4xlarge \ --cpu-options "NestedVirtualization=enabled" \ --key-name my-key-pair
PowerShell
Para iniciar uma instância com a virtualização aninhada habilitada

Use o comando New-EC2Instance.

New-EC2Instance `     -ImageId ami-0abcdef1234567890 `     -InstanceType r8i.4xlarge `     -CpuOption @{NestedVirtualization='enabled'} `     -KeyName my-key-pair

Configurar uma instância existente para usar a virtualização aninhada

Você pode ativar a virtualização aninhada em uma instância existente do Amazon EC2.

Pré-requisitos
  • A instância deve se encontrar no estado stopped.

  • O tipo de instância deve permitir a virtualização aninhada.

Console
Para habilitar a virtualização aninhada em uma instância existente
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, escolha Instances (Instâncias).

  3. Selecione a instância que você deseja modificar na tabela de instâncias.

  4. Escolha Ações, Configurações de instância, Alterar opções de CPU.

  5. Na página Alterar opções de CPU, para Virtualização aninhada, escolha uma das seguintes opções:

    • Habilitar: ativa a virtualização aninhada para a instância

    • Desabilitar: desativa a virtualização aninhada para a instância

  6. Confira suas alterações e escolha Alterar para aplicar as novas opções de CPU.

AWS CLI
Para habilitar a virtualização aninhada em uma instância existente

Primeiro, interrompa a instância e use o comando modify-instance-cpu-options.

aws ec2 modify-instance-cpu-options \ --instance-id i-1234567890abcdef0 \ --core-count 4 \ --threads-per-core 2 \ --nested-virtualization enabled
PowerShell
Para habilitar a virtualização aninhada em uma instância existente

Primeiro, interrompa a instância e use o comando Edit-EC2InstanceCpuOption.

Edit-EC2InstanceCpuOption `     -InstanceId i-1234567890abcdef0 `     -CoreCount 4 `     -ThreadsPerCore 2 `     -NestedVirtualization enabled

Encontre os tipos de instância que são compatíveis virtualização aninhada

Você pode encontrar quais são os tipos de instância do Amazon EC2 compatíveis com virtualização aninhada. Você pode consultar uma Região da AWS inteira ou verificar um tipo específico de instância.

AWS CLI
Para listar todas as famílias de instâncias compatíveis com virtualização aninhada em uma região

Use o comando describe-instance-types com o filtro processor-info.supported-features definido como nested-virtualization:

aws ec2 describe-instance-types --region us-east-1 \ --filters "Name=processor-info.supported-features,Values=nested-virtualization" \ --query "InstanceTypes[].InstanceType" --output text \ | tr '\t' '\n' | cut -d. -f1 | sort -u
Para verificar se um tipo de instância específico é compatível com virtualização aninhada

Use o comando describe-instance-types e consulte o campo ProcessorInfo.SupportedFeatures do tipo de instância especificado:

aws ec2 describe-instance-types \ --instance-types m8i.2xlarge \ --query "InstanceTypes[].ProcessorInfo.SupportedFeatures"

Se o tipo de instância for compatível com virtualização aninhada, a saída incluirá nested-virtualization. Caso contrário, o comando retornará uma matriz vazia ([]).

PowerShell
Para listar todas as famílias de instâncias compatíveis com virtualização aninhada em uma região

Use o comando Get-EC2InstanceType com o filtro processor-info.supported-features definido como nested-virtualization:

Get-EC2InstanceType -Region us-east-1 -Filter @{ Name='processor-info.supported-features'; Values='nested-virtualization' } | ForEach-Object { ($_.InstanceType -split '\.')[0] } | Sort-Object -Unique
Para verificar se um tipo de instância específico é compatível com virtualização aninhada

Use o comando Get-EC2InstanceType e consulte a propriedade ProcessorInfo.SupportedFeatures do tipo de instância especificado:

(Get-EC2InstanceType -InstanceType m8i.2xlarge).ProcessorInfo.SupportedFeatures

Se o tipo de instância for compatível com virtualização aninhada, a saída incluirá nested-virtualization. Caso contrário, o comando não retornará nenhuma saída.