Терраформирование: Создайте новый экземпляр GCE, используя тот же код терраформирования

# #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 удалит то, что не соответствует, и создаст недостающие части.

Переменные полезны для повторного использования фрагмента общего кода путем настройки значений в записи.