Se você tiver discos virtuais no ambiente local com software e configurações necessários (às vezes chamados de discos dourados ou imagens douradas), poderá economizar tempo importando esses discos virtuais no Compute Engine e usar a imagem resultante para criar máquinas virtuais. A ferramenta de importação é compatível com a maioria dos formatos de arquivo de disco virtual, incluindo VMDK e VHD.
Se você exportou o disco do Compute Engine, é possível criar imagens do disco.
Para informações sobre como criar um sistema automatizado para migrar várias máquinas virtuais (VMs, na sigla em inglês), consulte Como migrar VMs para o Compute Engine.
Antes de começar
- Para usar os exemplos de linha de comando deste guia, siga estas etapas:
- Instale ou atualize a ferramenta de linha de comando gcloud para a versão mais recente.
- Defina uma região e uma zona padrão.
- Para usar os exemplos da API deste guia, configure o acesso a ela.
- Se o projeto para o qual você quer importar a imagem tiver uma
política de imagem confiável definida,
adicione
projects/compute-image-tools
à lista de editores permitidos.
Ativar a API Cloud Build
A ferramenta de importação usa o Cloud Build, que precisa estar ativado no projeto, e a conta de serviço do Cloud Build precisa ter permissão para criar e gerenciar recursos no projeto.
Se esses requisitos estiverem ausentes quando você executar a ferramenta de importação, ela tentará ativar o serviço do Cloud Build e definir as permissões necessárias para você. No entanto, é possível concedê-las manualmente para garantir que as permissões necessárias estejam aplicadas.
Console
Ative a API Cloud Build.
Ao ativar a API Cloud Build a partir do Console, o Compute Engine concede à conta de serviço do Cloud Build os papéis a seguir para que o serviço possa importar instâncias para o Compute Engine:
roles/iam.serviceAccountTokenCreator
roles/compute.admin
roles/iam.serviceAccountUser
A ferramenta de importação também usa a conta de serviço padrão do Compute Engine. Por padrão, a conta de serviço do Compute Engine tem o papel de editor de projetos do IAM. Se esse papel for removido, o processo de importação poderá falhar. Para adicionar o papel novamente à conta de serviço, consulte Como conceder acesso. Para mais informações sobre a conta de serviço padrão do Compute Engine, consulte Conta de serviço padrão do Compute Engine.
gcloud
Para configurar o serviço Cloud Build usando a ferramenta de linha de comando gcloud
, siga estas etapas:
Ative o Cloud Build.
gcloud services enable cloudbuild.googleapis.com
A ferramenta de importação também usa a conta de serviço padrão do Compute Engine. Por padrão, a conta de serviço do Compute Engine tem o papel de editor de projetos do IAM. Se esse papel for removido, o processo de importação poderá falhar. Para adicionar o papel novamente à conta de serviço, consulte Como conceder acesso. Para mais informações sobre a conta de serviço padrão do Compute Engine, consulte Conta de serviço padrão do Compute Engine.
Adicione o papel
compute.admin
à conta de serviço da API Cloud Build.gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:project-num@cloudbuild.gserviceaccount.com \ --role roles/compute.admin
Adicione o papel
iam.serviceAccountUser
à conta de serviço da API Cloud Build.gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:project-num@cloudbuild.gserviceaccount.com \ --role roles/iam.serviceAccountUser
Adicione o papel
iam.serviceAccountTokenCreator
à conta de serviço da API Cloud Build.gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:project-num@cloudbuild.gserviceaccount.com \ --role roles/iam.serviceAccountTokenCreator
Substitua:
project-id
: o projectID do projetoproject-num
: o número do projeto.
Sistemas operacionais compatíveis
É possível importar discos inicializáveis e não inicializáveis. Para que seus discos virtuais sejam inicializáveis no Compute Engine, eles precisam executar um dos sistemas operacionais compatíveis a seguir.
Limitações
Esse recurso tem as seguintes limitações gerais:
Se você estiver importando um disco virtual executando o RHEL, o modelo Licenças adquiridas pelo usuário (BYOL) só será aceito se o pacote python-boto (em inglês) estiver instalado no disco virtual antes da importação.
Os sistemas operacionais em discos virtuais precisam ser compatíveis com ACPI.
Esse recurso tem as seguintes limitações no Linux:
Os discos virtuais do Linux precisam usar
grub
como carregador de inicialização.Os discos virtuais do Linux precisam atender aos mesmos requisitos das imagens personalizadas, incluindo compatibilidade com dispositivos do controlador de armazenamento Virtio-SCSI.
Esse recurso tem as seguintes limitações no Windows:
Quando instalado nos discos virtuais do Windows, o software de lista de permissões de aplicativos, como o CB Protection da Carbon Black (em inglês), pode causar uma falha no processo de importação. Talvez seja necessário desinstalar esse software antes da importação.
Em VMs baseadas em Windows, o adaptador de loopback do Microsoft KM-TEST impede o acesso de rede ao servidor de metadados. É necessário desativá-lo ou removê-lo antes da importação.
Permissões
A ferramenta de importação de imagens realiza várias etapas quando você importa um arquivo de disco virtual, incluindo upload do arquivo para o Cloud Storage, criação de um novo bucket, download do arquivo para o Compute Engine e criação de uma imagem no Compute Engine a partir do arquivo de disco. Esse processo ocorre automaticamente. Para possibilitar uma experiência perfeita ao usar esse recurso, o Google recomenda que sua conta tenha os seguintes papéis:
roles/storage.admin
roles/viewer
roles/resourcemanager.projectIamAdmin
O processo de importação usa a conta de serviço padrão do Compute Engine como parte do fluxo de trabalho. Por padrão, essa conta tem a permissão roles/editor
, que é suficiente para o processo. No entanto, se você tiver modificado
os papéis e as permissões padrão da conta de serviço do Compute Engine,
verifique se ela ainda tem os seguintes
papéis:
roles/compute.storageAdmin
roles/storage.objectViewer
Como verificar a compatibilidade
Antes de tentar importar o disco para sua VM, faça o download da ferramenta de pré-verificação (em inglês) e execute-a dentro da VM. Ela procura quaisquer problemas de compatibilidade (em inglês) que causem falha no processo de importação ou que impeçam o disco de funcionar corretamente no Compute Engine.
Como importar discos virtuais
É possível importar discos virtuais usando o
Console do Google Cloud, a
ferramenta de linha de comando gcloud
ou a
API Cloud Build.
Como importar um disco virtual inicializável
Console
- No Console do Google Cloud, faça upload do arquivo do disco virtual para o Cloud Storage.
Acesse a página Criar uma imagem.
Especifique um Nome para a imagem.
Em Origem, selecione Disco virtual (VMDK, VHD...).
Navegue até o local de armazenamento do arquivo do Cloud Storage ou insira-o manualmente.
Selecione o sistema operacional disponível no disco importado. Também é possível fazer as alterações a seguir:
Instale pacotes de convidado. O Google recomenda que você instale o ambiente de convidado. Para mais informações sobre o ambiente de convidado, clique aqui.
Para sistemas operacionais Windows ou Red Hat Enterprise Linux (RHEL), também é possível escolher uma opção de licenciamento. Além disso, é possível trazer sua própria licença ou permitir que o Compute Engine forneça uma. Para mais informações sobre como trazer sua própria licença no Windows, consulte Trazer sua própria licença.
Opcional: especifique mais propriedades para sua imagem. Por exemplo, organize essa imagem como parte de uma família de imagens.
Clique em Criar para importar a imagem.
gcloud
Use o comando gcloud compute images import
para criar uma imagem inicializável do Compute Engine. Embora o Compute Engine possa iniciar a maioria das imagens de disco de inicialização, o comando import
garante que o disco tenha os drivers necessários e os pacotes de ambiente de convidado mais recentes, que são necessários para iniciar uma instância e se conectar a ela usando SSH ou RDP.
Importe os arquivos do disco virtual de um bucket do Cloud Storage ou da estação de trabalho local.
Se você importar o arquivo do disco virtual da estação de trabalho, a ferramenta de importação fará upload do arquivo para um bucket do Cloud Storage automaticamente.
Se preferir, faça você mesmo o upload do arquivo do disco virtual para o Cloud Storage antes de iniciar o processo de importação. Porém, é necessário fazer o upload do arquivo para um bucket do Cloud Storage no mesmo projeto que será usado no processo.
gcloud compute images import image-name \ --source-file source-file \ --os os
Substitua:
image-name
: o nome da imagem de destino.source-file
: o arquivo de disco virtual. Pode ser um arquivo local ou armazenado no Cloud Storage. Se o disco virtual for um arquivo local, forneça um caminho absoluto ou relativo. Se o arquivo de disco virtual já estiver armazenado no Cloud Storage, será preciso que ele exista em um bucket do Cloud Storage do projeto usado no processo de importação. Especifique o caminho completo do arquivo no formatogs://bucket-name/object-name
.os
: o sistema operacional de--source-file
. Para ver uma lista de valores compatíveis, revise as opções de sinalização--os
do comandogcloud compute images import
.Para conferir instruções sobre como importar imagens com licenças atuais para o Google Cloud, consulte Como trazer suas próprias licenças.
Se você especificar um arquivo local, o upload poderá demorar muito, dependendo do tamanho do disco virtual e da velocidade da conexão de rede. A operação de importação pode demorar bastante para ser executada, dependendo do tamanho do disco.
Comando de amostra
No exemplo a seguir, importamos um disco virtual debian-9
denominado my_server.vmdk
armazenado em gs://your_gcs_bucket
.
gcloud compute images import my-imported-image \ --source-file gs://your_gcs_bucket/my_server.vmdk \ --os debian-9
Parâmetros opcionais
Por padrão, os pacotes de ambiente de convidado são adicionados a todas as imagens de disco de inicialização importadas. Se você não quiser esses pacotes, adicione a sinalização --no-guest-environment
ao comando de importação.
API
Adicione o disco virtual ao Cloud Storage.
Na API, crie uma solicitação
.POST
para a API Cloud Build.POST https://cloudbuild.googleapis.com/v1/projects/project-id/builds { "steps":[ { "args":[ "-image_name=image-name", "-source_file=source-file", "-os=os", "-timeout=7000s", "-client_id=api" ], "name":"gcr.io/compute-image-tools/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
Substitua:
project-id
: o ID do projeto em que a imagem será importada;image-name
: o nome da imagem a ser importada;source-file
: o URI da imagem no Cloud Storage. Por exemplo,gs://my-bucket/my-image.vmdk
.os
: o sistema operacional da imagem.
Para outros valores
args
que podem ser fornecidos, consulte a seção de sinalizações opcionais da página do GitHub de importação de imagens de VM (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-09-20T15:55:29.353258929Z", "steps": [ { "name": "gcr.io/compute-image-tools/gce_vm_image_import:release", "env": [ "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940" ], "args": [ "-timeout=7000s", "-image_name=my-image", "-client_id=api", "-data-disk", "-source_file=gs://my-bucket/my-image.vmdk" ] } ], "timeout": "7200s", "projectId": "myproject-12345", "logsBucket": "gs://123456.cloudbuild-logs.googleusercontent.com", "options": { "logging": "LEGACY" }, "logUrl": "https://console.cloud.google.com/gcr/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=123456" } }
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 um disco virtual não inicializável
Console
- No Console do Google Cloud, faça upload do arquivo do disco virtual para o Cloud Storage.
Acesse a página Criar uma imagem.
Especifique um Nome para a imagem.
Em Origem, selecione Disco virtual (VMDK, VHD...).
Navegue até o local de armazenamento do arquivo do Cloud Storage ou insira-o manualmente.
No sistema operacional, selecione Nenhum sistema operacional. Apenas dados.
Opcional: especifique mais propriedades para sua imagem. Por exemplo, organize essa imagem como parte de uma família de imagens.
Clique em Criar para importar a imagem.
gcloud
É possível usar o comando gcloud compute images import
para criar uma imagem do Compute Engine que não seja inicializável.
Se seu disco virtual não tiver um sistema operacional inicializável instalado, importe-o usando a sinalização --data-disk
no lugar da sinalização --os
. Esse procedimento ignora a etapa que instala os drivers e os pacotes do ambiente de convidado para tornar a imagem inicializável no Compute Engine.
gcloud compute images import image-name \ --source-file source-file \ --data-disk
Substitua:
image-name
: o nome da imagem de destino;source-file
: o arquivo de disco virtual. Pode ser um arquivo local ou armazenado no Cloud Storage. Se o disco virtual for um arquivo local, será possível usar um caminho absoluto ou relativo. Se o arquivo de disco virtual já estiver armazenado no Cloud Storage, será preciso que ele exista em um bucket do Cloud Storage do projeto usado no processo de importação. Especifique o caminho completo do arquivo no formatogs://bucket-name/object-name
.
Comando de amostra
No exemplo a seguir, importamos um disco virtual denominado my-disk.vmdk
armazenado em gs://my-gcs-bucket/
.
gcloud compute images import my-imported-image \ --source-file gs://my-gcs-bucket/my-disk.vmdk \ --data-disk
API
Adicione o disco virtual ao Cloud Storage.
Na API, crie uma solicitação
.POST
para a API Cloud Build.POST https://cloudbuild.googleapis.com/v1/projects/project-id/builds { "steps":[ { "args":[ "-image_name=image-name", "-source_file=source-file", "-timeout=7000s", "-client_id=api", "-data_disk" ], "name":"gcr.io/compute-image-tools/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
Substitua os seguintes valores
args
:project-id
: o ID do projeto em que a imagem será importada;image-name
: o nome da imagem a ser importada;source-file
: o URI da imagem no Cloud Storage; Por exemplo,gs://my-bucket/my-image.vmdk
.
Como importar discos usando redes que não aceitam endereços IP externos
É possível importar discos virtuais usando uma rede que não aceite IPs externos.
Basta usar a API Cloud Build e especificar o argumento
-no_external_ip
.
Nesse método, o Cloud Build tentará importar a imagem sem usar um IP externo.
Adicione o disco virtual ao Cloud Storage.
O processo de importação de imagem requer que os gerenciadores de pacotes sejam instalados no sistema operacional do disco virtual. 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.
Configure Acesso privado do Google. Para mais informações, consulte Como configurar o acesso particular do Google.
Na API, crie uma solicitação
.POST
para a API Cloud Build.POST https://cloudbuild.googleapis.com/v1/projects/project-id/builds { "steps":[ { "args":[ "-image_name=image-name", "-source_file=source-file", "-os=os", "-no_external_ip", "-timeout=7000s", "-client_id=api" ], "name":"gcr.io/compute-image-tools/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
Substitua:
project-id
: o ID do projeto em que a imagem será importada;image-name
: o nome da imagem a ser importada;source-file
: o URI da imagem no Cloud Storage; Por exemplo,gs://my-bucket/my-image.vmdk
.os
: o sistema operacional da imagem.
Como importar um disco virtual com o carregador de inicialização UEFI
É possível importar discos virtuais com um carregador de inicialização de Interface unificada de firmware extensível (UEFI, na sigla em inglês). Para isso, use a
API Cloud Build e especifique o argumento -uefi_compatible
.
Adicione o disco virtual ao Cloud Storage.
Na API, crie uma solicitação
.POST
para a API Cloud Build.POST https://cloudbuild.googleapis.com/v1/projects/project-id/builds { "steps":[ { "args":[ "-image_name=image-name", "-source_file=source-file", "-os=os", "-uefi_compatible", "-timeout=7000s", "-client_id=api" ], "name":"gcr.io/compute-image-tools/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
Substitua:
project-id
: o ID do projeto em que a imagem será importada;image-name
: o nome da imagem a ser importada;source-file
: o URI da imagem no Cloud Storage; Por exemplo,gs://my-bucket/my-image.vmdk
.os
: o sistema operacional da imagem.
Como importar um disco virtual usando a VPC compartilhada
Como a ferramenta de importação usa a API Cloud Build, antes de
importar um disco virtual usando uma VPC compartilhada, é necessário adicionar
o papel compute.networkUser
à conta de serviço da
API Cloud Build.
gcloud projects add-iam-policy-binding host-project-id \ --member serviceAccount:service-project-num@cloudbuild.gserviceaccount.com \ --role roles/compute.networkUser
Substitua:
host-project-id
: ID do projeto em que a VPC compartilhada está localizada.service-project-num
: número do projeto para onde você quer importar a imagem.
gcloud
Use o comando gcloud compute images import
para importar o disco virtual. O comando a seguir mostra as
especificações para importar um disco não inicializável (--data-disk
) ou
inicializável (--os
). Escolha uma opção.
gcloud compute images import image-name \ --source-file source-file \ [--data-disk|--os os] \ --project service-project-id \ --zone zone \ --network network \ --subnet subnet
Substitua:
image-name
: nome da imagem a ser importada;source-file
: o arquivo de disco virtual. Pode ser um arquivo local ou armazenado no Cloud Storage. Se o disco virtual for um arquivo local, forneça um caminho absoluto ou relativo. Se o arquivo de disco virtual já estiver armazenado no Cloud Storage, será preciso que ele exista em um bucket do Cloud Storage do projeto usado no processo de importação. Especifique o caminho completo do arquivo no formatogs://bucket-name/object-name
.- Especifique uma das seguintes opções:
--data-disk
: use esta sinalização se o disco não tiver um sistema operacional inicializável instalado.os
: sistema operacional do--source-file
. Para ver uma lista de valores compatíveis, revise as opções de sinalização--os
do comandogcloud compute images import
.
service-project-id
: ID do projeto em que a imagem será importada;zone
: zona para onde quer importar a imagem; Essa zona precisa corresponder à região da sub-rede. Por exemplo, sesubnet
forus-west1
. É necessário que a zona de importação seja uma das seguintes opções:us-west1-a
,us-west1-b
ouus-west1-c
.network
: caminho completo de uma rede VPC compartilhada. Por exemplo,projects/host-project-id/global/networks/vpc-network-name
.subnet
: caminho completo de uma sub-rede VPC compartilhada. Por exemplo,projects/host-project-id/global/networks/vpc-subnet-name
.Comando de amostra
gcloud compute images import example-image \ --source-file gs://source-bucket/source-file.vmdk \ --os centos-7 \ --project my-image-project \ --zone us-west1-c \ --network projects/my-vpc-project/global/networks/my-shared-vpc \ --subnet projects/my-vpc-project/regions/us-west1/subnetworks/my-shared-subnet
API
Adicione o disco virtual ao Cloud Storage.
Na API, crie uma solicitação
.POST
para a API Cloud Build.POST https://cloudbuild.googleapis.com/v1/projects/service-project-id/builds { "steps":[ { "args":[ "-image_name=image-name", "-source_file=source-file", "-os=os", "-zone=zone", "-network=network", "-subnet=subnet", "-timeout=7000s", "-client_id=api" ], "name":"gcr.io/compute-image-tools/gce_vm_image_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "timeout":"7200s", "tags":[ "gce-daisy", "gce-daisy-image-import" ] }
Substitua os seguintes valores
args
:service-project-id
: ID do projeto em que a imagem será importada;image-name
: o nome da imagem a ser importada;source-file
: o URI da imagem no Cloud Storage; Por exemplo,gs://my-bucket/my-image.vmdk
.os
: sistema operacional do--source-file
.zone
: zona para onde quer importar a imagem; Essa zona precisa corresponder à região da sub-rede. Por exemplo, sesubnet
forus-west1
. É necessário que a zona de importação seja uma das seguintes opções:us-west1-a
,us-west1-b
ouus-west1-c
.network
: caminho completo de uma rede VPC compartilhada. Por exemplo,projects/host-project-id/global/networks/vpc-network-name
.subnet
: caminho completo de uma sub-rede VPC compartilhada. Por exemplo,projects/host-project-id/global/networks/vpc-subnet-name
.
Como tornar uma imagem inicializável
Se você tiver uma imagem personalizada do Compute Engine que tenha um sistema operacional inicializável, mas não tenha os drivers ou pacotes de ambiente convidados do Compute Engine, poderá usar a ferramenta de importação de imagens para torná-la inicializável no Compute Engine.
Use a sinalização --source-image
para especificar uma imagem personalizada que será inicializável, em vez de usar a sinalização --source-file
, que especifica um novo disco para importar.
gcloud compute images import image-name \ --source-image source-image-name \ --os os
Substitua:
image-name
: o nome da imagem de destinosource-image-name
: o nome da imagem de origemos
: o sistema operacional de--source-image
. Para ver uma lista de valores compatíveis, revise as opções de sinalização--os
do comandogcloud compute images import
.Para conferir instruções sobre como importar imagens com licenças atuais para o Google Cloud, consulte Como trazer suas próprias licenças.
Comando de amostra
No exemplo a seguir, transformamos uma imagem do Compute Engine denominada my-image
em uma imagem inicializável chamada my-bootable-image
.
Neste exemplo, o sistema operacional instalado na imagem é o Ubuntu 16.04.
gcloud compute images import my-bootable-image \ --source-image my-image \ --os ubuntu-1604
Limpeza de recursos
Há cobranças para os arquivos armazenados no Cloud Storage e as imagens no Compute Engine. A ferramenta de importação envia o arquivo de disco virtual para o Cloud Storage e cria uma imagem personalizada do Compute Engine.
Depois de verificar se a imagem foi importada e inicializada corretamente como uma instância do Compute Engine, você pode excluir o arquivo de disco virtual do Cloud Storage. A ferramenta imprime o URI do arquivo à medida que o carrega no Cloud Storage. Esse URI tem o seguinte formato: gs://bucket-name/tmpimage/image-name
.
Se você importou uma imagem usando a sinalização --data-disk
e executou a ferramenta import
uma segunda vez com a sinalização --source-image
para tornar essa imagem inicializável, a primeira imagem ainda existirá. Se você não precisar da imagem, pense em excluí-la. Se você especificar o mesmo nome de imagem para as sinalizações --image
e --source-image
, a imagem será substituída automaticamente, sem necessidade de nenhuma outra limpeza.
A seguir
- Crie uma nova instância de VM que use sua imagem inicializável.
- Compartilhe a imagem entre projetos.