Importar dispositivos virtuais


Um dispositivo virtual é um pacote que contém imagens de disco e configurações de hardware para uma instância de máquina virtual (VM).

Um formato amplamente utilizado para dispositivos virtuais é o OVF. Quando você empacota dispositivos virtuais nesse formato, você gera um pacote OVF. Um pacote OVF é uma pasta que contém um arquivo descritor .ovf e uma coleção de outros recursos, como discos. Quando esse pacote é arquivado em um único arquivo, ele é chamado de arquivo OVA.

É possível importar VMs no formato OVF para o Compute Engine, seja um pacote OVF ou apenas um arquivo OVA. Para verificar se o uso de um dispositivo virtual é a melhor opção para seu caso de uso, consulte Escolher um caminho de migração.

Quando você importa um dispositivo virtual, o processo de importação usa as informações armazenadas no arquivo descritor para criar e iniciar uma VM no Compute Engine.

No Compute Engine, é possível importar arquivos OVA ou OVF da seguinte maneira:

Antes de começar

  • Se o projeto em que você quer importar o dispositivo virtual tiver uma política de imagem confiável definida, adicione projects/compute-image-import e projects/compute-image-tools à lista de editores permitidos.
  • Se você estiver importando um dispositivo virtual de um projeto diferente, consulte Como importar entre projetos.
  • Saiba como atender aos requisitos antes de importar imagens em Pré-requisitos para importar e exportar imagens de VM.
  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.

    Selecione a guia para como planeja usar as amostras nesta página:

    gcloud

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.

      Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init

Requisitos

Nesta seção, listamos os requisitos para importar dispositivos virtuais para o Compute Engine.

Requisitos da VM de origem

Os requisitos a seguir precisam ser atendidos pela VM usada para criar o arquivo OVF:

  • Os discos virtuais precisam estar nos formatos VMDK ou VHD.
  • Os discos virtuais não podem ser criptografados.

    Para verificar se sua máquina virtual atende aos requisitos, execute a ferramenta de pré-verificação (em inglês).

O sistema operacional da VM de origem precisa atender os seguintes requisitos:

  • Para todos os sistemas operacionais Windows, é preciso instalar o PowerShell versão 3 ou mais recente. As versões do PowerShell anteriores à 3.0 podem causar problemas com os scripts de inicialização e desligamento usados no processo de importação.
  • Para todas as distribuições do Linux, o disco de inicialização precisa atender aos seguintes requisitos:

    • O disco de inicialização precisa ter o GRUB instalado.
    • O disco de inicialização não pode abranger vários discos físicos. Um disco particionado usando um Gerenciador de volume lógico (LVM, na sigla em inglês) não é compatível. Se o disco abrange vários discos físicos, a VM criada a partir do arquivo OVF pode não ser inicializada no Compute Engine.

Requisitos para arquivos OVF

O arquivo OVF precisa seguir os critérios abaixo:

  • Os arquivos OVF precisam fornecer portabilidade Level 1, conforme descrito neste documento (em inglês). Dispositivos virtuais compatíveis com a portabilidade Level 2 podem ser importados, mas extensões personalizadas, como detalhes específicos do hipervisor de origem, são ignoradas durante o processo de importação.
  • O arquivo OVF pode conter apenas uma máquina virtual. Se houver mais de uma máquina virtual, somente a primeira será importada.
  • O primeiro disco no arquivo OVF precisa ser inicializável.

Permissões

Para ativar uma experiência perfeita ao importar imagens, verifique se você concedeu os papéis necessários do IAM à sua conta, à conta de serviço do Cloud Build e à conta de serviço do Compute Engine. Para mais informações, consulte Conceder papéis necessários do IAM.

Configurações importadas pela ferramenta

O padrão OVF especifica o processo de empacotamento de dispositivos virtuais de uma maneira que não precise do provedor de virtualização. Os pacotes de dispositivos virtuais OVF contêm um arquivo de descritor .ovf e uma coleção de outros recursos, como discos virtuais.

