error de aplicación de terraform ya existe en recursos intactos

error de aplicación de terraform ya existe en recursos intactos

Estoy iniciando un nuevo proyecto de terraform, siguiendo la guía oficial:

https://learn.hashicorp.com/tutorials/terraform/gke?in=terraform/kubernetes&utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS&_ga=2.91746777.2118895439.1637849824-960084622.1637 849824

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 applynuevamente 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.jsones 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.shser 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

información relacionada