プロジェクト間での VM のコピー


このドキュメントでは、VM を別のプロジェクトにコピーする方法について説明します。

始める前に

必要なロール

プロジェクト間で VM をコピーするために必要な権限を取得するには、プロジェクトに対する Compute インスタンス管理者(v1)roles/compute.instanceAdmin.v1)IAM ロールの付与を管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。

この事前定義ロールには、プロジェクト間で VM をコピーするために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

プロジェクト間で VM をコピーするには、次の権限が必要です。

  • プロジェクトに対する compute.instances.create
  • カスタム イメージを使用して VM を作成する: イメージに対する compute.images.useReadOnly
  • スナップショットを使用して VM を作成する: スナップショットに対する compute.snapshots.useReadOnly
  • インスタンス テンプレートを使用して VM を作成する: インスタンス テンプレートに対する compute.instanceTemplates.useReadOnly
  • VM にレガシー ネットワークを割り当てる: プロジェクトに対する compute.networks.use
  • VM の静的 IP アドレスを指定する: プロジェクトに対する compute.addresses.use
  • レガシー ネットワークを使用する際に VM に外部 IP アドレスを割り当てる: プロジェクトに対する compute.networks.useExternalIp
  • VM のサブネットを指定する: プロジェクトまたは選択したサブネットに対する compute.subnetworks.use
  • VPC ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトまたは選択したサブネットに対する compute.subnetworks.useExternalIp
  • VM の VM インスタンス メタデータを設定する: プロジェクトに対する compute.instances.setMetadata
  • VM にタグを設定する: VM に対する compute.instances.setTags
  • VM にラベルを設定する: VM に対する compute.instances.setLabels
  • VM が使用するサービス アカウントを設定する: VM に対する compute.instances.setServiceAccount
  • VM 用の新しいディスクを作成する: プロジェクトに対する compute.disks.create
  • 既存のディスクを読み取り専用モードまたは読み取り / 書き込みモードでアタッチする: ディスクに対する compute.disks.use
  • 既存のディスクを読み取り専用モードでアタッチする: ディスクに対する compute.disks.useReadOnly

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

VM を別のプロジェクトにコピーする

  1. ソース プロジェクトで、次のいずれかのコマンドを使用して VM のブートディスクのスナップショットを作成します。

    ゾーン ブートディスク

    VM にゾーン ブートディスクがある場合、次のコマンドを使用してスナップショットを作成します。

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

    次のように置き換えます。

    • SNAPSHOT_NAME: スナップショットの名前。
    • SOURCE_DISK: スナップショットを作成するゾーン Persistent Disk ボリュームの名前。
    • SNAPSHOT_TYPE: スナップショットの種類(標準 または アーカイブ)。スナップショットの種類が指定されない場合は、標準 スナップショットが作成されます。データの保持にかかる費用対効果を高めるには、[アクティブ] を選択します。
    • SOURCE_DISK_ZONE: スナップショットを作成するゾーン Persistent Disk ボリュームのゾーン。

    リージョン ブートディスク

    VM にリージョン ブートディスクがある場合、次のコマンドを使用してスナップショットを作成します。

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

    次のように置き換えます。

    • SNAPSHOT_NAME: スナップショットの名前。
    • SOURCE_DISK: スナップショットを作成するリージョン Persistent Disk ボリュームの名前。
    • SOURCE_DISK_REGION: スナップショットを作成するリージョン Persistent Disk ボリュームのリージョン。
    • SNAPSHOT_TYPE: スナップショットの種類(標準 または アーカイブ)。スナップショットの種類が指定されていない場合は、STANDARD スナップショットが作成されます。

  2. 次のコマンドを使用して、スナップショットからカスタム イメージを作成します。

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

    次のように置き換えます。

    • IMAGE_NAME: 新しいイメージの名前
    • SOURCE_SNAPSHOT: イメージ作成元のスナップショット
    • LOCATION: 省略可。イメージが格納されるリージョンまたはマルチリージョンを指定するフラグ。たとえば、イメージを us マルチリージョンに保存するには us を指定し、us-central1 リージョンに保存するには us-central1 を指定します。選択しない場合、Compute Engine はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
  3. 省略可: 宛先プロジェクトで VM を作成するユーザーとカスタム イメージを共有します。カスタム イメージの共有の詳細については、組織内でカスタム イメージを共有するをご覧ください。

  4. 宛先プロジェクトで、次のコマンドを使用してカスタム イメージから VM を作成します。

    gcloud compute instances create VM_NAME \
        --image-project IMAGE_PROJECT \
        [--image IMAGE | --image-family IMAGE_FAMILY]
        --subnet SUBNET
    

    次のように置き換えます。

    • VM_NAME: VM の名前
    • IMAGE_PROJECT: イメージを含むプロジェクトの名前
    • IMAGE または IMAGE_FAMILY: 次のいずれかを指定します。
      • IMAGE: カスタム イメージの名前

        例: --image=my-debian-image-v2

      • IMAGE_FAMILY: カスタム イメージ ファミリーの一部としてカスタム イメージを作成した場合は、そのカスタム イメージ ファミリーを指定します。

        これにより、カスタム イメージ ファミリー内の最新の非推奨ではない OS イメージと OS バージョンから VM が作成されます。たとえば、--image-family=my-debian-family を指定すると、Compute Engine はカスタム my-debian-family イメージ ファミリーの最新の OS イメージから VM を作成します。

    • SUBNET: サブネットとインスタンスが同じプロジェクト内にある場合は、SUBNET をインスタンスと同じリージョンにあるサブネットの名前に置き換えます。

      共有 VPC ネットワークのサブネットを指定するには、SUBNET を次の形式の文字列に置き換えます。

              projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
             

      次のように置き換えます。

      • HOST_PROJECT_ID は、共有 VPC ホスト プロジェクトのプロジェクト ID です。
      • REGION は、サブネットのリージョンです。
      • SUBNET_NAME はサブネット名です。

      共有 VPC ネットワークのサブネットのリージョンも、インスタンスを含むリージョンと一致する必要があります。

次のステップ