Ao importar um dispositivo virtual OVF para o Compute Engine, as seguintes configurações do arquivo descritor são processadas e importadas:

  • Informações de discos virtuais recuperadas do elemento DiskSection do pacote OVF.
  • CPU e memória recuperadas de ResourceAllocationSection do pacote OVF.

    Se as configurações de CPU ou memória estiverem fora dos limites do intervalo compatível com o Compute Engine, o processo de importação redefinirá os valores para o máximo suportado.

  • Detalhes do disco de inicialização recuperados do elemento BootDeviceSection do pacote OVF.

  • Detalhes do SO convidado recuperados do elemento OperatingSystemSection do pacote OVF.

    As informações do SO convidado são usadas para instalar os drivers e os pacotes de ambiente de convidado corretos na instância importada. Se as informações do SO convidado encontradas no OVF estiverem incorretas, a importação falhará. É possível usar a sinalização --os para modificar as informações do sistema operacional convidado.

As VMs importadas são sempre criadas com um único adaptador de rede com um endereço IP externo. Esse adaptador de rede único é usado independentemente das configurações de rede especificadas no arquivo OVF. Para importar uma VM sem endereço IP externo, consulte Como importar uma VM sem endereço IP externo.

Ao importar um dispositivo virtual, as seções a seguir do arquivo descritor não serão importadas:

  • NetworkSection
  • AnnotationSection
  • ProductSection
  • EulaSection
  • StartupSection
  • DeploymentOptionSection
  • InstallSection
  • EnvironmentFilesSection
  • SharedDiskSection
  • ScaleOutSection
  • PlacementGroupSection
  • PlacementSection
  • EncryptionSection

Limitações

Esse recurso não é compatível com projetos protegidos com o VPC Service Controls.

Sistemas operacionais compatíveis

Também é possível especificar o sistema operacional no elemento OperatingSystemSection do arquivo descritor ou especificar a sinalização --os ao importar o dispositivo virtual usando o comando gcloud compute instances import.

Para informações sobre quais sistemas operacionais são compatíveis, consulte Detalhes do sistema operacional.

Compatibilidade com BYOL e BYOS

Por padrão, os arquivos OVF que usam sistemas operacionais Windows Server e Red Hat Enterprise Linux (RHEL) são importados e configurados para usar o faturamento de SO premium sob demanda, o que gera mais cobranças.

Se preferir usar sua própria licença de software ou assinatura, importe os dispositivos virtuais com as licenças deles. Para informações sobre os sistemas operacionais compatíveis com BYOL ou BYOS, consulte Detalhes do sistema operacional.

É possível importar dispositivos como licenciados por BYOL usando o comando gcloud compute instances import com a sinalização --byol. Se você estiver especificando manualmente o SO, use a sinalização --os para especificar um valor que contenha o sufixo byol do SO convidado que você quer importar. Por exemplo, --os=rhel-8-byol importa uma imagem do RHEL 8 com uma licença existente.

Importar entre projetos

  • Projeto de origem: o projeto em que o arquivo OVA ou OVF é armazenado.
  • Projeto de destino: o projeto em que você quer criar a VM ou a imagem de máquina.

Se o projeto de origem e de destino forem diferentes, as contas de serviço no projeto de destino precisarão acessar o bucket do Cloud Storage no projeto de origem.

Para importar entre projetos, siga estas etapas:

  1. No projeto de origem, localize o bucket do Cloud Storage.
  2. No bucket do Cloud Storage, conceda roles/storage.objectViewer às seguintes contas de serviço:

    • Conta de serviço do Cloud Build para o projeto de destino: essa conta de serviço tem o formato DESTINATION_PROJECT_NUMBER@cloudbuild.gserviceaccount.com
    • Conta de serviço do Compute Engine para o projeto de destino: essa conta de serviço tem o formato DESTINATION_PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Substitua DESTINATION_PROJECT_NUMBER pelo número do projeto de destino.

    Para saber como conceder acesso a um bucket do Cloud Storage, consulte Como adicionar um principal a uma política no nível do bucket.

  3. Importe o dispositivo virtual ou a imagem de máquina.

