Se você precisar mover os dados do disco de inicialização do Compute Engine para fora do projeto do Compute Engine, exporte uma imagem desse disco para o Cloud Storage como um arquivo tar.gz
. Caso precise criar uma imagem de disco permanente para usar durante a criação de novos discos permanentes no Compute Engine, leia Como criar uma imagem personalizada.
É possível fazer backup ou compartilhar uma imagem personalizada exportando a imagem para o Cloud Storage. Esse método é ideal para compartilhar imagens individuais com projetos que não têm acesso às suas imagens. Outra alternativa é compartilhar imagens concedendo o papel de usuário de imagens do Compute Engine na imagem ou no projeto que a contém.
O diagrama a seguir mostra alguns fluxos de trabalho típicos para a criação e reutilização de uma imagem personalizada.
Antes de começar
- Leia a página Imagens.
- Se o projeto do qual você quer exportar a imagem tiver uma política de imagem
confiável definida, adicione
projects/compute-image-import
eprojects/compute-image-tools
à lista de editores permitidos. - Saiba como atender aos requisitos antes de exportar 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 selecionando uma das seguintes opções:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Exportar do mesmo projeto em que a imagem reside
- Exportar a imagem manualmente
No console do Google Cloud, acesse a página Imagens.
Clique no nome da imagem que você quer exportar para acessar a página de detalhes dela. Não é possível exportar imagens públicas fornecidas pelo Google. Somente é possível exportar imagens que você já criou ou importou anteriormente.
Na página de detalhes da imagem, clique em Exportar para abrir a página Exportar imagem.
Na página Exportar imagem, escolha o Formato de exportação dela.
Escolha o local do Cloud Storage para exportar a imagem clicando em Procurar.
Escolha um local do Cloud Storage atual para exportar a imagem. Se preferir, siga as instruções para criar um novo intervalo do Cloud Storage e insira um nome para esse bucket.
Depois de escolher um Cloud Storage, escolha um nome de arquivo para a imagem exportada. É possível usar o nome de arquivo padrão ou escolher o próprio nome de arquivo.
Depois de escolher um Cloud Storage e digitar um nome de arquivo para a imagem, clique em Selecionar.
Na página Exportar imagem, clique em Exportar. Depois de escolher Exportar, o console do Google Cloud exibe o Histórico de exportação de imagens, em que é possível ver o processo de exportação de imagem. Para mais detalhes sobre o processo de exportação de imagem, clique no ID do Cloud Build para acessar a página Detalhes de exportação da imagem, em que é possível ver e fazer o download do registro de exportação de imagem.
Entre na página Armazenamento para acessar a imagem exportada.
DESTINATION_URI
: o destino de URI do Cloud Storage para o arquivo de imagem exportado.IMAGE_NAME
: o nome da imagem de disco a ser exportada.PROJECT_ID
: o código do projeto que contém a imagem que você quer exportar.SOURCE_IMAGE
: o nome da imagem a ser importada.IMAGE_FORMAT
: o formato da imagem exportada. Os formatos válidos incluemvmdk
,vhdx
,vpc
,vdi
eqcow2
.DESTINATION_URI
: o local do URI do Cloud Storage para onde você quer exportar o arquivo de imagem. Por exemplo,gs://my-bucket/my-exported-image.vmdk
.- Execute uma solicitação projects.builds.get usando o
build-id
retornado. - Revise os registros hospedados no
logUrl
fornecido. 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.objectAdmin
Saiba mais em Conceder os papéis necessários à conta de serviço do Compute Engine.
Use o comando
gcloud compute images export
para exportar a imagem.gcloud compute images export \ --destination-uri DESTINATION_URI \ --image IMAGE_NAME \ --compute-service-account SERVICE_ACCOUNT_EMAIL
Substitua:
DESTINATION_URI
: o destino de URI do Cloud Storage para o arquivo de imagem exportado.IMAGE_NAME
: o nome da imagem de disco a ser exportada.SERVICE_ACCOUNT_EMAIL
: o endereço de e-mail associado à conta de serviço do Compute Engine criada na etapa anterior.
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.objectAdmin
Saiba mais em Conceder os papéis necessários à conta de serviço do Compute Engine.
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":[ "-timeout=7000s", "-source_image=SOURCE_IMAGE", "-client_id=api", "-format=IMAGE_FORMAT", "-destination_uri=DESTINATION_URI", "-compute_service_account=SERVICE_ACCOUNT_EMAIL" ], "name":"gcr.io/compute-image-tools/gce_vm_image_export:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "tags":[ "gce-daisy", "gce-daisy-image-export" ] }
Substitua:
PROJECT_ID
: o código do projeto que contém a imagem que você quer exportar.SOURCE_IMAGE
: o nome da imagem a ser importada.IMAGE_FORMAT
: o for da imagem exportada. Os formatos válidos incluemvmdk
,vhdx
,vpc
,vdi
eqcow2
.DESTINATION_URI
: o local do URI do Cloud Storage para onde você quer exportar o arquivo de imagem. Por exemplo,gs://my-bucket/my-exported-image.vmdk
.SERVICE_ACCOUNT_EMAIL
: o endereço de e-mail associado à conta de serviço do Compute Engine criada na etapa anterior.
IMAGE_NAME
: o nome da imagem a ser exportada.DESTINATION_URI
: o local do URI do Cloud Storage para onde você quer exportar o arquivo de imagem.PROJECT_ID
: ID do projeto em que a imagem está localizada.NETWORK
: o caminho completo de uma rede VPC compartilhada. Por exemplo,projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
.SUBNET
: opcional. O caminho completo de uma sub-rede VPC compartilhada. Por exemplo,projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
.A especificação desse modo depende do modo de rede VPC.
- Se a rede VPC usar o modo legado, não especifique uma sub-rede.
- Se a rede VPC usar o modo automático, especificar a sub-rede será opcional.
- Se a rede VPC usar o modo personalizado, este campo precisa ser especificado.
ZONE
: opcional. A zona a ser usada para a exportação. Essa zona precisa corresponder à região da sub-rede. Por exemplo, seSUBNET
estiver na regiãous-west1
, a zona de exportação precisará ser uma das seguintes:us-west1-a
,us-west1-b
ouus-west1-c
.Se você especificou um
SUBNET
, também precisa especificar a zona.Adicione a imagem 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 { "timeout": "7200s", "steps":[ { "args":[ "-timeout=7000s", "-source_image=SOURCE_IMAGE", "-client_id=api", "-format=IMAGE_FORMAT", "-destination_uri=DESTINATION_URI", "-network=NETWORK", "-subnet=SUBNET", "-zone=ZONE" ], "name":"gcr.io/compute-image-tools/gce_vm_image_export:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "tags":[ "gce-daisy", "gce-daisy-image-export" ] }
Substitua:
PROJECT_ID
: o código do projeto que contém a imagem que você quer exportar.SOURCE_IMAGE
: o nome da imagem a ser importada.IMAGE_FORMAT
: o formato da imagem exportada. Os formatos válidos incluemvmdk
,vhdx
,vpc
,vdi
eqcow2
.DESTINATION_URI
: o local do URI do Cloud Storage para onde você quer exportar o arquivo de imagem. Por exemplo,gs://my-bucket/my-exported-image.vmdk
.NETWORK
: caminho completo de uma rede VPC compartilhada. Por exemplo,projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
.SUBNET
: o caminho completo de uma sub-rede VPC compartilhada. Por exemplo,projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
.A especificação desse modo depende do modo de rede VPC.
- Se a rede VPC usar o modo legado, não especifique uma sub-rede.
- Se a rede VPC usar o modo automático, especificar a sub-rede será opcional.
- Se a rede VPC usar o modo personalizado, este campo precisará ser especificado.
ZONE
: a zona a ser usada para a exportação. Essa zona precisa corresponder à região da sub-rede. Por exemplo, seSUBNET
estiver na regiãous-west1
, a zona de exportação precisará ser uma das seguintes:us-west1-a
,us-west1-b
ouus-west1-c
.Na maioria dos casos, especificar uma zona é opcional. Se
SUBNET
for especificado, a zona precisará ser especificada.
Para outros valores
args
que podem ser fornecidos, consulte a seção de sinalizações opcionais da página do GitHub sobre exportação de imagens de VM.Como opção, interrompa a instância em que o disco está anexado antes de criar a captura de tela. Isso garante a integridade do conteúdo do disco.
Crie um snapshot do disco. Nomeie o snapshot como
image-snapshot
.gcloud compute disks snapshot DISK_NAME \ --snapshot-names image-snapshot
Substitua
DISK_NAME
pelo nome do disco que você quer usar para criar o snapshot. Para encontrar o nome do disco, listar discos.Use o snapshot
image-snapshot
para criar um novo disco chamadoimage-disk
executando o seguinte comando:gcloud compute disks create image-disk \ --source-snapshot image-snapshot
Crie um disco temporário chamado
temporary-disk
para reter o arquivotar
e especifique que oSIZE
do disco seja pelo menos 50% maior do que o disco de imagem.É possível desanexar e excluir o disco depois.
gcloud compute disks create temporary-disk \ --size SIZE
em que
SIZE
é o tamanho em Gigabytes ou Terabytes do disco temporário. Por exemplo, especifique100GB
para criar um disco de 100 gigabytes.Crie uma instância e ative o escopo
storage-rw
nela. Além disso, anexeimage-disk
etemporary-disk
à instância como discos secundários com atributosdevice-name
específicos. SubstituaVM_NAME
pelo nome da instância a ser criada.gcloud compute instances create VM_NAME \ --scopes storage-rw \ --disk name=image-disk,device-name=image-disk \ --disk name=temporary-disk,device-name=temporary-disk
Observe que você está transferindo os escopos da conta de serviço para poder fazer upload do arquivo para o Cloud Storage nas etapas posteriores.
Se necessário, analise os detalhes de como iniciar uma nova instância.
Conecte-se à instância. Substitua
VM_NAME
pelo nome da instância a ser conectada.gcloud compute ssh VM_NAME
Formate e ative o disco temporário. A formatação do disco exclui o conteúdo do disco temporário.
sudo mkdir /mnt/tmp
sudo mkfs.ext4 -F /dev/disk/by-id/google-temporary-disk
sudo mount -o discard,defaults /dev/disk/by-id/google-temporary-disk /mnt/tmp
Opcional: ative o disco de imagem e faça outras alterações antes de criar o arquivo
tar
. Por exemplo, exclua os arquivos atuais do diretório/home
se não quiser que eles façam parte da imagem. Ative as partições do disco que precisam ser modificadas, altere os arquivos necessários e desative o disco quando terminar.Crie o diretório em que será ativado o disco ou a partição.
sudo mkdir /mnt/image-disk
Use o comando
ls
para determinar o disco ou a partição de disco que você precisa ativar.ls /dev/disk/by-id/
O comando imprime uma lista de IDs e partições de disco. Por exemplo, o disco a seguir tem uma tabela de partições com uma partição. O ID
google-image-disk
aponta para o disco completo a partir de que você quer criar uma imagem. O IDgoogle-image-disk-part1
aponta para a primeira partição nesse disco. Ative a partição caso seja necessário fazer alterações no disco e crie a imagem do disco completo.google-image-disk google-image-disk-part1
Ative o disco ou a partição. Se o disco tiver uma tabela de partições, ative as partições individuais. Por exemplo, ative
google-image-disk-part1
.sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk
Como alternativa, se o disco estiver com formatação bruta sem nenhuma tabela de partições, ative o disco
google-image-disk
completo.sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
Modifique os arquivos no diretório
/mnt/image-disk
para configurar os arquivos no disco. Por exemplo, é possível remover o arquivo/mnt/image-disk/home/[USER]/.ssh/authorized_keys
para impedir que as chaves SSH sejam compartilhadas.Quando terminar de modificar os arquivos, desative o disco.
sudo umount /mnt/image-disk/
Crie um arquivo
tar
da imagem.Após personalizar os arquivos no disco de imagens, crie um arquivo do disco bruto no disco temporário. O nome da imagem do disco bruto precisa ser "disk.raw":
sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096
Em seguida, crie o arquivo
tar.gz
:cd /mnt/tmp
sudo tar czvf myimage.tar.gz disk.raw
Este comando cria uma imagem da instância no seguinte local:
/mnt/tmp/myimage.tar.gz
Faça upload da imagem para o Cloud Storage.
Para fazer upload do arquivo
tar
para o Cloud Storage, use a Google Cloud CLI que vem pré-instalada na sua instância.Crie um bucket usando a CLI gcloud.
Verifique as diretrizes de nomenclatura de bucket e objeto antes de criar o bucket. Em seguida, crie o bucket usando o seguinte comando: Substitua
BUCKET_NAME
pelo nome do bucket a ser criado.me@example-instance:~$ gcloud storage buckets create gs://BUCKET_NAME
Copie o arquivo no novo bucket. Substitua
BUCKET_NAME
pelo nome do bucket onde o arquivo será copiado.me@example-instance:~$ gcloud storage cp /mnt/tmp/myimage.tar.gz gs://BUCKET_NAME
- Compartilhe imagens usando o papel de usuário de imagens.
- Saiba mais sobre os métodos de importação disponíveis para o Compute Engine.
REST
Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.
Limitações e restrições
As limitações a seguir são aplicáveis ao processo de exportação de imagens.
Limitações gerais
Quando você exporta uma imagem, uma sessão é criada na máquina de onde ela está sendo exportada. Essa sessão precisa permanecer ativa até que o processo de exportação seja concluído. Se a sessão for encerrada antes que o processo de exportação seja concluído, recursos temporários, como discos temporários, instâncias de VM ou buckets de armazenamento, podem não ser excluídos. Nesse caso, é necessário excluir esses recursos temporários manualmente.
O processo de exportação usa o Cloud Build para exportar uma imagem. Uma sessão do Cloud Build dura no máximo 24 horas. Se a imagem for muito grande e precisar de mais de 24 horas para ser exportada, exporte a imagem manualmente.
Limitações do VPC Service Controls
Para projetos protegidos com o VPC Service Controls, use um dos seguintes métodos:
Como exportar uma imagem com um comando
Exportar uma imagem para o Cloud Storage
É possível exportar suas imagens usando o console do Google Cloud, a Google Cloud CLI ou a REST.
Console
gcloud
A maneira preferencial de exportar uma imagem para o Cloud Storage é usar o comando
gcloud compute images export
. Esse comando usa o Daisy para encadear as várias etapas obrigatórias para exportar uma imagem. Partimos do princípio que você já criou uma imagem, por exemplo, com o comandogcloud compute images create
.Usando a Google Cloud CLI, execute:
gcloud compute images export \ --destination-uri DESTINATION_URI \ --image IMAGE_NAME
Substitua:
Por padrão, as imagens são exportadas no formato do Compute Engine, que é um arquivo
disk.raw
em formato tar e compactado. Para exportar imagens em outros formatos compatíveis com o utilitário de imagem de disco QEMU, use a sinalização--export-format
. Os formatos válidos incluemvmdk
,vhdx
,vpc
,vdi
eqcow2
.Exemplo
Por exemplo, o comando a seguir exporta uma imagem chamada
my-image
demy-project
para um bucket do Cloud Storage chamadomy-bucket
. Por padrão, a imagem é exportada como umdisk.raw file
e é compactada no formato de arquivotar.gz
.gcloud compute images export \ --destination-uri gs://my-bucket/my-image.tar.gz \ --image my-image \ --project my-project
Para sinalizações, consulte a documentação de referência
gcloud compute images export
.REST
Envie uma solicitação
POST
para a API Cloud Build.POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "timeout": "7200s", "steps":[ { "args":[ "-timeout=7000s", "-source_image=SOURCE_IMAGE", "-client_id=api", "-format=IMAGE_FORMAT", "-destination_uri=DESTINATION_URI" ], "name":"gcr.io/compute-image-tools/gce_vm_image_export:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "tags":[ "gce-daisy", "gce-daisy-image-export" ] }
Substitua:
Para outros valores
args
que podem ser fornecidos, consulte a seção de sinalizações opcionais da página do GitHub sobre exportação de imagens de VM.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-10-02T18:59:13.393492020Z", "steps": [ { "name": "gcr.io/compute-image-tools/gce_vm_image_export:release", "env": [ "BUILD_ID=3a2055bc-ccbd-4101-9434-d376b88b8940" ], "args": [ "-timeout=7056s", "-source_image=my-image", "-client_id=api", "-format=vmdk", "-destination_uri=gs://my-bucket/my-exported-image.vmdk" ] } ], "timeout": "7200s", "projectId": "myproject-12345", "logsBucket": "gs://123456.cloudbuild-logs.googleusercontent.com", "options": { "logging": "LEGACY" }, "logUrl": "https://console.cloud.google.com/cloud-build/builds/3a2055bc-ccbd-4101-9434-d376b88b8940?project=123456" } }
Há algumas maneiras de monitorar seu build:
Como exportar uma imagem de um projeto usando uma conta de serviço personalizada do Compute Engine
Durante uma exportação de imagem, uma instância de máquina virtual (VM) temporária é criada no seu projeto. A ferramenta de exportação de imagens nesta VM temporária 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 exportação de imagens na VM.
Por padrão, o processo de exportação usa o Agente de serviço padrão do Compute Engine do projeto. 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, crie uma conta de serviço e especifique-a para o processo de exportação.
É possível exportar as imagens usando a Google Cloud CLI ou o REST.
gcloud
Exemplo
Por exemplo, o comando a seguir exporta uma imagem chamada
my-image
demy-project
para um bucket do Cloud Storage chamadomy-bucket
com uma conta de serviço que tenha o e-mailimage-export-service-account@proj-12345.iam.gserviceaccount.com
. Por padrão, a imagem é exportada como um arquivodisk.raw
e é compactada no formato de arquivotar.gz
.gcloud compute images export \ --destination-uri gs://my-bucket/my-image.tar.gz \ --image my-image \ --project my-project \ --compute-service-account image-export-service-account@proj-12345.iam.gserviceaccount.com
Para sinalizações, consulte a documentação de referência
gcloud compute images export
.REST
Para outros valores
args
que podem ser fornecidos, consulte a seção de sinalizações opcionais da página do GitHub sobre exportação de imagens de VM.Exportar uma imagem usando a VPC compartilhada
Antes de exportar uma imagem que usa uma VPC compartilhada, 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.É possível exportar a imagem usando a Google Cloud CLI ou a REST.
gcloud
Use o comando
gcloud compute images export
para exportar a imagem.gcloud compute images export \ --image IMAGE_NAME \ --destination-uri DESTINATION_URI \ --project PROJECT_ID \ --network NETWORK \ --subnet SUBNET \ --zone ZONE
Substitua:
Por exemplo, o comando a seguir exporta uma imagem chamada
example-image
demy-project
para um bucket do Cloud Storage chamadomy-bucket
. Neste exemplo, a rede de nuvem privada virtual (my-shared-vp
) usa uma sub-rede personalizada (my-custom-subnet
). Por padrão, a imagem é exportada como um arquivodisk.raw
e é compactado no formato de arquivotar.gz
.Comando de amostra
gcloud compute images export \ --image example-image \ --destination-uri gs://my-bucket/my-image.tar.gz \ --project my-project \ --network projects/my-vpc-project/global/networks/my-shared-vpc \ --subnet projects/my-vpc-project/regions/us-west1/subnetworks/my-custom-subnet \ --zone us-west1-c
REST
Criar e exportar uma imagem manualmente
Se os comandos
gcloud compute images create
egcloud compute images export
não atenderem aos requisitos, crie e exporte uma imagem manualmente a partir de uma instância do Compute Engine. Esse processo tem etapas distintas para primeiro criar uma imagem e depois exportá-la.No exemplo a seguir, observe que o disco criado se chama image-disk.
Para criar e exportar uma imagem:
Você exportou seu arquivo para o Cloud Storage. Agora é possível compartilhar a imagem com outras pessoas ou usar o arquivo
tar
para adicionar uma nova imagem a um projeto no Console do Google Cloud.A seguir
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2024-12-22 UTC.
-