blog post

Terraform 從零開始 (3) — 運算資源服務-使用Terraform創建虛擬機器-VM

GCE 運算資源服務-使用Terraform創建虛擬機器-VM
GCE 運算資源服務-使用Terraform創建虛擬機器-VM

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

1. Google 運算資源服務VM的主要功能和用途

虛擬機器 (Virtual Machines,VMs) 是一種強大的運算資源,在Google Cloud Platform (GCP) 上使用Terraform創建的VM能夠模擬完整的計算機系統,並提供豐富的功能和用途。以下是一些主要的功能和用途:

  1. 運行應用程序: 虛擬機器是運行各種應用程序的理想場所。從基本的Web應用程序到複雜的數據庫伺服器,VMs提供了一個可靠的環境來運行應用程序。這使得您可以輕鬆管理應用程序的運行環境,並根據需求調整運算資源的配置。
  2. 開發和測試: VMs 提供了一個理想的環境來進行軟體開發和測試。您可以在虛擬機器上安裝開發工具、編譯器和依賴項,並在其中進行代碼編寫和測試。這種隔離的環境確保您的開發和測試不會影響主要的運行環境。
  3. 數據處理和分析: 虛擬機器在數據處理和分析方面也發揮著關鍵作用。您可以在VM上運行大數據處理框架,如Hadoop和Spark,以處理海量數據並進行複雜的分析操作。同時,VMs還能支援機器學習、深度學習等計算密集型任務,為您提供強大的運算能力。
  4. 網站運營:對於網站運營來說,虛擬機器提供了基礎架構和服務的完整解決方案。您可以在VM上運行Web應用程序、資料庫和其他相關服務,為網站提供穩定的運行環境。舉例來說,您可以使用GCP虛擬機器建立一個網上電商平台,並在VM上運行該平台的網站和數據庫。

2. Google 運算資源服務VM的使用情境

Google Cloud Platform 的虛擬機器可在多種場景下使用,以下是一些常見的使用情境:

  1. 網站運營:虛擬機器可用於搭建和運行網站。無論是個人部落格、企業網站還是電子商務平台,VMs都能提供穩定的運行環境,並支援各種Web應用程序和資料庫。
  2. 軟體開發:虛擬機器是軟體開發和測試的理想選擇。開發人員可以在VM上設定開發環境,並進行代碼編寫、測試和調試。VM的隔離性確保了開發環境的穩定性和安全性。
  3. 數據處理和分析:虛擬機器在處理大數據和進行複雜分析時具有優勢。您可以在VM上運行大數據框架,如Hadoop、Spark和Flink,以處理和分析海量數據。
  4. 機器學習和深度學習:VMs提供了計算資源來支援機器學習和深度學習項目。您可以在VM上訓練模型、進行實驗,甚至構建自己的人工智能應用程序。

3. GCP 運算資源服務 — 使用Terraform創建虛擬機器 (VM)

在這個章節中,我們將深入探討如何使用Terraform在Google Cloud Platform上創建虛擬機器。我們將依次進行以下步驟:

1. 創建Debian 10的虛擬機器:我們將通過Terraform代碼來定義一個Debian 10虛擬機器的配置,包括所需的運算資源、映像、磁碟等。

2. 使用預設的網路,並使用日本的網段 asia-northeast1-a:我們將設定虛擬機器使用GCP預設的網路設置,並指定虛擬機器的位置為日本的 asia-northeast1-a 區域。

3. 嘗試ssh連線到這台虛擬機器:我們將展示如何使用SSH連線到創建的虛擬機器,以驗證虛擬機器已成功創建並運行

4. Terraform VM 連結:可以到github參考對應的Terraform程式碼。

首先創建三個檔案,分別是 0-provider.tf, 1-variables.tf, 2-main.tf

0-provider.tf

##################################################################################
# CONFIGURATION
##################################################################################
terraform {
  required_version = ">=1.0"
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = ">= 4.40.0"
    }
  }
}

provider "google" {
  project = var.GCP_PROJECT
  # region  = var.GCP_REGION
  # zone        = var.zone
}

這個檔案主要用於配置 Terraform 的提供者(provider),以確保 Terraform 可以正確地與 Google Cloud Platform(GCP)進行交互。

  • terraform :這個區塊設定了 Terraform 的版本要求,確保使用的版本符合最低要求大於4.40.0版本。同時,它也定義了所需的提供者和版本。
  • provider "google" :這個區塊指定了要使用的 GCP 提供,指定了 GCP 專案 ID(由 var.GCP_PROJECT 變數提供)。