Importar dispositivos virtuais

É possível importar seu dispositivo virtual usando a CLI do Google Cloud ou REST.

Importar um arquivo OVA

gcloud

  1. Faça upload do dispositivo virtual para o Cloud Storage.
  2. Para importar um arquivo OVA do Cloud Storage para o Compute Engine, use o comando gcloud compute instances import.

    gcloud compute instances import VM_NAME \
       --source-uri=gs:PATH_TO_OVA_FILE
    

    Substitua:

    • VM_NAME: o nome da instância que você quer criar
    • PATH_TO_OVA_FILE: o caminho para o arquivo OVA no Cloud Storage

    Exemplos

    Por exemplo, para importar um arquivo OVA Ubuntu.ova e criar uma instância denominada my-instance, execute o comando a seguir:

    gcloud compute instances import my-instance \
        --source-uri=gs://my-bucket/Ubuntu.ova
    

    Se as informações do SO convidado no arquivo descritor do OVF estiverem incorretas ou se você quiser substituir o SO detectado, é possível especificar o sistema operacional adicionando a sinalização --os. Para ver uma lista de valores compatíveis, revise as opções de sinalização --os do comando gcloud compute instances import.

    Por exemplo, para importar um arquivo OVA Ubuntu.ova e criar uma instância chamada my-instance que executa o Ubuntu 16.04, execute o seguinte comando:

    gcloud compute instances import my-instance \
        --os=ubuntu-1604
        --source-uri=gs://my-bucket/Ubuntu.ova
    

REST

  1. Faça upload do dispositivo virtual para o Cloud Storage.

  2. Envie uma solicitação POST para a API Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-instance-names=VM_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-zone=ZONE",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto em que você quer importar o arquivo OVA.
    • VM_NAME: o nome da instância de máquina virtual a ser criada. Por exemplo, my-instance.
    • SOURCE_URI: o URI do arquivo OVA armazenado no Cloud Storage. Por exemplo, gs://my-bucket/my-instance.ova.
    • ZONE: a zona em que a instância de VM será criada. Se ficar em branco, a zona padrão do projeto será usada.

    Para ver outros valores de args que podem ser fornecidos, consulte a seção de sinalizações opcionais na página do GitHub sobre importação do OVF do Compute Engine (em inglês).

    Exemplo de resposta

    A resposta de exemplo a seguir é parecida com a saída retornada:

    {
    "name": "operations/build/myproject-12345/operation-1578608233418",
    "metadata": {
      "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
      "build": {
        "id": "3a2055bc-ccbd-4101-9434-d376b88b8940",
        "status": "QUEUED",
        "createTime": "2019-12-30T19:06:03.968694865Z",
        "steps": [
          {
            "name": "gcr.io/compute-image-tools/gce_ovf_import:release",
            "env": [
              "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
            ],
            "args": [
              "-instance-names=my-instance",
              "-ovf-gcs-path=gs://my-bucket/my-instance.ova",
              "-zone=asia-northeast2",
              "-client-id=api",
              "-timeout": "7056s"
            ]
          }
        ],
        "timeout": "7200s",
        "projectId": "myproject-12345",
        "logsBucket": "gs://12345.cloudbuild-logs.googleusercontent.com",
        "options": {
          "logging": "LEGACY"
        },
        "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=myproject-12345",
        "tags": [
          "gce-ovf-import"
        ]
      }
    }
    }
    

    Para monitorar seu build, use um dos seguintes métodos:

    • Execute uma solicitação projects.builds.get usando o build-id retornado.
    • Revise os registros hospedados no logUrl fornecido.

Importar um arquivo OVF

