我正在启动一个新的 terraform 项目,遵循官方指南:
我已设法让它运行。(我将其作为提交时触发的 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