Copiar VMs entre projetos

Este documento descreve como copiar a sua VM para um projeto diferente.

Antes de começar

Funções necessárias

Para receber as autorizações de que precisa para copiar a VM entre projetos, peça ao seu administrador para lhe conceder a função de IAM Administrador de instâncias do Compute (v1) (roles/compute.instanceAdmin.v1) no projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para copiar VMs entre projetos. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para copiar VMs entre projetos:

  • compute.instances.create no projeto
  • Para usar uma imagem personalizada para criar a VM: compute.images.useReadOnly na imagem
  • Para usar um instantâneo para criar a VM: compute.snapshots.useReadOnly no instantâneo
  • Para usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
  • Para especificar uma sub-rede para a sua VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
  • Para especificar um endereço IP estático para a VM: compute.addresses.use no projeto
  • Para atribuir um endereço IP externo à VM quando usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
  • Para atribuir uma rede antiga à VM: compute.networks.use no projeto
  • Para atribuir um endereço IP externo à VM quando usar uma rede antiga: compute.networks.useExternalIp no projeto
  • Para definir os metadados da instância de VM para a VM: compute.instances.setMetadata no projeto
  • Para definir etiquetas para a VM: compute.instances.setTags na VM
  • Para definir etiquetas para a VM: compute.instances.setLabels na VM
  • Para definir uma conta de serviço para a VM usar: compute.instances.setServiceAccount na VM
  • Para criar um novo disco para a VM: compute.disks.create no projeto
  • Para anexar um disco existente no modo de leitura ou leitura/escrita: compute.disks.use no disco
  • Para anexar um disco existente no modo de leitura: compute.disks.useReadOnly no disco

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Copie uma VM para outro projeto

  1. No projeto de origem, crie um instantâneo do disco de arranque da VM com um dos seguintes comandos:

    Disco de arranque zonal

    Se a sua VM tiver um disco de arranque zonal, crie um instantâneo com o seguinte comando:

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --snapshot-type SNAPSHOT_TYPE \
        --source-disk-zone SOURCE_DISK_ZONE
    

    Substitua o seguinte:

    • SNAPSHOT_NAME: um nome para o resumo.
    • SOURCE_DISK: o nome do volume do Persistent Disk zonal a partir do qual quer criar um instantâneo.
    • SNAPSHOT_TYPE: o tipo de instantâneo, STANDARD ou ARCHIVE. Se não for especificado um tipo de instantâneo, é criado um instantâneo STANDARD. Escolha Arquivar para uma retenção de dados mais rentável.
    • SOURCE_DISK_ZONE: a zona do volume do Persistent Disk zonal a partir do qual quer criar um instantâneo.

    Disco de arranque regional

    Se a sua VM tiver um disco de arranque regional, crie um instantâneo com o seguinte comando:

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk SOURCE_DISK \
        --source-disk-region=SOURCE_DISK_REGION \
        --snapshot-type=SNAPSHOT_TYPE
    

    Substitua o seguinte:

    • SNAPSHOT_NAME: um nome para o resumo.
    • SOURCE_DISK: O nome do volume do Persistent Disk regional a partir do qual quer criar um instantâneo.
    • SOURCE_DISK_REGION: a região do volume do Persistent Disk regional a partir do qual quer criar um instantâneo.
    • SNAPSHOT_TYPE: o tipo de instantâneo, STANDARD ou ARCHIVE. Se não for especificado um tipo de instantâneo, é criado um instantâneo STANDARD.

  2. Crie uma imagem personalizada a partir da captura de ecrã com o seguinte comando:

    gcloud compute images create IMAGE_NAME \
        --source-snapshot=SOURCE_SNAPSHOT \
        [--storage-location=LOCATION]
    

    Substitua o seguinte:

    • IMAGE_NAME: um nome para a nova imagem
    • SOURCE_SNAPSHOT: o instantâneo a partir do qual quer criar a imagem
    • LOCATION: Opcional: um indicador que lhe permite designar a região ou a região múltipla onde a sua imagem está armazenada. Por exemplo, especifique us para armazenar a imagem na us região multirregional ou us-central1 para a armazenar na região us-central1. Se não fizer uma seleção, o Compute Engine armazena a imagem na multirregião mais próxima da localização de origem da imagem.
  3. Opcional: partilhe a imagem personalizada com os utilizadores que criam VMs no projeto de destino. Para mais informações sobre a partilha de imagens personalizadas, consulte o artigo Partilhar uma imagem personalizada numa organização.

  4. No projeto de destino, crie uma VM a partir da imagem personalizada com o seguinte comando:

    gcloud compute instances create VM_NAME \
        --image-project IMAGE_PROJECT \
        IMAGE_FLAG \
        --subnet SUBNET
    

    Substitua o seguinte:

    • VM_NAME: o nome da VM
    • IMAGE_PROJECT: o ID do projeto que contém a imagem Google Cloud
    • IMAGE_FLAG: especifique uma das seguintes opções:
      • Use a flag --image IMAGE_NAME para especificar uma imagem personalizada.

        Por exemplo, --image my-debian-image-v2.

      • Se criou as suas imagens personalizadas como parte de uma família de imagens personalizadas, use a flag --image-family IMAGE_FAMILY_NAME para especificar essa família de imagens personalizadas.

        Esta ação cria a VM a partir da imagem do SO e da versão do SO não descontinuadas mais recentes na sua família de imagens personalizadas. Por exemplo, se especificar --image-family my-debian-family, o Compute Engine cria uma VM a partir da imagem do SO mais recente na sua família de imagens my-debian-family personalizada.

    • SUBNET: se a sub-rede e a instância estiverem no mesmo projeto, substitua SUBNET pelo nome de uma sub-rede que esteja na mesma região que a instância.

      Para especificar uma sub-rede numa rede de VPC partilhada, substitua SUBNET por uma string do seguinte formulário:

              projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
             

      Substitua o seguinte:

      • HOST_PROJECT_ID: o ID do projeto do projeto anfitrião da VPC partilhada
      • REGION: a região da sub-rede
      • SUBNET_NAME: o nome da sub-rede

      A região da sub-rede de uma rede VPC partilhada também tem de corresponder à região que contém a instância.

O que se segue?

  • Personalize a rede VPC do projeto de destino.