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 withError 403: Write access to project '<project>' was denied. It covers Gemini models on Vertex AI only.
Outputs
Remove the installation
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
Database ID '<name>' is not available and the time left; wait, and apply again.