gcloud

  1. Faça upload do dispositivo virtual para o Cloud Storage.
  2. Para importar um arquivo OVF do Cloud Storage para o Compute Engine, use o comando gcloud compute instances import.

    Se o diretório contiver apenas um arquivo OVF, é possível fornecer o caminho para o arquivo descritor ou para o diretório que contém o arquivo OVF.

    • Para importar um arquivo OVF usando o caminho para o arquivo descritor, execute o comando a seguir:

      gcloud compute instances import VM_NAME \
       --source-uri=gs:PATH_TO_OVF_FILE
      
    • Para importar um arquivo OVF usando o caminho do diretório, execute o comando a seguir:

      gcloud compute instances import VM_NAME \
       --source-uri=gs:PATH_TO_OVF_DIRECTORY
      

    Substitua:

    • VM_NAME: o nome da instância que será criada
    • PATH_TO_OVF_FILE: o caminho para o arquivo OVF no Cloud Storage
    • PATH_TO_OVF_DIRECTORY: o caminho para o diretório que contém o arquivo OVF no Cloud Storage

    Exemplos

    • Para importar um arquivo OVF Ubuntu.ovf do diretório my-ovf-directory, que cria uma instância chamada my-instance, execute o comando abaixo:

      gcloud compute instances import my-instance \
       --source-uri=gs://my-bucket/my-ovf-directory/Ubuntu.ovf
      
    • Para importar um arquivo OVF do diretório my-ovf-directory, que cria uma instância chamada my-instance, execute o seguinte comando:

      gcloud compute instances import my-instance \
       --source-uri=gs://my-bucket/my-ovf-directory
      

      Se as informações do SO convidado no arquivo descritor do OVF estiverem incorretas ou se você quiser substituir o SO detectado, é possível especificar o sistema operacional adicionando a sinalização --os. Para ver uma lista de valores compatíveis, revise as opções de sinalização --os do comando gcloud compute instances import. Por exemplo, para importar um arquivo OVF Ubuntu.ovf e criar uma instância chamada my-instance que executa o Ubuntu 16.04, execute o comando a seguir:

      gcloud compute instances import my-instance \
       --os=ubuntu-1604 \
       --source-uri=gs://my-bucket/my-ovf-directory/Ubuntu.ovf
      

REST

  1. Adicione o dispositivo virtual ao Cloud Storage.

  2. Envie uma solicitação POST para a API Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-instance-names=VM_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-os=OS",
           "-zone=ZONE",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto em que você quer importar o arquivo OVA.
    • VM_NAME: o nome da instância de máquina virtual a ser criada. Por exemplo, my-instance.
    • SOURCE_URI: o URI do arquivo OVF armazenado no Cloud Storage. Por exemplo, gs://my-bucket/my-instance.ovf.
    • OS: o sistema operacional do arquivo OVF. Por exemplo, ubuntu-1604. A sinalização --os é opcional por padrão, mas é possível substituir o SO detectado usando essa sinalização. Para ver uma lista de valores compatíveis, revise as opções de sinalização --os do comando gcloud compute instances import.
    • ZONE: a zona em que a instância de VM será criada. Se ficar em branco, a zona padrão do projeto será usada.

    Para ver outros valores de args que podem ser fornecidos, consulte a seção de sinalizações opcionais na página do GitHub sobre importação do OVF do Compute Engine (em inglês).

    Exemplo de resposta

    A resposta de amostra a seguir é parecida com a resposta retornada:

    {
    "name": "operations/build/myproject-12345/operation-1578608233418",
    "metadata": {
      "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
      "build": {
        "id": "3a2055bc-ccbd-4101-9434-d376b88b8940",
        "status": "QUEUED",
        "createTime": "2019-12-30T19:06:03.968694865Z",
        "steps": [
          {
            "name": "gcr.io/compute-image-tools/gce_ovf_import:release",
            "env": [
              "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940"
            ],
            "args": [
              "-instance-names=my-instance",
              "-ovf-gcs-path=gs://my-bucket/my-instance.ovf",
              "-os=ubuntu-1404",
              "-zone=asia-south1",
              "-client-id=api",
              "-timeout": "7056s"
            ]
          }
        ],
        "timeout": "7200s",
        "projectId": "myproject-12345",
        "logsBucket": "gs://12345.cloudbuild-logs.googleusercontent.com",
        "options": {
          "logging": "LEGACY"
        },
        "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=myproject-12345",
        "tags": [
          "gce-ovf-import"
        ]
      }
    }
    }
    

    Há algumas maneiras de monitorar seu build:

    • Execute uma solicitação projects.builds.get usando o build-id retornado.
    • Revise os registros hospedados no logUrl fornecido.

