O erro de aplicação do terraform já existe em recursos intocados

O erro de aplicação do terraform já existe em recursos intocados

Estou iniciando um novo projeto de terraform, seguindo o guia 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.163 7849824

Eu consegui fazê-lo funcionar. (Estou executando-o como parte de uma tarefa de criação do Google Cloud acionada no commit)

No entanto, se eu mudar algo em um recurso (por exemplo, substituí o padrão "gke_num_nodes" de 2 para 1), quando executo terraform applynovamente, é isso que recebo:


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" {

Existe uma maneira de não tentar recriar os recursos intocados existentes?

O meu cloudbuild.jsoné o seguinte:

{
  "steps": [
    {
      "name": "hashicorp/terraform",
      "entrypoint": "/bin/sh",
      "args": [
        "./cloudbuild/prepare-terraform.sh"
      ]
    }
  ],
  "logsBucket": "gs://my-bucket/logdir",
  "serviceAccount": "projects/my-proj/serviceAccounts/[email protected]"
}

com prepare-terraform.shser simplesmente

terraform init
terraform plan
terraform apply -auto-approve

Responder1

Se você estiver usando o Terraform para criar recursos, façaNÃOmodifique-os fora do Terraform.

Se você alterar algo manualmente, o Terraform tentará colocá-lo de volta da maneira que a HCL declara e da maneira como o Terraform o salvou.

Isso é chamadodeclarativo. Você está tentando tornar o Terraform dinâmico, o que derrota o uso do Terraform em primeiro lugar.

Responder2

O estado do terraform precisa ser armazenado onde for acessível por todas as compilações. Por exemplo, em um bucket do Google Cloud, como visto aqui:https://www.terraform.io/docs/linguagem/settings/backends/gcs.html

informação relacionada