Skip to main content
The release bundle’s terraform/ directory holds the configuration. It runs with OpenTofu or Terraform 1.7 or later, with the google provider pinned to 8.1.0 and random to 3.7.2, so a plan made months from now matches the one you reviewed. State lives in a Cloud Storage bucket in your project: see Create the state bucket.

What it creates

No service-account key exists anywhere. The pods authenticate to Firestore, Cloud Storage, Vertex AI, Artifact Registry and Secret Manager as Google service accounts. Cloud SQL is the exception: the application connects with a password, which OpenTofu generates and stores in Secret Manager, and no person handles.

Variables

Required

Naming and identities

Network

Control plane

Datastores

Safety

Model Armor

Optional screening of Vertex AI traffic, applied as a project floor setting. Model Armor is a separately purchased Google Cloud service: enabling its API without the entitlement fails the apply with Error 403: Write access to project '<project>' was denied. It covers Gemini models on Vertex AI only.

Outputs

Remove the installation

Removing the installation deletes your data: the Firestore database, the Cloud SQL databases and, if it’s empty, the bucket. Back up anything you need first.
deletion_protection = true stops a destroy from removing the cluster, the Firestore database and the Cloud SQL instance. But a destroy isn’t transactional: with protection on, it first removes everything it can, including the databases inside the Cloud SQL instance, its user and the network, and only then refuses the protected resources. Read a refused destroy as “the protected resources survived”, not as “nothing happened”. Protection guards those resources; it doesn’t guard the data inside them. To remove an installation on purpose:
1

Uninstall the charts

Remove the releases first, so GKE deletes the load balancer it created for the Gateway.
To verify, check the Gateway is gone. Expected: No resources found.
2

Lift the protection, then destroy

A bucket that still holds objects fails the destroy instead of being emptied: check its contents first. The enabled APIs stay enabled, because disabling an API affects the whole project.Firestore holds a deleted database’s name for about five minutes. If you create the installation again in that window, the apply fails with Database ID '<name>' is not available and the time left; wait, and apply again.