Como importar com configurações personalizadas

CPU e memória personalizadas

gcloud

Para substituir a configuração de CPU ou memória especificada no arquivo OVF, siga as etapas da Google Cloud CLI para importar um arquivo OVA ou um arquivo OVF e especifique as sinalizações --custom-cpu e --custom-memory.

Exemplo

Por exemplo, para importar uma instância denominada my-instance, que tem 2 CPUs e 2.048 MB de memória, execute o comando a seguir:

gcloud compute instances import my-instance \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --custom-cpu=2 --custom-memory=2048MB

REST

Para substituir a configuração de CPU ou memória especificada no arquivo OVF, siga as etapas da API Cloud Build para importar um OVA ou importar um arquivo OVF e especificar o argumento -machine-type. Esse -machine-type representa um tipo de máquina predefinido ou personalizado a ser usado.

Exemplo

Por exemplo, para importar uma instância denominada my-instance, que tem 2 CPUs e 2.048 MB de memória, use a solicitação a seguir: Substitua PROJECT_ID pelo ID do projeto.

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-instance-names=my-instance",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-machine-type=custom-2-2048",
        "-zone=asia-south1",
        "-client-id=api",
        "-timeout=7056s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-ovf-import"
  ]
}

Redes personalizadas

A rede personalizada precisa ser definida no mesmo projeto em que a imagem está sendo importada.

gcloud

Para usar uma rede personalizada, siga as etapas da CLI do Google Cloud para importar um OVA ou um arquivo OVF e especifique uma sinalização --network. Se a rede estiver configurada com um modo de sub-rede personalizado, você precisará especificar também as sinalizações --subnet e --zone.

Exemplo 1: como uma rede personalizada

Por exemplo, suponha as seguintes propriedades:

  • Nome da VM: my-instance
  • Rede: custom-vpc-network
  • Sub-rede company-vpc-us-east1-c
  • Zona: us-east1-c

Execute o comando a seguir para importar uma instância com as propriedades anteriores. Substitua SERVICE_PROJECT_ID pelo ID do projeto para onde quer importar o dispositivo virtual.

gcloud compute instances import my-instance \
    --source-uri=gs://my-bucket/Ubuntu.ova \
    --project SERVICE_PROJECT_ID \
    --network custom-vpc-network \
    --subnet company-vpc-us-east1-c \
    --zone us-east1-c

Exemplo 2: com uma rede personalizada (VPC compartilhada)

Por exemplo, suponha as seguintes propriedades:

  • Nome da VM: my-instance-2
  • Rede: my-shared-vpc
  • Sub-rede my-shared-subnet
  • Zona: us-east1-c

Para importar uma VM com as propriedades anteriores, siga as etapas a seguir:

  1. Adicione o papel compute.networkUser à conta de serviço do Cloud Build. Saiba mais em Conceder os papéis necessários à conta de serviço do Cloud Build.

  2. Importe a VM.

    gcloud compute instances import my-instance-2 \
       --source-uri gs://my-bucket/Ubuntu.ova \
       --project SERVICE_PROJECT_ID \
       --network projects/HOST_PROJECT_ID/global/networks/my-shared-vpc \
       --subnet projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/my-shared-subnet
       --zone us-east1-c
    

    Substitua:

    • SERVICE_PROJECT_ID: ID do projeto para onde quer importar o dispositivo virtual.
    • HOST_PROJECT_ID: ID do projeto em que a VPC compartilhada está localizada.

REST

