diff --git a/.gitignore b/.gitignore
index 51af9db8c5..f49f14676f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ bin/
bin_test/
matchbox/
modules/update-payload/generated/
+/contrib/govcloud/vpn.conf
diff --git a/Documentation/dev/govcloud/README.md b/Documentation/dev/govcloud/README.md
new file mode 100644
index 0000000000..963b37a1cd
--- /dev/null
+++ b/Documentation/dev/govcloud/README.md
@@ -0,0 +1,97 @@
+# Install Tectonic on AWS GovCloud Platform with Terraform
+
+Use this guide to manually install a Tectonic cluster on a AWS GovCloud account.
+
+## Prerequsities
+
+- **Terraform:** >= v0.10.7
+- **Tectonic Account:** Register for a [Tectonic Account](https://coreos.com/tectonic), which is free for up to 10 nodes. You must provide the cluster license and pull secret during installation.
+- **AWS GovCloud:** Obtain credentials for [GovCloud](http://docs.aws.amazon.com/govcloud-us/latest/UserGuide/govcloud-differences.html)
+- **DNS:** The Tectonic Installer assumes that a PowerDNS server instance is running and reachable from the VPC where the cluster is running.
+
+See [contrib/govcloud](../../../contrib/govcloud) for an example of a prebuilt VPC with restricted VPN access and a PowerDNS server.
+
+## Getting Started
+
+First, clone the Tectonic Installer repository:
+
+```
+$ git clone https://github.com/coreos/tectonic-installer.git
+$ cd tectonic-installer
+```
+
+Initialise Terraform:
+
+```
+$ terraform init platforms/govcloud
+```
+
+Configure your AWS GovCloud credentials.
+
+```
+$ export AWS_ACCESS_KEY_ID=my-id
+$ export AWS_SECRET_ACCESS_KEY=secret-key
+```
+
+## Customize the deployment
+
+Customizations to the base installation live in examples/terraform.tfvars.govcloud. Export a variable that will be your cluster identifier:
+
+```
+$ export CLUSTER=my-cluster
+```
+
+Create a build directory to hold your customizations and copy the example file into it:
+
+```
+$ mkdir -p build/${CLUSTER}
+$ cp examples/terraform.tfvars.govcloud build/${CLUSTER}/terraform.tfvars
+```
+
+Edit the parameters with your VPC details:
+```
+tectonic_govcloud_external_vpc_id
+tectonic_govcloud_external_master_subnet_ids
+tectonic_govcloud_external_worker_subnet_ids
+tectonic_govcloud_dns_server_ip
+
+```
+
+## Deploy the cluster
+
+If you are following the [contrib/govcloud](../../../contrib/govcloud) example and deploying from an external machine, connect to the VPN now.
+Add the `tectonic_govcloud_dns_server_ip` to your local DNS resolver.
+
+Test out the plan before deploying everything:
+
+```
+$ terraform plan -var-file=build/${CLUSTER}/terraform.tfvars platforms/govcloud
+```
+
+Next, deploy the cluster:
+
+```
+$ terraform apply -var-file=build/${CLUSTER}/terraform.tfvars platforms/govcloud
+```
+
+This should run for a little bit, and when complete, your Tectonic cluster should be ready.
+
+### Access the cluster
+
+The Tectonic Console should be up and running after the containers have downloaded. You can access it at the DNS name configured in your variables file prefixed by the cluster name, i.e ```https://cluster_name.tectonic_base_domain```.
+
+Inside of the /generated folder you should find any credentials, including the CA if generated, and a kubeconfig. You can use this to control the cluster with kubectl:
+
+```
+$ export KUBECONFIG=generated/auth/kubeconfig
+$ kubectl cluster-info
+```
+### Delete the cluster
+
+```
+$ terraform destroy -var-file=build/${CLUSTER}/terraform.tfvars platforms/govcloud
+```
+
+## Known issues and workarounds
+
+At the moment because of the [AWS user data limit](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-add-user-data) and [Ignition not supporting the S3 protocol for replacing the content](https://github.com/coreos/bugs/issues/2216), the Ignition config for the nodes is stored in a public bucket and it has to be removed manually.
diff --git a/Documentation/variables/govcloud.md b/Documentation/variables/govcloud.md
new file mode 100644
index 0000000000..01c49f8ad2
--- /dev/null
+++ b/Documentation/variables/govcloud.md
@@ -0,0 +1,44 @@
+
+# Terraform variables
+This document gives an overview of variables used in the GovCloud AWS platform of the Tectonic SDK.
+
+## Inputs
+
+| Name | Description | Type | Default |
+|------|-------------|:----:|:-----:|
+| tectonic_autoscaling_group_extra_tags | (optional) Extra AWS tags to be applied to created autoscaling group resources. This is a list of maps having the keys `key`, `value` and `propagate_at_launch`.
Example: `[ { key = "foo", value = "bar", propagate_at_launch = true } ]` | list | `` |
+| tectonic_dns_name | (optional) DNS prefix used to construct the console and API server endpoints. | string | `` |
+| tectonic_govcloud_assets_s3_bucket_name | (optional) Unique name under which the Amazon S3 bucket will be created. Bucket name must start with a lower case name and is limited to 63 characters. The Tectonic Installer uses the bucket to store tectonic assets and kubeconfig. If name is not provided the installer will construct the name using "tectonic_cluster_name", current AWS region and "tectonic_base_domain" | string | `` |
+| tectonic_govcloud_config_version | (internal) This declares the version of the AWS configuration variables. It has no impact on generated assets but declares the version contract of the configuration. | string | `1.0` |
+| tectonic_govcloud_dns_server_ip | | string | - |
+| tectonic_govcloud_etcd_ec2_type | Instance size for the etcd node(s). Example: `t2.medium`. Read the [etcd recommended hardware](https://coreos.com/etcd/docs/latest/op-guide/hardware.html) guide for best performance | string | `t2.medium` |
+| tectonic_govcloud_etcd_extra_sg_ids | (optional) List of additional security group IDs for etcd nodes.
Example: `["sg-51530134", "sg-b253d7cc"]` | list | `` |
+| tectonic_govcloud_etcd_root_volume_iops | The amount of provisioned IOPS for the root block device of etcd nodes. Ignored if the volume type is not io1. | string | `100` |
+| tectonic_govcloud_etcd_root_volume_size | The size of the volume in gigabytes for the root block device of etcd nodes. | string | `30` |
+| tectonic_govcloud_etcd_root_volume_type | The type of volume for the root block device of etcd nodes. | string | `gp2` |
+| tectonic_govcloud_external_master_subnet_ids | (optional) List of subnet IDs within an existing VPC to deploy master nodes into. Required to use an existing VPC and the list must match the AZ count.
Example: `["subnet-111111", "subnet-222222", "subnet-333333"]` | list | `` |
+| tectonic_govcloud_external_private_zone | (optional) If set, the given Route53 zone ID will be used as the internal (private) zone. This zone will be used to create etcd DNS records as well as internal API and internal Ingress records. If set, no additional private zone will be created.
Example: `"Z1ILINNUJGTAO1"` | string | `` |
+| tectonic_govcloud_external_vpc_id | (optional) ID of an existing VPC to launch nodes into. If unset a new VPC is created.
Example: `vpc-123456` | string | `` |
+| tectonic_govcloud_external_worker_subnet_ids | (optional) List of subnet IDs within an existing VPC to deploy worker nodes into. Required to use an existing VPC and the list must match the AZ count.
Example: `["subnet-111111", "subnet-222222", "subnet-333333"]` | list | `` |
+| tectonic_govcloud_extra_tags | (optional) Extra AWS tags to be applied to created resources. | map | `