
Estou iniciando um novo projeto de terraform, seguindo o guia oficial:
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 apply
novamente, é 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.sh
ser 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