Para usar uma rede personalizada, siga as etapas da API Cloud Build para importar um OVA ou importar um arquivo OVF e especificar um argumento -network. Se a rede estiver configurada com um modo de sub-rede personalizado, especifique também os argumentos -subnet e -zone.

Exemplo: com uma rede personalizada

Por exemplo, suponha as seguintes propriedades:

  • Nome da VM: my-instance
  • Rede: custom-vpc-network
  • Sub-rede company-vpc-us-east1-c
  • Zona: us-east1-c

Crie a solicitação POST a seguir para importar uma instância com as propriedades anteriores. Substitua SERVICE_PROJECT_ID pelo ID do projeto para onde quer importar o dispositivo virtual.

POST https://cloudbuild.googleapis.com/v1/projects/SERVICE_PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-instance-names=my-instance",
        "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
        "-zone=us-east1-c",
        "-network=custom-vpc-network",
        "-subnet=company-vpc-us-east1-c",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-ovf-import"
  ]
}

Exemplo 2: com uma rede personalizada (VPC compartilhada)

Por exemplo, suponha as seguintes propriedades:

  • Nome da VM: my-instance-2
  • Rede: my-shared-vpc
  • Sub-rede my-shared-subnet
  • Zona: us-east1-c

Para importar uma VM com as propriedades anteriores, siga as etapas a seguir:

  1. Adicione o papel compute.networkUser à conta de serviço do Cloud Build. Saiba mais em Conceder os papéis necessários à conta de serviço do Cloud Build.

  2. Crie a solicitação POST a seguir para importar a VM.

    POST https://cloudbuild.googleapis.com/v1/projects/SERVICE_PROJECT_ID/builds
    {
     "timeout":"7200s",
     "steps":[
       {
         "args":[
           "-instance-names=my-instance-2",
           "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova",
           "-zone=us-east1-c",
           "-network=projects/HOST_PROJECT_ID/global/networks/my-shared-vpc",
           "-subnet=projects/HOST_PROJECT_ID/regions/us-east1/subnetworks/my-shared-subnet",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

    Substitua:

    • SERVICE_PROJECT_ID: ID do projeto para onde quer importar o dispositivo virtual.
    • HOST_PROJECT_ID: ID do projeto em que a VPC compartilhada está localizada.

Importar uma VM usando redes que não permitem endereços IP externos

Para importar uma VM usando redes que não permitem endereços IP externos, siga estas etapas:

  1. Adicione o dispositivo virtual ao Cloud Storage.

  2. O processo de importação exige que os gerenciadores de pacotes sejam instalados no sistema operacional da VM. Esses gerenciadores de pacotes podem precisar fazer solicitações para repositórios de pacote que estão fora do Google Cloud. Para permitir o acesso a essas atualizações, você precisa configurar o Cloud NAT. Para mais informações, consulte Criar uma configuração NAT usando o Cloud Router.

  3. Configure Acesso privado do Google. Para instruções detalhadas, consulte Como configurar o Acesso privado do Google.

  4. Importe a VM usando a CLI do Google Cloud ou a REST.

    Quando a VM é criada com base em um dispositivo virtual, as VMs temporárias são criadas no seu projeto. Para garantir que essas VMs temporárias não recebam endereços IP externos, é necessário especificar uma sinalização ou um outro argumento.

    Para mais informações, clique nas seguintes guias:

gcloud

Para importar um dispositivo virtual do Cloud Storage para o Compute Engine, use o comando gcloud compute instances import com a sinalização --no-address.

gcloud compute instances import VM_NAME \
    --source-uri=SOURCE_URI \
    --zone=ZONE \
    --no-address

Substitua:

  • VM_NAME: o nome da instância que você quer criar.
  • SOURCE_URI: URI do arquivo OVA ou OVF no Cloud Storage. Por exemplo, gs://my-bucket/Ubuntu.ova.
  • ZONE: a zona em que o dispositivo virtual será criado. Se ficar em branco, a zona padrão do projeto será usada.

REST

É possível importar uma VM sem IP externo usando a API Cloud Build com uma sobreposição para esse IP.

Para modificar as configurações de IP externo especificadas no arquivo OVF, siga as etapas da API Cloud Build para importar um OVA ou importar um arquivo OVF e especifique o argumento -no-external-ip.

POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
{
  "timeout":"7200s",
  "steps":[
    {
      "args":[
        "-instance-names=VM_NAME",
        "-ovf-gcs-path=SOURCE_FILE",
        "-no-external-ip",
        "-zone=ZONE",
        "-client-id=api",
        "-timeout=7000s"
      ],
      "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
      "env":[
        "BUILD_ID=$BUILD_ID"
      ]
    }
  ],
  "tags":[
    "gce-ovf-import"
  ]
}

Substitua:

  • PROJECT_ID: o ID do projeto em que a imagem será importada;
  • VM_NAME: nome da VM a ser criada.
  • SOURCE_FILE: o URI da imagem no Cloud Storage; Por exemplo, gs://my-bucket/Ubuntu.ova.
  • ZONE: a zona onde a imagem será criada. Se ficar em branco, a zona padrão do projeto será usada.

Importar um arquivo OVA com o carregador de inicialização UEFI

gcloud

É possível usar o comando gcloud compute instances import para forçar uma importação a usar a inicialização UEFI.

gcloud compute instances import VM_NAME \
  --source-uri=SOURCE_URI \
  --guest-os-features=UEFI_COMPATIBLE

Substitua:

  • VM_NAME: o nome da VM a ser criada.
  • SOURCE_URI: URI do arquivo OVA ou OVF no Cloud Storage. Por exemplo, gs://my-bucket/Ubuntu.ova.

REST

É possível importar um arquivo OVA com um carregador de inicialização UEFI usando a API Cloud Build e especificando o argumento -uefi-compatible.

  1. Faça upload do dispositivo virtual para o Cloud Storage.

  2. Na API, crie uma solicitação POST para a API Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
     "timeout": "7200s",
     "steps":[
       {
         "args":[
           "-instance-names=VM_NAME",
           "-ovf-gcs-path=SOURCE_URI",
           "-uefi-compatible",
           "-zone=ZONE",
           "-client-id=api",
           "-timeout=7000s"
         ],
         "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
         "env":[
           "BUILD_ID=$BUILD_ID"
         ]
       }
     ],
     "tags":[
       "gce-ovf-import"
     ]
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto em que você quer importar o arquivo OVA.
    • VM_NAME: o nome da instância de máquina virtual a ser criada. Por exemplo, my-instance.
    • SOURCE_URI: o URI do arquivo OVA armazenado no Cloud Storage. Por exemplo, gs://my-bucket/my-instance.ova.
    • ZONE: a zona em que a instância de VM será criada. Se ficar em branco, a zona padrão do projeto será usada.

Importar um dispositivo virtual usando contas de serviço personalizadas

Durante a importação de um dispositivo virtual, as instâncias de máquina virtual (VM) temporárias são criadas no projeto. A ferramenta de importação nessas VMs temporárias precisa ser autenticada.

Uma conta de serviço é uma identidade anexada a uma VM. Os tokens de acesso da conta de serviço podem ser acessados pelo servidor de metadados de instância e usados para autenticar a ferramenta de importação de imagens na VM.

Por padrão, o processo de importação usa a conta de serviço padrão do Compute Engine. No entanto, se a conta de serviço padrão do Compute Engine estiver desativada no projeto ou se você quiser usar uma conta de serviço personalizada do Compute Engine, será necessário criar uma conta de serviço e especificá-la para o processo de importação.

gcloud

  1. Adicione o dispositivo virtual ao Cloud Storage.

  2. Crie uma conta de serviço e atribua o mínimo de papéis. Para mais informações sobre como criar contas de serviço, consulte Como criar e gerenciar contas de serviço.

    A conta de serviço do Compute Engine especificada precisa ter, no mínimo, os seguintes papéis atribuídos:

    • roles/compute.storageAdmin
    • roles/storage.objectViewer

    Esses papéis mínimos são necessários para a conta de serviço especificada para a sinalização --compute-service-account. Saiba mais em Conceder os papéis necessários à conta de serviço do Compute Engine.

  3. Use o comando gcloud compute instances import para importar o dispositivo virtual.

    gcloud compute instances import VM_NAME \
    --source-uri=SOURCE_URI \
    --zone=ZONE \
    --compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=SCOPES
    

    Substitua:

    • VM_NAME: o nome da instância que você quer criar.
    • SOURCE_URI: URI do arquivo OVA ou OVF no Cloud Storage. Por exemplo, gs://my-bucket/Ubuntu.ova.
    • ZONE: a zona em que o dispositivo virtual será criado. Se ficar em branco, a zona padrão do projeto será usada.
    • TEMP_SERVICE_ACCOUNT_EMAIL: o endereço de e-mail associado à conta de serviço personalizada criada na etapa anterior. Essa conta de serviço é usada pelas VMs temporárias. Se não for especificada, a VM usará a conta de serviço padrão do Compute Engine.
    • SERVICE_ACCOUNT_EMAIL: o endereço de e-mail associado à conta de serviço personalizada que será anexada à VM criada pelo processo de importação. Não há restrições de permissão para essa conta de serviço. É possível personalizá-la conforme necessário. Se não for especificada, a conta de serviço padrão do Compute Engine será anexada à VM.
    • SCOPES: especifique o nível de acesso da opção --service-account. Se não for especificado, os escopos padrão serão usados. Para mais informações, consulte a sinalização --scopes.

REST

  1. Adicione o dispositivo virtual ao Cloud Storage.

  2. Crie uma conta de serviço e atribua o mínimo de papéis. Para mais informações sobre como criar contas de serviço, consulte Como criar e gerenciar contas de serviço.

    A conta de serviço do Compute Engine especificada precisa ter, no mínimo, os seguintes papéis atribuídos:

    • roles/compute.storageAdmin
    • roles/storage.objectViewer

    Esses papéis mínimos são necessários para a conta de serviço especificada para o argumento -compute-service-account. Saiba mais em Conceder os papéis necessários à conta de serviço do Compute Engine.

  3. Na API, crie uma solicitação POST para a API Cloud Build.

    POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds
    {
      "timeout":"7200s",
      "steps":[
        {
          "args":[
            "-instance-names=VM_NAME",
            "-ovf-gcs-path=SOURCE_FILE",
            "-compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL",
            "-service-account=SERVICE_ACCOUNT_EMAIL",
            "-zone=ZONE",
            "-scopes=SCOPES",
            "-client-id=api",
            "-timeout=7000s"
          ],
          "name":"gcr.io/compute-image-tools/gce_ovf_import:release",
          "env":[
            "BUILD_ID=$BUILD_ID"
          ]
        }
      ],
      "tags":[
        "gce-ovf-import"
      ]
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto em que a imagem será importada;
    • VM_NAME: nome da VM a ser criada.
    • SOURCE_FILE: o URI da imagem no Cloud Storage; Por exemplo, gs://my-bucket/Ubuntu.ova.
    • ZONE: a zona onde a imagem será criada. Se ficar em branco, a zona padrão do projeto será usada.
    • TEMP_SERVICE_ACCOUNT_EMAIL: o endereço de e-mail associado à conta de serviço personalizada criada na etapa anterior. Essa conta de serviço é usada pelas VMs temporárias. Se não for especificada, a VM usará a conta de serviço padrão do Compute Engine.
    • SERVICE_ACCOUNT_EMAIL: o endereço de e-mail associado à conta de serviço personalizada que será anexada à VM criada pelo processo de importação. Não há restrições de permissão para essa conta de serviço. É possível personalizá-la conforme necessário. Se não for especificada, a conta de serviço padrão do Compute Engine será anexada à VM.
    • SCOPES: especifique o nível de acesso da opção -service-account. Se não for especificado, os escopos padrão serão usados. Para mais informações, consulte a sinalização --scopes.

A seguir