
Ich starte ein neues Terraform-Projekt und folge dabei der offiziellen Anleitung:
Ich habe es geschafft, es zum Laufen zu bringen. (Ich führe es als Teil einer Google Cloud Build-Aufgabe aus, die beim Commit ausgelöst wird.)
Wenn ich jedoch etwas an einer Ressource ändere (z. B. den Standardwert „gke_num_nodes“ von 2 auf 1 ersetzt habe), terraform apply
erhalte ich beim erneuten Ausführen Folgendes:
Plan: 4 to add, 0 to change, 0 to destroy.
Changes to Outputs:
+ kubernetes_cluster_host = (known after apply)
+ kubernetes_cluster_name = "workspace-auto-gke"
+ project_id = "workspace-auto"
+ region = "europe-west4"
google_compute_network.vpc: Creating...
╷
│ Error: Error creating Network: googleapi: Error 409: The resource 'projects/workspace-auto/global/networks/workspace-auto-vpc' already exists, alreadyExists
│
│ with google_compute_network.vpc,
│ on vpc.tf line 15, in resource "google_compute_network" "vpc":
│ 15: resource "google_compute_network" "vpc" {
│
╵
Gibt es eine Möglichkeit, es so einzustellen, dass nicht versucht wird, vorhandene, unberührte Ressourcen neu zu erstellen?
Meine cloudbuild.json
ist wie folgt:
{
"steps": [
{
"name": "hashicorp/terraform",
"entrypoint": "/bin/sh",
"args": [
"./cloudbuild/prepare-terraform.sh"
]
}
],
"logsBucket": "gs://my-bucket/logdir",
"serviceAccount": "projects/my-proj/serviceAccounts/[email protected]"
}
mit prepare-terraform.sh
einfach sein
terraform init
terraform plan
terraform apply -auto-approve
Antwort1
Wenn Sie Terraform zum Erstellen von Ressourcen verwenden,NICHTÄndern Sie sie außerhalb von Terraform.
Wenn Sie etwas manuell ändern, versucht Terraform, es so wiederherzustellen, wie es die HCL deklariert und wie Terraform es gespeichert hat.
Das nennt mandeklarativ. Sie versuchen, Terraform dynamisch zu machen, was die Verwendung von Terraform von vornherein ausschließt.
Antwort2
Der Terraform-Status muss dort gespeichert werden, wo er für alle Builds zugänglich ist. Beispielsweise in einem Google Cloud Bucket, wie hier zu sehen:https://www.terraform.io/docs/language/settings/backends/gcs.html