2013-12-08 18:02:03 -05:00
---
layout: "docs"
2014-08-21 20:41:35 -04:00
page_title: "Google Compute Builder"
2014-10-20 16:47:30 -04:00
description: |-
The `googlecompute` Packer builder is able to create images for use with Google Compute Engine (GCE) based on existing images. Google Compute Engine doesn't allow the creation of images from scratch.
2013-12-08 18:02:03 -05:00
---
# Google Compute Builder
Type: `googlecompute`
2014-11-17 13:06:22 -05:00
The `googlecompute` Packer builder is able to create [images ](https://developers.google.com/compute/docs/images ) for use with
[Google Compute Engine ](https://cloud.google.com/products/compute-engine )(GCE) based on existing images. Google
Compute Engine doesn't allow the creation of images from scratch.
2013-12-12 22:59:29 -05:00
2014-09-05 12:49:40 -04:00
## Authentication
2013-12-12 22:59:29 -05:00
2015-06-23 17:44:57 -04:00
Authenticating with Google Cloud services requires at most one JSON file,
2014-11-17 13:06:22 -05:00
called the _account file_ . The _account file_ is **not** required if you are running
the `googlecompute` Packer builder from a GCE instance with a properly-configured
2015-02-10 20:13:28 -05:00
[Compute Engine Service Account ](https://cloud.google.com/compute/docs/authentication ).
2013-12-12 22:59:29 -05:00
2014-11-17 13:06:22 -05:00
### Running With a Compute Engine Service Account
If you run the `googlecompute` Packer builder from a GCE instance, you can configure that
instance to use a [Compute Engine Service Account ](https://cloud.google.com/compute/docs/authentication ). This will allow Packer to authenticate
2015-06-23 17:44:57 -04:00
to Google Cloud without having to bake in a separate credential/authentication file.
2014-11-17 13:06:22 -05:00
To create a GCE instance that uses a service account, provide the required scopes when
2015-02-21 03:27:04 -05:00
launching the instance.
2014-11-17 13:06:22 -05:00
For `gcloud` , do this via the `--scopes` parameter:
```sh
gcloud compute --project YOUR_PROJECT instances create "INSTANCE-NAME" ... \
--scopes "https://www.googleapis.com/auth/compute" \
"https://www.googleapis.com/auth/devstorage.full_control" \
...
```
For the [Google Developers Console ](https://console.developers.google.com ):
1. Choose "Show advanced options"
2. Tick "Enable Compute Engine service account"
3. Choose "Read Write" for Compute
4. Chose "Full" for "Storage"
**The service account will be used automatically by Packer as long as there is
no _account file_ specified in the Packer configuration file.**
### Running Without a Compute Engine Service Account
The [Google Developers Console ](https://console.developers.google.com ) allows you to
create and download a credential file that will let you use the `googlecompute` Packer
builder anywhere. To make
2014-09-05 12:49:40 -04:00
the process more straightforwarded, it is documented here.
2013-12-12 22:59:29 -05:00
2014-09-05 12:49:40 -04:00
1. Log into the [Google Developers Console ](https://console.developers.google.com )
and select a project.
2013-12-12 22:59:29 -05:00
2014-09-05 12:49:40 -04:00
2. Under the "APIs & Auth" section, click "Credentials."
2013-12-12 22:59:29 -05:00
2014-11-17 13:06:22 -05:00
3. Click the "Create new Client ID" button, select "Service account", and click "Create Client ID"
2013-12-13 00:52:25 -05:00
2014-11-17 13:06:22 -05:00
4. Click "Generate new JSON key" for the Service Account you just created. A JSON file will be downloaded automatically. This is your
2014-09-05 12:49:40 -04:00
_account file_ .
2013-12-08 18:02:03 -05:00
## Basic Example
2013-12-12 22:59:29 -05:00
Below is a fully functioning example. It doesn't do anything useful,
since no provisioners are defined, but it will effectively repackage an
2014-11-17 13:06:22 -05:00
existing GCE image. The account file is obtained in the previous section.
2013-12-08 18:02:03 -05:00
2014-10-20 13:55:16 -04:00
```javascript
2013-12-08 18:02:03 -05:00
{
"type": "googlecompute",
2014-09-05 12:49:40 -04:00
"account_file": "account.json",
2013-12-08 18:02:03 -05:00
"project_id": "my-project",
2015-02-10 22:02:36 -05:00
"source_image": "debian-7-wheezy-v20150127",
2013-12-08 18:02:03 -05:00
"zone": "us-central1-a"
}
2014-10-20 13:55:16 -04:00
```
2013-12-08 18:02:03 -05:00
## Configuration Reference
Configuration options are organized below into two categories: required and optional. Within
each category, the available options are alphabetized and described.
2015-06-23 17:44:57 -04:00
In addition to the options listed here, a
[communicator ](/docs/templates/communicator.html )
can be configured for this builder.
2014-05-04 13:47:40 -04:00
### Required:
2013-12-08 18:02:03 -05:00
2013-12-12 22:59:29 -05:00
* `project_id` (string) - The project ID that will be used to launch instances
and store images.
* `source_image` (string) - The source image to use to create the new image
2015-02-10 22:02:36 -05:00
from. Example: `"debian-7-wheezy-v20150127"`
2013-12-12 22:59:29 -05:00
* `zone` (string) - The zone in which to launch the instance used to create
2015-02-10 22:02:36 -05:00
the image. Example: `"us-central1-a"`
2013-12-08 18:02:03 -05:00
2014-05-04 13:47:40 -04:00
### Optional:
2013-12-08 18:02:03 -05:00
2014-11-17 13:06:22 -05:00
* `account_file` (string) - The JSON file containing your account credentials.
2015-02-10 22:02:36 -05:00
Not required if you run Packer on a GCE instance with a service account.
Instructions for creating file or using service accounts are above.
2014-11-17 13:06:22 -05:00
2014-08-07 15:34:08 -04:00
* `disk_size` (integer) - The size of the disk in GB.
2015-02-10 22:02:36 -05:00
This defaults to `10` , which is 10GB.
2014-08-07 15:34:08 -04:00
2013-12-12 22:59:29 -05:00
* `image_name` (string) - The unique name of the resulting image.
2015-02-10 22:02:36 -05:00
Defaults to `"packer-{{timestamp}}"` .
2013-12-12 22:59:29 -05:00
2013-12-08 18:02:03 -05:00
* `image_description` (string) - The description of the resulting image.
2013-12-12 22:59:29 -05:00
2014-04-26 14:02:25 -04:00
* `instance_name` (string) - A name to give the launched instance. Beware
2015-02-10 22:02:36 -05:00
that this must be unique. Defaults to `"packer-{{uuid}}"` .
2014-04-26 14:02:25 -04:00
2015-02-10 22:02:36 -05:00
* `machine_type` (string) - The machine type. Defaults to `"n1-standard-1"` .
2014-05-04 13:53:57 -04:00
2014-05-04 13:47:40 -04:00
* `metadata` (object of key/value strings)
2013-12-12 22:59:29 -05:00
* `network` (string) - The Google Compute network to use for the launched
2015-02-10 22:02:36 -05:00
instance. Defaults to `"default"` .
2013-12-12 22:59:29 -05:00
* `state_timeout` (string) - The time to wait for instance state changes.
2015-02-10 22:02:36 -05:00
Defaults to `"5m"` .
2013-12-08 18:02:03 -05:00
2014-05-04 13:47:40 -04:00
* `tags` (array of strings)
2013-12-08 18:02:03 -05:00
## Gotchas
Centos images have root ssh access disabled by default. Set `ssh_username` to any user, which will be created by packer with sudo access.
The machine type must have a scratch disk, which means you can't use an `f1-micro` or `g1-small` to build images.