
Estoy iniciando un nuevo proyecto de terraform, siguiendo la guía oficial:
He conseguido que funcione. (Lo estoy ejecutando como parte de una tarea de compilación en la nube de Google que se activa al confirmar)
Sin embargo, si cambio algo en un recurso (por ejemplo, reemplacé "gke_num_nodes" predeterminado de 2 a 1), cuando lo ejecuto terraform apply
nuevamente esto es lo que obtengo:
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" {
│
╵
¿Hay alguna manera de lograr que no intente recrear recursos intactos existentes?
Mi cloudbuild.json
es el siguiente:
{
"steps": [
{
"name": "hashicorp/terraform",
"entrypoint": "/bin/sh",
"args": [
"./cloudbuild/prepare-terraform.sh"
]
}
],
"logsBucket": "gs://my-bucket/logdir",
"serviceAccount": "projects/my-proj/serviceAccounts/[email protected]"
}
con prepare-terraform.sh
ser simplemente
terraform init
terraform plan
terraform apply -auto-approve
Respuesta1
Si está utilizando Terraform para crear recursos, hagaNOmodificarlos fuera de Terraform.
Si cambia algo manualmente, Terraform intentará volver a colocarlo en la forma en que lo declara HCL y en la forma en que Terraform lo guardó.
Se llamadeclarativo. Estás intentando hacer que Terraform sea dinámico, lo que frustra el uso de Terraform en primer lugar.
Respuesta2
El estado de terraformación debe almacenarse en un lugar donde todas las compilaciones puedan acceder a él. Por ejemplo, en un depósito de nube de Google como se ve aquí:https://www.terraform.io/docs/language/settings/backends/gcs.html