Terraform:使用相同的Terraform代码创建新的GCE实例



我使用terraform modules成功创建了一个新的gcp vm实例。我的模块文件夹中的内容如下

#main.tf
# google_compute_instance.default:
resource "google_compute_instance" "default" {
machine_type         = "${var.machinetype}"
name                 = "${var.name}"
project              = "demo"
tags                 = []
zone                 = "${var.zone}"
boot_disk {
initialize_params {
image  = "https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20210701"
size   = 20
type   = "pd-balanced"
}
}

network_interface {
network            = "default"
subnetwork         = "default"
subnetwork_project = "gcp-infrastructure-319318"
}

service_account {
email  = "971558418058-compute@developer.gserviceaccount.com"
scopes = [
"https://www.googleapis.com/auth/devstorage.read_only",
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring.write",
"https://www.googleapis.com/auth/service.management.readonly",
"https://www.googleapis.com/auth/servicecontrol",
"https://www.googleapis.com/auth/trace.append",
]
}
}
-----------
#variables.tf
variable "zone" {
default="us-east1-b"
}
variable "machinetype" {
default="f1-micro"
}
------------------
#terraform.tfvars
machinetype="g1-small"
zone="europe-west1-b"

我的主要代码块如下

$ cat providers.tf
provider "google" {
}
$ cat main.tf
module "gce" {
source = "../../../modules/services/gce"
name = "new-vm-tf"
}

有了这段代码,我可以成功地创建一个新的vm实例

$ gcloud compute instances list
NAME       ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
new-vm-tf  us-east1-b  f1-micro                   10.142.0.3                RUNNING

现在,我需要创建一个机器类型为e2-standard的新VM instance。我该如何处理这种情况?

如果我编辑现有的main.tf,如下所示,它将破坏现有的vm instance to create the new vm instance

$ cat main.tf
module "gce" {
source = "../../../modules/services/gce"
name = "new-vm-tf1"
}

terraform plan确认如下

~ name                 = "new-vm-tf" -> "new-vm-tf1" # forces replacement
Plan: 1 to add, 0 to change, 1 to destroy.

我需要指针来重新生成相同的代码,以创建一个新的vm,而不对现有的vm进行任何更改。请建议

我建议您深入了解地形机制和最佳实践。我有两个关键词要启动:tfstate和variables。

tfstate是部署上下文。如果您更改了部署,但上下文不一致,Terraform会删除不一致的内容并创建缺失的部分。

通过自定义条目中的值,这些变量对于重用泛型代码非常有用。

最新更新