このドキュメントでは、VM を別のプロジェクトにコピーする方法について説明します。
始める前に
- 永続ディスクのスナップショットに関するベスト プラクティスを確認し、スナップショット用にブートディスクを準備します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
-
必要なロール
プロジェクト間で 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 を別のプロジェクトにコピーする
ソース プロジェクトで、次のいずれかのコマンドを使用して 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 スナップショットが作成されます。
次のコマンドを使用して、スナップショットからカスタム イメージを作成します。
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 はイメージのソースのロケーションに最も近いマルチリージョンにイメージを保存します。
省略可: 宛先プロジェクトで VM を作成するユーザーとカスタム イメージを共有します。カスタム イメージの共有の詳細については、組織内でカスタム イメージを共有するをご覧ください。
宛先プロジェクトで、次のコマンドを使用してカスタム イメージから VM を作成します。
gcloud compute instances create VM_NAME \ --image-project IMAGE_PROJECT \ [--image IMAGE | --image-family IMAGE_FAMILY] --subnet SUBNET
次のように置き換えます。
VM_NAME
: VM の名前IMAGE_PROJECT
: イメージを含むプロジェクト IDIMAGE
または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 ネットワークのサブネットのリージョンも、インスタンスを含むリージョンと一致する必要があります。
次のステップ
- 宛先プロジェクトの VPC ネットワークをカスタマイズする。