Use a machine image to store all the configuration, metadata, permissions, and data from one or more disks for a VM instance running on Compute Engine. For information about when and how to use machine images, see Machine images.
This document describes the steps for importing a machine image from a virtual appliance.
Before you begin
- If the project that you want to import the machine image in has a
trusted image policy
defined, add
projects/compute-image-import
andprojects/compute-image-tools
to the allowed list of publishers. - If you are importing a virtual appliance from a different project, see Importing across projects.
- Review source VM and OVF file requirements in the importing virtual appliances Compute Engine guide.
- To find out how to meet requirements before importing machine images, see Prerequisites for importing and exporting VM images.
-
If you haven't already, then set up authentication.
Authentication is
the process by which your identity is verified for access to Google Cloud services and APIs.
To run code or samples from a local development environment, you can authenticate to
Compute Engine by selecting one of the following options:
Select the tab for how you plan to use the samples on this page:
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
REST
To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
-
Limitations and restrictions
- You can share a machine image across projects. However, shared VPC networks aren't supported.
- This feature is not supported for projects that are protected with VPC Service Controls.
- Machine images can't be created from source VMs that have greater than 200 TB of disks attached.
Supported operating systems
For operating system support, see Operating system details.
Import machine images
You can import machine images from virtual appliances using either the Google Cloud CLI, or REST.
gcloud
Use the
gcloud compute machine-images import
command
to import a machine image from virtual appliances.
gcloud compute machine-images import MACHINE_IMAGE_NAME \ --source-uri=gs:SOURCE_URI \ --os=OS
Replace the following:
MACHINE_IMAGE_NAME
: name of the machine image that you want to import.SOURCE_URI
: path to your OVA or OVF file on Cloud Storage.OS
: operating system of the OVA file. This flag is optional by default, but it might be required in some cases. We recommend that you provide this flag.
Example
For example, you can use the following gcloud
command to import a machine
image called my-machine-image
from a source OVA file called my-ova
that
is stored in the gs://my-bucket
directory and runs centos-7
:
gcloud compute machine-images import my-machine-image \ --source-uri=gs://my-bucket/my-ova/ \ --os=centos-7
REST
Upload the virtual appliance to Cloud Storage.
Send a
POST
request to the Cloud Build API.POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "timeout": "7200s", "steps":[ { "args":[ "-machine-image-name=MACHINE_IMAGE_NAME", "-ovf-gcs-path=SOURCE_URI", "-os=OS", "-client-id=api", "-timeout=7000s" ], "name":"gcr.io/compute-image-tools/gce_ovf_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "tags":"gce-ovf-machine-image-import" }
Replace the following:
PROJECT_ID
: project ID for the project that you want to import the OVA file into.MACHINE_IMAGE_NAME
: name for the machine image to import. For example,my-machine-image
.SOURCE_URI
: URI for the OVA file or a directory containing OVF packages that is stored in Cloud Storage. For example,gs://my-bucket/my-instance.ova
.OS
: operating system of the OVA file. For example,ubuntu-1604
. This flag is optional by default, but it might be required in some cases. We recommend that you provide this flag.
For additional
args
values that can be provided, see the optional flags section of the Compute Engine OVF import GitHub page.
Import machine images with OVF overrides
Custom CPU and memory
gcloud
To override the CPU or memory configuration specified in the OVF file,
follow the Google Cloud CLI steps to
import a machine image
and specify the --custom-cpu
and --custom-memory
flags.
Example
A machine image named my-machine-image
has the
following overrides applied to the settings in the OVF file:
- Operating system:
Ubuntu 1404
- CPU:
2 CPUs
- Memory:
2048 MB
To import my-machine-image
with these overrides, run the following command:
gcloud compute machine-images import my-machine-image \ --os=ubuntu-1404 --source-uri=gs://my-bucket/Ubuntu.ova \ --custom-cpu=2 --custom-memory=2048MB
REST
To override the CPU or memory configuration specified in the OVF file,
follow the Compute Engine API steps to
import a machine image
and specify the -machine-type
argument.
This -machine-type
represents a predefined or
custom machine
type to use.
Example
A machine image named my-machine-image
has the
following overrides applied to the settings in the OVF file:
- Operating system:
Ubuntu 1404
- CPU:
2 CPUs
- Memory:
2048 MB
To import my-machine-image
with these overrides, make the following
request to the Compute Engine API.
POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "timeout":"7200s", "steps":[ { "args":[ "-machine-image-name=my-machine-image", "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova", "-os=ubuntu-1404", "-machine-type=custom-2-2048", "-client-id=api", "-timeout=7000s" ], "name":"gcr.io/compute-image-tools/gce_ovf_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "tags":"gce-ovf-machine-image-import" }
Replace PROJECT_ID
with your project ID.
Custom networks
gcloud
To set up a custom network, follow the Google Cloud CLI steps to
import a machine image
and specify a --network
flag.
If the network is configured with a custom subnet mode,
you must also specify --subnet
and --zone
flags.
Example
A machine image named my-machine-image
has the
following overrides applied to the settings in the OVF file:
- Operating system:
Ubuntu 1404
- Network:
custom-vpc-network
- Subnet:
company-vpc-us-east1-c
- Zone:
us-east1-c
To import my-machine-image
with these overrides, run the following example
command:
gcloud compute machine-images import my-machine-image \ --os=ubuntu-1404 \ --source-uri=gs://my-bucket/Ubuntu.ova \ --network=custom-vpc-network \ --subnet=company-vpc-us-east1-c \ --zone=us-east1-c
REST
To use a custom network, follow the Compute Engine API steps to
import a machine image
and specify a -network
argument.
If the network is configured with a custom subnet mode,
you must also specify -subnet
and -zone
arguments.
Example
A machine image named my-machine-image
has the
following overrides applied to the settings in the OVF file:
- Operating system:
Ubuntu 1404
- Network:
custom-vpc-network
- Subnet:
company-vpc-us-east1-c
- Zone:
us-central1-c
To import my-machine-image
with these overrides, make the following
request to the Compute Engine API.
POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "timeout":"7200s", "steps":[ { "args":[ "-machine-image-name=my-machine-image", "-ovf-gcs-path=gs://my-bucket/Ubuntu.ova", "-os=ubuntu-1404", "-zone=us-central1-c", "-network=custom-vpc-network", "-subnet=company-vpc-us-east1-c", "-client-id=api", "-timeout=7000s" ], "name":"gcr.io/compute-image-tools/gce_ovf_import:release", "env":[ "BUILD_ID=$BUsILD_ID" ] } ], "tags":"gce-ovf-machine-image-import" }
Replace PROJECT_ID
with your project ID.
Import a machine image within a network that does not allow external IP
To import a machine image using a network that does not allow external IP addresses, complete the following steps:
Add the virtual appliance to Cloud Storage.
The import process requires package managers to be installed on the operating system for the machine image. These package managers might need to make requests to package repositories that are outside Google Cloud. To allow access for these updates, you need to configure Cloud NAT. For more information, see Create a NAT configuration using Cloud Router.
Configure Private Google Access. For more information, see Configuring Private Google Access.
Import the machine image using either the Google Cloud CLI or the Cloud Build API.
When you import a machine image from a virtual appliance, temporary VMs are created in your project. To ensure that these temporary VMs are not assigned external IP addresses, you must specify an additional flag or argument.
For more information about the required flag or argument, click the following tabs:
gcloud
Use the
gcloud compute machine-images import
command
with the --no-address
flag .
gcloud compute machine-images import MACHINE_IMAGE_NAME \ --source-uri=SOURCE_URI \ --os=OS \ --zone=ZONE \ --no-address
Replace the following:
MACHINE_IMAGE_NAME
: name of the machine image that you want to import.SOURCE_URI
: URI for your OVA or OVF file on Cloud Storage. For example,gs://my-bucket/Ubuntu.ova
.OS
: operating system of the OVA file. This flag is optional by default, but it might be required in some cases. We recommend that you provide this flag. For a list of supported values, see--os
flag options for thegcloud compute machine-images import
command.ZONE
: the zone in which to import the machine image. If left blank, the default zone for the project is used.
REST
Use the
Cloud Build API and
specify the -no-external-ip
argument.
POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "timeout":"7200s", "steps":[ { "args":[ "-machine-image-name=MACHINE_IMAGE_NAME", "-ovf-gcs-path=SOURCE_URI", "-os=OS", "-zone=ZONE", "-no-external-ip", "-client-id=api", "-timeout=7000s" ], "name":"gcr.io/compute-image-tools/gce_ovf_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "tags":"gce-ovf-machine-image-import" }
Replace the following:
PROJECT_ID
: the project ID for the project that you want to import the machine image into.MACHINE_IMAGE_NAME
: the name for the machine image to import. For example,my-machine-image
.SOURCE_URI
: the URI for the OVA file that is stored in Cloud Storage. For example,gs://my-bucket/my-machine.ova
.OS
: the operating system of the OVA file. For example,ubuntu-1604
. This flag is optional by default, but it might be required in some cases. We recommend that you provide this flag. For a list of supported values, see--os
flag options for thegcloud compute instances import
command.ZONE
: the zone in which to import the machine image.
Import a machine image using custom service accounts
During a machine image import, temporary virtual machine (VM) instances are created in your project. The import tool on these temporary VMs must be authenticated.
A service account is an identity that is attached to a VM. Service account access tokens can be accessed through the VM metadata server and used to authenticate the import tool on the VM.
By default, the import process uses the default Compute Engine service account. However, if the default Compute Engine service account is disabled in your project or if you want to use a custom Compute Engine service account, then you need to create a service account and specify it for the import process.
gcloud
Add the virtual appliance to Cloud Storage.
Create a service account and assign the minimum roles. For more information about creating service accounts, see Creating and managing service accounts.
At minimum, the specified Compute Engine service account needs to have the following roles assigned:
roles/compute.storageAdmin
roles/storage.objectViewer
These minimum roles are needed for the service account specified for the
--compute-service-account
flag. For more information, see Grant required roles to the Compute Engine service account.Use the
gcloud compute machine-images import
command to import a machine image from virtual appliances.gcloud compute machine-images import MACHINE_IMAGE_NAME \ --source-uri=gs:SOURCE_URI \ --os=OS \ --compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL \ --service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=SCOPES
Replace the following:
MACHINE_IMAGE_NAME
: name of the machine image that you want to import.SOURCE_URI
: path to your OVA or OVF file on Cloud Storage.OS
: operating system of the OVA file. This flag is optional by default, but it might be required in some cases. We recommend that you provide this flag.TEMP_SERVICE_ACCOUNT_EMAIL
: the email address associated with the custom service account created in the previous step. This service account is used by the temporary VMs. If unspecified, the VM uses the default Compute Engine service account.SERVICE_ACCOUNT_EMAIL
: the email address associated with the custom service account that is to be attached to any VM created from this machine image. There are no permission restrictions for this service account, you can customize this service account as needed. If unspecified, the default Compute Engine service account is attached to the VM.SCOPES
: specify the level of access for the--service-account
option. If unspecified, the default scopes are used. For more information, review the--scopes
flag.
REST
Add the virtual appliance to Cloud Storage.
Create a service account and assign the minimum roles. For more information about creating service accounts, see Creating and managing service accounts.
At minimum, the specified Compute Engine service account needs to have the following roles assigned:
roles/compute.storageAdmin
roles/storage.objectViewer
These minimum roles are needed for the service account specified for the
-compute-service-account
argument. For more information, see Grant required roles to the Compute Engine service account.Send a
POST
request to the Cloud Build API.POST https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds { "timeout":"7200s", "steps":[ { "args":[ "-machine-image-name=MACHINE_IMAGE_NAME", "-ovf-gcs-path=SOURCE_URI", "-os=OS", "-zone=ZONE", "-compute-service-account=TEMP_SERVICE_ACCOUNT_EMAIL", "-service-account=SERVICE_ACCOUNT_EMAIL", "-client-id=api", "-timeout=7000s" ], "name":"gcr.io/compute-image-tools/gce_ovf_import:release", "env":[ "BUILD_ID=$BUILD_ID" ] } ], "tags":"gce-ovf-machine-image-import" }
Replace the following:
PROJECT_ID
: the project ID for the project that you want to import the machine image into.MACHINE_IMAGE_NAME
: the name for the machine image to import. For example,my-machine-image
.SOURCE_URI
: the URI for the OVA file that is stored in Cloud Storage. For example,gs://my-bucket/my-machine.ova
.OS
: the operating system of the OVA file. For example,ubuntu-1604
. This flag is optional by default, but it might be required in some cases. We recommend that you provide this flag. For a list of supported values, see--os
flag options for thegcloud compute instances import
command.ZONE
: the zone in which to import the machine image.TEMP_SERVICE_ACCOUNT_EMAIL
: the email address associated with the custom service account created in the previous step. This service account is used by the temporary VMs. If unspecified, the VM uses the default Compute Engine service account.SERVICE_ACCOUNT_EMAIL
: the email address associated with the custom service account that is to be attached to any VM created from this machine image. There are no permission restrictions for this service account, you can customize this service account as needed. If unspecified, the default Compute Engine service account is attached to the VM.SCOPES
: specify the level of access for the--service-account
option. If unspecified, the default scopes are used. For more information, review the--scopes
flag.
What's next?
- Learn more about machine images
- Create VM instances from machine images