# #google-cloud-platform #terraform #terraform-provider-gcp #terraform-modules
Вопрос:
Я успешно создал новый gcp vm
экземпляр с помощью terraform modules
. Содержимое папки «Мой модуль» выглядит следующим образом
#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"
}
С помощью этого кода я могу успешно создать новый экземпляр виртуальной машины
$ 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
Теперь у меня есть требование создать новый VM instance
тип машины e2-standard
. как я могу справиться с этим сценарием?
Если я отредактирую свое существующее 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.
Мне нужны указатели, чтобы повторно использовать тот же код для создания новой виртуальной машины, существующей без каких-либо изменений в существующей . Пожалуйста, предложите
Комментарии:
1. Возможно использование той же конфигурации (HCL). Однако это верный путь к катастрофе. Сохраняйте конфигурации ресурсов независимыми, чтобы случайно не уничтожить (не воссоздать) ресурс.
Ответ №1:
Я рекомендую вам глубоко погрузиться в механизм терраформирования и лучшие практики. У меня есть 2 ключевых слова для начала: tfstate и переменные.
Состояние tf-это контекст развертывания. Если вы изменили развертывание и контекст не соответствует, Terraform удалит то, что не соответствует, и создаст недостающие части.
Переменные полезны для повторного использования фрагмента общего кода путем настройки значений в записи.