使用 Terraform 創建 GCP 虛擬機器,實現運算資源的管理。
GCP 運算資源服務的主要功能、用途與使用情境,可以參考先前的章節來做了解,會更幫助我們了解對應用terraform產生的雲端資源。
Terraform/GCP實戰:使用 GCP Console 創建 GCP 運算資源服務
在這個章節中,我們將深入探討如何使用Terraform在Google Cloud Platform上創建虛擬機器。我們將依次進行以下步驟:
創建Debian 10的虛擬機器:我們將通過Terraform代碼來定義一個Debian 10虛擬機器的配置,包括所需的運算資源、映像、磁碟等。
使用預設的網路,並使用日本的網段 asia-northeast1-a:我們將設定虛擬機器使用GCP預設的網路設置,並指定虛擬機器的位置為日本的 asia-northeast1-a 區域。
嘗試ssh連線到這台虛擬機器:我們將展示如何使用SSH連線到創建的虛擬機器,以驗證虛擬機器已成功創建並運行
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)。讓我們逐一解釋這段代碼的意義:
resource "google_compute_instance" "example"
: 這個部分定義了一個名為 "example" 的 Terraform 資源,類型為 google_compute_instance,表示我們要創建一個 GCP VM。
name = var.instance_name
: 這裡使用了一個 Terraform 變數 var.instance_name 作為 VM 的名稱。這個變數將在其他地方定義並提供值。
zone = var.zone
: 這個部分指定了 VM 將位於的 GCP 區域。類似地,這裡使用了一個名為 var.zone 的 Terraform 變數。
machine_type = "e2-medium"
: 這個設置指定了 VM 的運算資源配置,即虛擬機器的機型。在這個例子中,我們選擇了 "e2-medium" 機型,這代表中等規模的虛擬機器。
boot_disk 和 initialize_params
: 這部分定義了 VM 的啟動磁碟配置,包括使用的映像。在這個例子中,我們選擇使用 "debian-cloud/debian-10" 映像,即 Debian 10 作業系統。
network_interface 和 access_config
: 這個部分指定了 VM 的網路配置,包括連接到的網路和存取配置。在這裡,我們將 VM 連接到預設網路。
接下來的部分是代碼的輸出部分,用於將 VM 的 IP 地址輸出為 Terraform 變數。具體來說:
output "instance_ip"
: 這部分定義了一個輸出,名稱為 "instance_ip",用於將 VM 的 IP 地址暴露給其他 Terraform 設定或模組。
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 init
# or
tf init
確認部署計畫內容
terraform plan -out plan.out
# or
tfp
最後執行terraform apply -auto-approve
來部署對應的資源到雲端架構上,就可以得到下列的結果。
terraform apply -auto-approve
# or
tfdp
ssh連線到這台虛擬機器
創建完畢,並看到虛擬機器後,可以點選ssh來進入機器內部。
Terraform tip:可以利用下列的 Terraform tip,來增進部署效率。
打開終端機中的 .bashrc or .zshrc 檔案
在文件最下方加入下列指令
執行 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"
Terraform 雲端資源實作:介紹如何使用Terraform在Google Cloud Platform(GCP)上建立虛擬機器(VM)的步驟。包括Terraform程式碼的配置、變數定義和VM創建與Terraform執行命令的示範。
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
Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
歡迎訂閱我的udemy課程:Terraform 從零開始 - 10+實戰Lab打造GCP雲端自動化架構課程 - https://devops-with-alex.com/go/terraform