Compute Engine ブートディスクのデータを Compute Engine プロジェクトの外部に移動する必要がある場合は、ブートディスク イメージを tar.gz
ファイルとして Cloud Storage にエクスポートできます。Compute Engine で新しい永続ディスクを作成するときに使用する永続ディスク イメージを作成する必要がある場合は、カスタム イメージを作成するをご覧ください。
Cloud Storage にイメージをエクスポートすることで、カスタム イメージのバックアップや共有が可能になります。この方法は、イメージにアクセスできないプロジェクトと個々のイメージを共有する場合に最適です。また、イメージまたはイメージを含むプロジェクトについて Compute Engine イメージ ユーザーのロールを付与することで、イメージを共有することもできます。
次の図は、カスタム イメージの作成と再利用の一般的なワークフローを示しています。
始める前に
- イメージのページを参照してください。
- イメージのエクスポート元のプロジェクトに信頼できるイメージのポリシーが定義されている場合は、パブリッシャーの許可リストに
projects/compute-image-import
およびprojects/compute-image-tools
を追加します。 - イメージをエクスポートする前に要件を満たす方法については、VM イメージのインポートとエクスポートの前提条件をご覧ください。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud のサービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
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.
- イメージが存在するのと同じプロジェクトからエクスポート
- イメージを手動でエクスポート
Google Cloud Console で、[イメージ] ページに移動します。
エクスポートするイメージの名前をクリックして、詳細ページに移動します。Google が提供する公開イメージはエクスポートできません。エクスポートできるのは、以前に作成またはインポートしたイメージのみです。
イメージの詳細ページで [エクスポート] をクリックし、[イメージのエクスポート] ページを開きます。
[イメージのエクスポート] ページで、イメージの [エクスポート形式] を選択します。
[参照] をクリックして、イメージをエクスポートする Cloud Storage の場所を選択します。
既存の Cloud Storage の場所を選択して、イメージをエクスポートします。または、指示に従って新しい Cloud Storage バケットを作成し、新しい Cloud Storage バケットの名前を入力します。
Cloud Storage を選択したら、エクスポートしたイメージのファイル名を選択します。デフォルトのファイル名を使用することも、独自のファイル名を使用することもできます。
Cloud Storage を選択し、イメージのファイル名を入力したら、[選択] をクリックします。
[イメージのエクスポート] ページで [エクスポート] をクリックします。[エクスポート] を選択すると、Google Cloud コンソールにイメージ エクスポートの履歴が表示され、イメージのエクスポート プロセスを確認できます。イメージ エクスポート プロセスの詳細を確認するには、[Cloud Build ID] をクリックして [イメージのエクスポートの詳細] ページに移動すると、イメージ エクスポート ログを表示、ダウンロードできます。
[ストレージ] ページに移動して、エクスポートしたイメージにアクセスします。
DESTINATION_URI
: エクスポートされたイメージ ファイルの Cloud Storage URI の宛先。IMAGE_NAME
: エクスポートするディスク イメージの名前。PROJECT_ID
: エクスポートするイメージを含むプロジェクトのプロジェクト ID。SOURCE_IMAGE
: エクスポートするイメージの名前。IMAGE_FORMAT
: エクスポートするイメージの形式。有効な形式は、vmdk
、vhdx
、vpc
、vdi
、qcow2
です。DESTINATION_URI
: イメージ ファイルのエクスポート先となる Cloud Storage URI の場所。例:gs://my-bucket/my-exported-image.vmdk
- 返される
build-id
を使用して、projects.builds.get リクエストを実行します。 - 指定された
logUrl
でホストされているログを確認します。 サービス アカウントを作成して最小限のロールを割り当てます。サービス アカウントの作成に関する詳細については、サービス アカウントの作成と管理をご覧ください。
少なくとも、指定した Compute Engine サービス アカウントには次のロールが割り当てられている必要があります。
roles/compute.storageAdmin
roles/storage.objectAdmin
詳細については、必要なロールを Compute Engine サービス アカウントに付与するをご覧ください。
gcloud compute images export
コマンドを使用してイメージをエクスポートします。gcloud compute images export \ --destination-uri DESTINATION_URI \ --image IMAGE_NAME \ --compute-service-account SERVICE_ACCOUNT_EMAIL
次のように置き換えます。
DESTINATION_URI
: エクスポートされたイメージ ファイルの Cloud Storage URI の宛先。IMAGE_NAME
: エクスポートするディスク イメージの名前。SERVICE_ACCOUNT_EMAIL
: 前のステップで作成した Compute Engine サービス アカウントに関連付けられているメールアドレス。
サービス アカウントを作成して最小限のロールを割り当てます。サービス アカウントの作成に関する詳細については、サービス アカウントの作成と管理をご覧ください。
少なくとも、指定した Compute Engine サービス アカウントには次のロールが割り当てられている必要があります。
roles/compute.storageAdmin
roles/storage.objectAdmin
詳細については、必要なロールを Compute Engine サービス アカウントに付与するをご覧ください。
API で、Cloud Build API に対する
POST
リクエストを作成します。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" ] }
次のように置き換えます。
PROJECT_ID
: エクスポートするイメージを含むプロジェクトのプロジェクト ID。SOURCE_IMAGE
: エクスポートするイメージの名前。IMAGE_FORMAT
: エクスポートするイメージの形式。有効な形式は、vmdk
、vhdx
、vpc
、vdi
、qcow2
です。DESTINATION_URI
: イメージ ファイルのエクスポート先となる Cloud Storage URI の場所。例:gs://my-bucket/my-exported-image.vmdk
SERVICE_ACCOUNT_EMAIL
: 前のステップで作成した Compute Engine サービス アカウントに関連付けられているメールアドレス。
IMAGE_NAME
: エクスポートするイメージの名前。DESTINATION_URI
: イメージ ファイルのエクスポート先となる Cloud Storage URI の場所。PROJECT_ID
: イメージが配置されているプロジェクトの ID。NETWORK
: 共有 VPC ネットワークへのフルパス。例:projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
SUBNET
: 省略可。共有 VPC サブネットワークへのフルパス。例:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
このモードの指定は、VPC ネットワーク モードによって異なります。
- VPC ネットワークが以前のモードを使用する場合は、サブネットを指定しないでください。
- VPC ネットワークが自動モードを使用する場合、サブネットの指定は省略できます。
- VPC ネットワークがカスタムモードを使用している場合は、このフィールドを指定する必要があります。
ZONE
: 省略可。エクスポートに使用するゾーン。このゾーンはサブネットのリージョンと一致する必要があります。たとえば、SUBNET
がus-west1
リージョンにある場合、エクスポート ゾーンはus-west1-a
、us-west1-b
、us-west1-c
のいずれかにする必要があります。SUBNET
を指定した場合は、ゾーンも指定する必要があります。イメージを Cloud Storage に追加します。
API で、Cloud Build API に対する
POST
リクエストを作成します。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" ] }
次のように置き換えます。
PROJECT_ID
: エクスポートするイメージを含むプロジェクトのプロジェクト ID。SOURCE_IMAGE
: エクスポートするイメージの名前。IMAGE_FORMAT
: エクスポートするイメージの形式。有効な形式は、vmdk
、vhdx
、vpc
、vdi
、qcow2
です。DESTINATION_URI
: イメージ ファイルのエクスポート先となる Cloud Storage URI の場所。例:gs://my-bucket/my-exported-image.vmdk
NETWORK
: 共有 VPC ネットワークへのフルパス。例:projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME
SUBNET
: 共有 VPC サブネットワークへのフルパス。例:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
このモードの指定は、VPC ネットワーク モードによって異なります。
- VPC ネットワークが以前のモードを使用する場合は、サブネットを指定しないでください。
- VPC ネットワークが自動モードを使用する場合、サブネットの指定は省略できます。
- VPC ネットワークがカスタムモードを使用している場合は、このフィールドを指定する必要があります。
ZONE
: エクスポートに使用するゾーン。このゾーンはサブネットのリージョンと一致する必要があります。たとえば、SUBNET
がus-west1
リージョンにある場合、エクスポート ゾーンはus-west1-a
、us-west1-b
、us-west1-c
のいずれかにする必要があります。ほとんどの場合、ゾーンの指定はオプションです。
SUBNET
が指定されている場合は、ゾーンを指定する必要があります。
提供できる追加の
args
値については、VM イメージのエクスポートに関する GitHub のページのオプションのフラグ セクションを参照してください。任意: スナップショットを作成する前に、ディスクがアタッチされているインスタンスを停止します。インスタンスを停止すると、スナップショット内のディスク コンテンツの整合性が確保されます。
ディスクのスナップショットを作成します。スナップショットに
image-snapshot
という名前を付けます。gcloud compute disks snapshot DISK_NAME \ --snapshot-names image-snapshot
DISK_NAME
は、スナップショットの作成に使用するディスクの名前に置き換えます。ディスクの名前を確認するには、ディスクを一覧表示します。image-snapshot
スナップショットを使用してimage-disk
という名前の新しいディスクを作成するには、次のコマンドを実行します。gcloud compute disks create image-disk \ --source-snapshot image-snapshot
tar
ファイルを保持するtemporary-disk
という名前の一時ディスクを作成し、ディスクのSIZE
に対してイメージ ディスクより 50% 以上大きなサイズを指定します。後でディスクを接続解除および削除できます。
gcloud compute disks create temporary-disk \ --size SIZE
ここで、
SIZE
は一時ディスクのサイズ(ギガバイト単位またはテラバイト単位)です。たとえば、100 GB のディスクを作成するには100GB
を指定します。インスタンスを作成し、そのインスタンスで
storage-rw
スコープを有効にします。また、image-disk
とtemporary-disk
を、特定のdevice-name
属性を持つセカンダリ ディスクとしてインスタンスに接続します。VM_NAME
は、作成するインスタンスの名前に置き換えます。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
後の手順で Google Cloud Storage にファイルをアップロードできるように、サービス アカウント スコープを渡していることに注意してください。
必要に応じて、新規インスタンスの起動の詳細を確認します。
インスタンスに接続する。
VM_NAME
は、接続するインスタンスの名前に置き換えます。gcloud compute ssh VM_NAME
一時ディスクをフォーマットし、マウントします。ディスクをフォーマットすると、一時ディスクのコンテンツが削除されます。
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
省略可: イメージ ディスクをマウントし、
tar
ファイルを作成する前に追加の変更を加えます。たとえば、既存のファイルをイメージの一部としない場合は、それらのファイルを/home
ディレクトリから削除します。変更する必要のあるディスク パーティションをマウントし、変更する必要のあるディスク上のファイルを変更して、完了したらディスクをマウント解除します。ディスクまたはパーティションをマウントできるディレクトリを作成します。
sudo mkdir /mnt/image-disk
ls
コマンドを使用して、マウントする必要のあるディスクまたはディスク パーティションを判別します。ls /dev/disk/by-id/
コマンドでは、ディスク ID とパーティションのリストが出力されます。たとえば、次のディスクには 1 つのパーティションがあるパーティション テーブルがあります。
google-image-disk
ID は、イメージの作成元の完全なディスクを指します。google-image-disk-part1
ID は、このディスク上の最初のパーティションを指します。ディスクに変更を加える必要がある場合はパーティションをマウントし、完全なディスクからイメージを作成します。google-image-disk google-image-disk-part1
ディスクまたはパーティションをマウントします。ディスクにパーティション テーブルがある場合は、ディスクの個々のパーティションをマウントします。たとえば、
google-image-disk-part1
をマウントします。sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk
または、ディスクが未加工形式でパーティション テーブルがない場合は、完全な
google-image-disk
ディスクをマウントします。sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
/mnt/image-disk
ディレクトリ内のファイルを変更し、ディスク上のファイルを構成します。たとえば、/mnt/image-disk/home/[USER]/.ssh/authorized_keys
ファイルを削除して、SSH 認証鍵が共有されないよう保護できます。ファイルの変更後に、ディスクをマウント解除します。
sudo umount /mnt/image-disk/
イメージの
tar
ファイルを作成します。イメージ ディスク上のファイルのカスタマイズが完了したら、一時ディスクに未加工ディスク ファイルを作成します。未加工ディスク イメージの名前は「disk.raw」である必要があります。
sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096
次に、
tar.gz
ファイルを作成します。cd /mnt/tmp
sudo tar czvf myimage.tar.gz disk.raw
このコマンドにより、次の場所にインスタンスのイメージが作成されます。
/mnt/tmp/myimage.tar.gz
イメージを Cloud Storage にアップロードします。
tar
ファイルを Cloud Storage にアップロードするには、インスタンスにプリインストールされている Google Cloud CLI を使用します。gcloud CLI を使用してバケットを作成します。
バケットを作成する前に、バケットと命名のガイドラインを確認します。確認したら、次のコマンドを使用してバケットを作成します。
BUCKET_NAME
は、作成するバケットの名前に置き換えます。me@example-instance:~$ gcloud storage buckets create gs://BUCKET_NAME
ファイルを新しいバケットにコピーします。
BUCKET_NAME
は、ファイルをコピーするバケットの名前に置き換えます。me@example-instance:~$ gcloud storage cp /mnt/tmp/myimage.tar.gz gs://BUCKET_NAME
- イメージ ユーザーのロールを使用してイメージを共有する。
- Compute Engine で使用できるインポート方法を学習します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
制限事項
画像のエクスポート プロセスには、次の制限が適用されます。
一般的な制限事項
イメージをエクスポートすると、イメージをエクスポートするマシンにセッションが作成されます。このセッションは、エクスポート プロセスが完了するまでアクティブな状態にする必要があります。エクスポート プロセスが完了する前にセッションが終了すると、一時ディスク、VM インスタンス、ストレージ バケットなどのエフェメラル リソースが削除されないことがあります。この場合、これらのエフェメラル リソースを手動で削除する必要があります。
エクスポート プロセスでは、Cloud Build を使用してイメージをエクスポートします。Cloud Build セッションは最大 24 時間持続します。画像が非常に大きく、エクスポートに 24 時間以上かかる場合は、画像を手動でエクスポートできます。
VPC Service Controls の制限事項
VPC Service Controls で保護されているプロジェクトの場合は、次のいずれかの方法を使用します。
1 つのコマンドでイメージをエクスポートする
イメージを Cloud Storage にエクスポートする
イメージは、Google Cloud コンソール、Google Cloud CLI、または REST を使用してエクスポートできます。
コンソール
gcloud
イメージを Cloud Storage にエクスポートするには、
gcloud compute images export
コマンドを使用することをおすすめします。このコマンドでは、Daisy を使用して、イメージをエクスポートするために必要な複数のステップが連結されています。これはgcloud compute images create
コマンドを使用するなどして、すでにイメージを作成していることが前提です。Google Cloud CLI を使用して、次を実行します:
gcloud compute images export \ --destination-uri DESTINATION_URI \ --image IMAGE_NAME
次のように置き換えます。
デフォルトでは、イメージは Compute Engine 形式でエクスポートされます。それは、tar 圧縮と gzip 圧縮された
disk.raw
ファイルです。QEMU ディスク イメージ ユーティリティでサポートされている他の形式でイメージをエクスポートするには、--export-format
フラグを使用できます。有効な形式は、vmdk
、vhdx
、vpc
、vdi
、qcow2
です。例
たとえば、次のコマンドでは、
my-image
という名前のイメージがmy-project
からmy-bucket
という名前の Cloud Storage バケットにエクスポートされます。デフォルトでは、イメージはdisk.raw file
ファイルとしてエクスポートされ、tar.gz
ファイル形式に圧縮されます。gcloud compute images export \ --destination-uri gs://my-bucket/my-image.tar.gz \ --image my-image \ --project my-project
フラグについては、
gcloud compute images export
リファレンス ドキュメントをご覧ください。REST
POST
リクエストを Cloud Build API に送信します。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" ] }
次のように置き換えます。
提供できる追加の
args
値については、VM イメージのエクスポートに関する GitHub のページのオプションのフラグ セクションを参照してください。レスポンスの例
次のレスポンスのサンプルは、返される出力に似ています。
{ "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" } }
ビルドをモニタリングする方法はいくつかあります。
カスタム Compute Engine サービス アカウントを使用してプロジェクトからイメージをエクスポートする
イメージのエクスポート中に、一時的な仮想マシン(VM)インスタンスがプロジェクトに作成されます。この一時 VM 上のイメージ エクスポート ツールを認証する必要があります。
サービス アカウントは VM に関連付けられている ID です。サービス アカウントのアクセス トークンは、インスタンス メタデータ サーバーからアクセスでき、VM 上のイメージ エクスポート ツールの認証に使用できます。
デフォルトでは、エクスポート プロセスには、プロジェクトのデフォルトの Compute Engine サービス エージェントが使用されます。ただし、プロジェクトでデフォルトの Compute Engine サービス アカウントが無効になっている場合や、カスタム Compute Engine サービス アカウントを使用する場合は、サービス アカウントを作成してエクスポート プロセスで指定する必要があります。
イメージは、Google Cloud CLI または REST を使用してエクスポートできます。
gcloud
例
たとえば、次のコマンドは、
my-image
という名前のイメージをmy-project
からmy-bucket
という名前の Cloud Storage バケットに、メールアドレスimage-export-service-account@proj-12345.iam.gserviceaccount.com
を持つサービス アカウントでエクスポートします。デフォルトでは、イメージはdisk.raw
ファイルとしてエクスポートされ、tar.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
フラグについては、
gcloud compute images export
リファレンス ドキュメントをご覧ください。REST
提供できる追加の
args
値については、VM イメージのエクスポートに関する GitHub のページのオプションのフラグ セクションを参照してください。共有 VPC を使用してイメージをエクスポートする
共有 VPC を使用するイメージをエクスポートする前に、Cloud Build サービス アカウントに
compute.networkUser
ロールを追加する必要があります。詳細については、Cloud Build サービス アカウントに必要なロールを付与するをご覧ください。イメージは、Google Cloud CLI または REST を使用してエクスポートできます。
gcloud
gcloud compute images export
コマンドを使用してイメージをエクスポートします。gcloud compute images export \ --image IMAGE_NAME \ --destination-uri DESTINATION_URI \ --project PROJECT_ID \ --network NETWORK \ --subnet SUBNET \ --zone ZONE
次のように置き換えます。
たとえば、次のコマンドでは、
example-image
という名前のイメージがmy-project
からmy-bucket
という名前の Cloud Storage バケットにエクスポートされます。この例では、Virtual Private Cloud ネットワーク(my-shared-vp
)はカスタム サブネット(my-custom-subnet
)を使用します。デフォルトでは、イメージはdisk.raw
ファイルとしてエクスポートされ、tar.gz
ファイル形式に圧縮されます。サンプル コマンド
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
手動でイメージを作成してエクスポートする
gcloud compute images create
およびgcloud compute images export
コマンドでは要件が満たされない場合は、手動でイメージを作成して Compute Engine インスタンスからエクスポートできます。この処理は、最初にイメージを作成し、次にイメージをエクスポートする別々のステップです。次の例では、作成されるディスクの名前は image-disk です。
イメージを作成およびエクスポートするには:
ファイルが Cloud Storage にエクスポートされました。イメージを他のユーザーと共有できるようになりました。または、
tar
ファイルを使用して Google Cloud コンソール プロジェクトに新規イメージを追加することもできます。次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-12-22 UTC。
-