1-variables.tf

variable "GCP_PROJECT" {
  description = "GCP Project ID"
  type        = string
  default     = "terraform101-384507"
}

variable "instance_name" {
  type    = string
  default = "vm-tf-ch4-4-3"
}

variable "location" {
  type    = string
  default = "asia-northeast1"
}

variable "zone" {
  type    = string
  default = "asia-northeast1-a"
}

這個檔案用於定義 Terraform 使用的變數,以實現更高度的可配置性和重用性。

  • variable "GCP_PROJECT":這是 GCP 專案 ID 的變數,它描述了 GCP 專案的 ID。它的預設值是 “terraform101-384507″,但可以在使用時指定不同的值。
  • variable "instance_name":這是用於定義 Google Cloud VM 名稱的變數。
  • variable "location":這是定義網路服務所在位置(地區)的變數。
  • variable "zone":這是定義網路服務所在區域的變數。

2-main.tf

##################################################################################
# RESOURCE
##################################################################################
resource "google_compute_instance" "example" {
  name         = var.instance_name
  zone         = var.zone
  machine_type = "e2-medium"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-10"
    }
  }

  network_interface {
    network = "default"
    access_config {
    }
  }
}

output "instance_ip" {
  value = google_compute_instance.example.network_interface[0].access_config[0].nat_ip
}

上述的Terraform代碼片段是用於創建Google Cloud Platform (GCP) 上的一個虛擬機器(VM)。讓我們逐一解釋這段代碼的意義:

  1. resource "google_compute_instance" "example": 這個部分定義了一個名為 “example” 的 Terraform 資源,類型為 google_compute_instance,表示我們要創建一個 GCP VM。
  2. name = var.instance_name: 這裡使用了一個 Terraform 變數 var.instance_name 作為 VM 的名稱。這個變數將在其他地方定義並提供值。
  3. zone = var.zone: 這個部分指定了 VM 將位於的 GCP 區域。類似地,這裡使用了一個名為 var.zone 的 Terraform 變數。
  4. machine_type = "e2-medium": 這個設置指定了 VM 的運算資源配置,即虛擬機器的機型。在這個例子中,我們選擇了 “e2-medium” 機型,這代表中等規模的虛擬機器。
  5. boot_diskinitialize_params: 這部分定義了 VM 的啟動磁碟配置,包括使用的映像。在這個例子中,我們選擇使用 “debian-cloud/debian-10” 映像,即 Debian 10 作業系統。
  6. network_interfaceaccess_config: 這個部分指定了 VM 的網路配置,包括連接到的網路和存取配置。在這裡,我們將 VM 連接到預設網路。

接下來的部分是代碼的輸出部分,用於將 VM 的 IP 地址輸出為 Terraform 變數。具體來說:

  1. output "instance_ip": 這部分定義了一個輸出,名稱為 “instance_ip”,用於將 VM 的 IP 地址暴露給其他 Terraform 設定或模組。
  2. value = google_compute_instance.example.network_interface[0].access_config[0].nat_ip: 這裡指定了要輸出的值,即 google_compute_instance.example 這個 VM 資源的網路接口中的 NAT IP 地址。

總之,這段代碼描述了如何使用 Terraform 在 GCP 上創建一個虛擬機器,並定義了該 VM 的名稱、區域、運算資源配置、映像、網路連接等。同時,它也將該 VM 的 IP 地址輸出為 Terraform 變數,以便於後續的使用。

最後執行 terraform apply -auto-approve 來部署對應的資源到雲端架構上,就可以得到下列的結果。

terraform apply -auto-approve
GCE 虛擬機器VM
ssh 連線確認

Terraform tip:可以利用下列的 Terraform tip,來增進部署效率。

  1. 打開終端機中的 .bashrc or .zshrc 檔案
  2. 在文件最下方加入下列指令
  3. 執行 source ~/.zshrc 或是 source ~/.bashrc 讓下面的 alias 快捷鍵生效
alias tf="terraform"
alias tfv="terraform validate"
alias tfdp="terraform apply -auto-approve plan.out"
alias tfd="terraform apply -auto-approve"
alias tfr="terraform destroy -auto-approve"
alias tfp="terraform plan -out plan.out"

課程連結

如果您覺得這篇文章對您有幫助,我誠摯地邀請您透過以下連結訂閱我的 Udemy 課程,進一步深入學習 Terraform 和 GCP 的知識:

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程
https://devops-with-alex.com/go/terraform

相關連結

  1. Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code — https://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
  2. Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
  3. GCP 虛擬運算資源Cloud Engine (GCE)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *