terraform 应用错误 alreadyExists 在未触及的资源上

terraform 应用错误 alreadyExists 在未触及的资源上

我正在启动一个新的 terraform 项目,遵循官方指南:

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.1637849824

我已设法让它运行。(我将其作为提交时触发的 Google Cloud 构建任务的一部分来运行)

但是,如果我对资源进行某些更改(例如,我将“gke_num_nodes”默认值从 2 替换为 1),当我terraform apply再次运行时,我会得到以下结果:


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

有没有办法让它不尝试重新创建现有的未触及的资源?

cloudbuild.json的如下:

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

prepare-terraform.sh简单地

terraform init
terraform plan
terraform apply -auto-approve

答案1

如果您使用 Terraform 创建资源,请执行以下操作:不是在 Terraform 之外修改它们。

如果您手动更改某些内容,Terraform 将尝试将其恢复到 HCL 声明的方式和 Terraform 保存的方式。

这就是所谓的声明式。您正在尝试使 Terraform 动态化,但这首先会破坏使用 Terraform 的效果。

答案2

Terraform 状态需要存储在所有构建都可以访问的地方。例如,在 Google Cloud 存储桶中,如下所示:https://www.terraform.io/docs/language/settings/backends/gcs.html

相关内容