Skip to content
Generating tf files and tfstate from existing GCP resources.
Branch: master
Clone or download
Latest commit b655c00 Jul 5, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
cloudasset initial commit Jun 4, 2019
cmd bug fix Jun 5, 2019
resources initial commit Jun 4, 2019
terraformUtil workspace and backend-bucket bug fix Jun 5, 2019
utils initial commit Jun 4, 2019
.gitignore workspace and backend-bucket bug fix Jun 5, 2019
LICENSE initial commit Jun 4, 2019 Update Jul 5, 2019
go.mod add go.mod and go.sum Jun 4, 2019
go.sum add go.mod and go.sum Jun 4, 2019
main.go initial commit Jun 4, 2019


terraformit-gcp is an open source command line tool for generating tf files and tfstate from existing GCP resources.
Relieve the pain of coding tf of manually created GCP resources.

terraformit-gcp steps are as below.

  1. terraformit-gcp get json data of existing GCP resources using Cloud Asset API exportAssets method.

  2. terraformit-gcp generates files for creating a tfstate(="terraform import") from the json data.

  3. terraformit-gcp generates tf files from the tfstate.

  4. terraformit-gcp executes "terraform plan" command to check tf files are generated successfully.

Version Table

terraformit-gcp does not support terraform 0.12.0 now.

terraformit-gcp go terraform google provider google provider (beta)
v0.9.0 v1.12 v0.11.13 and v0.11.14 v2.5.1 v2.5.1

To start using terraformit-gcp

Please follow these steps.

Install commands

Install terraform or tfenv(Terraform version manager).

Install gcloud to create a credential.

Install Go tools to use go command.

Set gcloud authentication

Generate ~/.config/gcloud/application_default_credentials.json credential.
Terraform command and google storage library use this credential.

gcloud init


gcloud auth login

Install terraformit-gcp

Install terraformit-gcp. git clone terraformit-gcp to your GOPATH.

export GO111MODULE=on
git clone -b v0.9.1 ~/go/src/
cd ~/go/src/
go install

Set path

Add GOPATH to PATH, if you need.

echo 'export GOPATH=$HOME/go' >> ~/.bash_profile
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bash_profile
source ~/.bash_profile

Enable CloudAssetAPI

Enable CloudAssetAPI.

Create bucket for storing CloudAssetAPI json data

Create bucket for storing CloudAssetAPI outputs.

Generate and download credential for CloudAssetAPI

Genereate Oauth Client ID and download a credentials.
Cloud Asset API only supports Oauth Client ID now.

cd your pj directory

Change your terraform project directory.

cd "your terraform project directory"

Create .terraformit-gcp.yaml in your project directory

Create .terraformit-gcp.yaml in your project directory and set your configuration.
Please refer to the sample file(sample.terraformit-gcp.yaml) in this repository.

  # GCP project number
  project-number: "xxxxxxxx" 

  # bucket name. CloudAssetAPI MetadataFile is exported to this bucket.
  bucket: "xxxxxxxxx"

  # Oauth Client ID credential location
  credential: "/Users/xxxxx/Downloads/xxxxxx.json"

  # provider. "google" or "google-beta" should be set.
  provider: "google"

  # your workspace 
  workspace: "default"

  # buckend type "local" or "gcs" is supported now.
  backend-type: "local"

  # if you set "local" to backend-type, set "" to backend-location.
  # backend-location: ""
  # if you set "gcs" to backend-type ,set your bucket name to backend-location
  # backend-location: "bucketname"  
  backend-location: ""

  # Default Region
  gcp-provider-default-region: "asia-northeast1"

  # whether add Default resources("true") or remove("false").
  # set true or false. If you set "false", skip default resource.
  # Default service accounts are removed automatically because their name start with number("12233445@....") which cause an error. 
  resource-default-network: false
  resource-default-subnetwork: false
  resource-default-route: false
  resource-default-firewall: false

terraformit-gcp Command

terraformit-gcp plan

Following steps below are executed.

  1. create CloudAssetMetadata calling CloudAssetAPI
  2. get CloudAssetMetadata from GCS
  3. create ImportFiles
  4. "terraform init"
  5. "terraform workspace new"
  6. "terraform import"(create tfstate)
  7. create tffile
  8. "terraform plan"

terraformit-gcp create cloudasset

Following steps below are executed.

  1. create CloudAssetMetadata calling CloudAssetAPI

terraformit-gcp create importfiles (-f ./xxx/xxxxx or gs://xxxxxx/xxxx)

Following steps below are executed.

  1. get CloudAssetMetadata from GCS or local(-f option)
  2. create ImportFiles

terraformit-gcp create tfstate

Following steps below are executed.

  1. "terraform init"
  2. "terraform workspace new"
  3. "terraform import" using importfiles

terraformit-gcp create tffile (-f tfstatefile)

Following steps below are executed.

  1. create tffile

Support Table

This command supports GCP resources which is supported by Cloud Asset API.

🔧:will support
/ :not supported

CloudAssetAPI Name CloudAssetAPI Support terrafromResource name terrafromResource Support
Cloud Key Management Service google_kms_key_ring google_kms_crypto_key / / /
Resource Manager / / / / google_folder / google_project
Compute Engine google_compute_autoscaler google_compute_backend_bucket google_compute_backend_service google_compute_disk google_compute_firewall (only support in default Region) google_compute_forwarding_rule google_compute_global_forwarding_rule google_compute_health_check google_compute_http_health_check 🔧 google_compute_https_health_check 🔧 google_compute_image google_compute_instance google_compute_instance_group google_compute_instance_group_manager google_compute_instance_template google_compute_network / / / 🔧 google_compute_region_backend_service 🔧 google_compute_route 🔧 google_compute_router 🔧 google_compute_snapshot google_compute_ssl_certificate(you need to set your private key manually) google_compute_subnetwork google_compute_target_http_proxy google_compute_target_https_proxy / / / (only support in default Region) google_compute_target_pool 🔧 google_compute_target_tcp_proxy 🔧 🔧 google_compute_target_ssl_proxy 🔧 🔧 google_compute_vpn_gateway 🔧 google_compute_url_map 🔧 google_compute_vpn_tunnel 🔧
App Engine 🔧 google_app_engine_application(cannot delete app engine) 🔧 / / / / / /
Google Kubernetes Engine google_container_cluster 🔧 google_container_node_pool 🔧
Cloud Billing / / /
Cloud Storage google_storage_bucket
Cloud DNS google_dns_managed_zone (only google-beta) google_dns_policy
Cloud Spanner 🔧 google_spanner_instance 🔧 🔧 google_spanner_database 🔧
BigQuery 🔧 google_bigquery_dataset 🔧 🔧 google_bigquery_table 🔧
Cloud Identity and Access Management 🔧 google_iam_member 🔧 google_service_account
Cloud Pub/Sub google_pubsub_subscription google_pubsub_topic
Cloud Dataproc 🔧 google_dataproc_cluster 🔧 🔧 google_dataproc_job 🔧
Cloud SQL google_sql_database_instance
Cloud Bigtable / / / 🔧 google_bigtable_instance 🔧 🔧 google_bigtable_table 🔧
Google Kubernetes Engine / / / / / / / / / / / / / / / / / / / / /
You can’t perform that action at this time.