總覽
Terraform 能讓您以安全且可預測的方式建立、變更與改良基礎架構。Terraform 是開放原始碼工具,能將 API 編碼為宣告式設定檔。這類設定檔可供團隊成員共用,也能視為程式碼處理,進行編輯、審查和版本管理。
在本實驗室,您將建立使用模組的 Terraform 設定來自動部署 Google Cloud 基礎架構。具體來說,您將部署 1 個自動模式網路,其中設有防火牆規則和 2 個執行個體,如下圖所示:

目標
本實驗室將帶您瞭解如何執行下列工作:
- 建立自動模式網路設定
- 建立防火牆規則設定
- 建立執行個體模組
- 建立及部署設定
- 驗證設定的部署結果
設定
每個實驗室都會提供新的 Google Cloud 專案和一組資源,讓您在時限內免費使用。
-
按一下「Start Lab」按鈕。如果研究室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側的「Lab Details」窗格會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 剩餘時間
- 必須在這個研究室中使用的臨時憑證
- 完成這個實驗室所需的其他資訊 (如有)
-
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源並開啟另一個分頁,當中顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab Details」窗格找到 Username。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab Details」窗格找到 Password。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
按過後續的所有頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要查看列出 Google Cloud 產品和服務的選單,請點選左上角的「導覽選單」。
工作 1:設定 Terraform 和 Cloud Shell
在這項工作中,為了使用 Terraform,您將設定 Cloud Shell 環境。
啟動 Google Cloud Shell
Google Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。
Google Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
-
在 Cloud 控制台的右上方找到工具列,然後按一下「開啟 Cloud Shell」按鈕。

-
按一下「繼續」。
佈建並連線至環境的作業需要一些時間才能完成。連線建立完成即代表已通過驗證,而且專案已設為您的「PROJECT_ID」。示例如下:

gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵完成功能。
gcloud auth list
輸出內容:
Credentialed accounts:
- @.com (active)
輸出內容示例:
Credentialed accounts:
- google1623327_student@qwiklabs.net
gcloud config list project
輸出內容:
[core]
project =
輸出內容示例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注意事項:如需 gcloud 的完整說明,請參閱 gcloud CLI 總覽指南。
安裝 Terraform
Cloud Shell 未預先安裝 Terraform。您必須安裝 Terraform CLI,並設定成會跨 Cloud Shell 工作階段保留。
- 請在 Cloud Shell 終端機執行下列指令,設定 HashiCorp 存放區、安裝 Terraform,並確保日後的工作階段保留這項安裝:
cat <<'EOF' > ~/.customize_environment
# 設定 HashiCorp 存放區並安裝 Terraform
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install -y terraform
EOF
bash ~/.customize_environment
- 請執行下列指令,確認 Terraform 是否正確安裝:
terraform --version
輸出內容應該會顯示已安裝的版本 (v1.5.7 以上):
Terraform v1.9.0
建立設定檔
安裝 Terraform 後,請建立 Terraform 設定的目錄和檔案。
- 執行下列指令來建立 Terraform 設定目錄:
mkdir tfinfra
- 在 Cloud Shell 點選「開啟編輯器」圖示
。
注意:如果系統顯示「Unable to load code editor because third-party cookies are disabled」訊息,請點選「在新視窗中開啟」,程式碼編輯器便會在新分頁開啟。請返回原始分頁並點選「開啟終端機」,然後切換回「程式碼編輯器」分頁。在本實驗室,您需要定時切換回 Cloud Shell 終端機。
- 在程式碼編輯器的左側窗格中,展開 tfinfra 資料夾。
初始化 Terraform
Terraform 使用外掛程式型架構,支援多個可用基礎架構和供應商服務。每個「供應商」均為自己專屬的封裝二進位檔,與 Terraform 本身分開發布。請將 Google 設為供應商來初始化 Terraform。
- 對 tfinfra 資料夾按一下滑鼠右鍵
,然後點選「New File」,在該資料夾中建立新檔案。
- 將新檔案命名為 provider.tf,然後開啟檔案。
- 將下列程式碼複製到
provider.tf:
provider "google" {}
-
依序點選「File」>「Save」來儲存 provider.tf。
-
執行下列指令來初始化 Terraform:
cd tfinfra
terraform init
現在可以在 Cloud Shell 使用 Terraform 了。
工作 2:建立 mynetwork 及其資源
在這項工作中,您將建立自動模式網路 mynetwork、該網路的防火牆規則,以及 2 個 VM 執行個體 (mynet_vm_1 和 mynet_vm_2)。
設定 mynetwork
請建立新設定並定義 mynetwork。
- 對 tfinfra 資料夾按一下滑鼠右鍵
,然後點選「New File」,在該資料夾中建立新檔案。
- 將新檔案命名為 mynetwork.tf,然後開啟檔案。
- 將下列基本程式碼複製到
mynetwork.tf:
# 建立 mynetwork 網路
resource [RESOURCE_TYPE] "mynetwork" {
name = [RESOURCE_NAME]
# 在這裡加入資源屬性
}
在設定 Google Cloud 資源時,這個基礎範本是很好的起點:name 欄位可用來命名資源,type 欄位則可用來指定要建立的 Google Cloud 資源。您也可以定義其他屬性,但有些資源不一定需要設定這些屬性。
- 在
mynetwork.tf 中,將 [RESOURCE_TYPE] 改成 "google_compute_network" (須保留引號)。
注意:google_compute_network 資源為虛擬私有雲網路。如需可用資源相關資訊,請參閱 Google Cloud 供應商說明文件。如要進一步瞭解這項資源,請參閱 Terraform 說明文件。
- 在
mynetwork.tf 中,將 [RESOURCE_NAME] 改成 "mynetwork" (須保留引號)。
- 在
mynetwork.tf 新增下列屬性:
auto_create_subnetworks = true
根據定義,自動模式網路會在每個區域自動建立子網路,因此您需要將 auto_create_subnetworks 設為 true。
- 確認 mynetwork.tf 檔案的內容是否如下所示:
# 建立 mynetwork 網路
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# 在這裡加入資源屬性
auto_create_subnetworks = true
}
- 依序點選「File」>「Save」來儲存
mynetwork.tf。
設定防火牆規則
請定義防火牆規則,允許 HTTP、SSH、RDP 和 ICMP 流量通過 mynetwork。
- 在
mynetwork.tf 新增下列基本程式碼:
# 新增防火牆規則,允許 HTTP、SSH、RDP 和 ICMP 流量通過 mynetwork
resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" {
name = [RESOURCE_NAME]
# 在這裡加入資源屬性
}
- 在
mynetwork.tf 中,將 [RESOURCE_TYPE] 改成 "google_compute_firewall" (須保留引號)。
注意:google_compute_firewall 資源為防火牆規則,如要進一步瞭解這項資源,請參閱 Terraform 說明文件。
- 在
mynetwork.tf 中,將 [RESOURCE_NAME] 改成 "mynetwork-allow-http-ssh-rdp-icmp" (須保留引號)。
- 在
mynetwork.tf 新增下列屬性:
network = google_compute_network.mynetwork.self_link
注意:這項防火牆規則依附於網路上,因此須使用 google_compute_network.mynetwork.self_link 參照,指示 Terraform 按相依順序解析這些資源。在這個案例中,系統會先建立網路,再建立防火牆規則。
- 在
mynetwork.tf 新增下列屬性:
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
allow 規則清單會指定允許的通訊協定和通訊埠。
- 確認
mynetwork.tf 檔案的內容是否如下所示:
# 建立 mynetwork 網路
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# 在這裡加入資源屬性
auto_create_subnetworks = "true"
}
# 新增防火牆規則,允許 HTTP、SSH、RDP 和 ICMP 流量通過 mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# 在這裡加入資源屬性
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
- 依序點選「File」>「Save」來儲存 mynetwork.tf。
設定 VM 執行個體
請建立 VM 執行個體模組來定義 VM 執行個體。模組是指資料夾中可重複使用的設定。在本實驗室,您將使用建立好的模組定義 2 個 VM 執行個體。
- 選取 tfinfra 資料夾,然後依序點選「File」>「New Folder」,在該資料夾中建立新資料夾。
- 將新資料夾命名為 instance。
- 對 instance 資料夾按一下滑鼠右鍵
,然後點選「New File」,在該資料夾中建立新檔案。
- 將新檔案命名為 main.tf,然後開啟檔案。
Cloud Shell 中的資料夾架構應如下所示:

- 將下列基本程式碼複製到 main.tf:
resource [RESOURCE_TYPE] "vm_instance" {
name = [RESOURCE_NAME]
# 在這裡加入資源屬性
}
- 在
main.tf 中,將 [RESOURCE_TYPE] 改成 "google_compute_instance" (須保留引號)。
注意:google_compute_instance 資源為 Compute Engine 執行個體。如要進一步瞭解這項資源,請參閱 Terraform 說明文件。
- 在
main.tf 中,將 [RESOURCE_NAME] 改成 "${var.instance_name}" (須保留引號)。
您會使用此模組定義 2 個 VM 執行個體,因此須將執行個體名稱定義為輸入變數,以便透過 mynetwork.tf 控制變數名稱。如要進一步瞭解輸入變數,請參閱 Terraform:定義輸入變數指南。
- 在
main.tf 新增下列屬性:
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
這些屬性會將執行個體的可用區和機型定義為輸入變數。
- 在
main.tf 新增下列屬性:
boot_disk {
initialize_params {
image = "debian-cloud/debian-12"
}
}
這項屬性會將開機磁碟設為使用 Debian 12 OS 映像檔。2 個 VM 執行個體會使用同一個映像檔,因此您可以在模組中以硬式編碼寫入這個屬性。
- 在
main.tf 新增下列屬性:
network_interface {
network = "${var.instance_network}"
access_config {
# 為執行個體分配一對一 NAT IP
}
}
這項屬性會透過輸入變數提供網路名稱,並加入存取設定,藉此定義網路介面。將存取設定留空會產生臨時外部 IP 位址 (本實驗室需使用這個位址)。如要建立只有內部 IP 位址的執行個體,請移除「access_config」部分。詳情請參閱 Terraform 說明文件。
- 確認
main.tf 的內容是否如下所示,包括大括號 {}:
resource "google_compute_instance" "vm_instance" {
name = "${var.instance_name}"
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
boot_disk {
initialize_params {
image = "debian-cloud/debian-12"
}
}
network_interface {
network = "${var.instance_network}"
access_config {
# 為執行個體分配一對一 NAT IP
}
}
}
- 依序點選「File」>「Save」來儲存 main.tf。
- 對 instance 資料夾按一下滑鼠右鍵
,然後點選「New File」,在該資料夾中建立新檔案。
- 將新檔案命名為 variables.tf,然後開啟檔案。
- 在
variables.tf 定義 4 個輸入變數。
variable "instance_name" {}
variable "instance_zone" {}
variable "instance_type" {
default = "e2-micro"
}
variable "instance_network" {}
為 instance_type 提供預設值,即可將變數設為選填。instance_name、instance_zone 和 instance_network 為必填變數,之後會在 mynetwork.tf 中定義。
- 依序點選「File」>「Save」來儲存 variables.tf。
- 在
mynetwork.tf 新增下列 VM 執行個體:
# 建立 mynet-vm-1 執行個體
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# 建立 mynet-vm-2 執行個體
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
這些資源會使用 instance 資料夾中的模組,並提供名稱、可用區和網路做為輸入內容。這些執行個體依附於虛擬私有雲網路上,因此須使用 google_compute_network.mynetwork.self_link 參照,指示 Terraform 按相依順序解析這些資源。在這個案例中,系統會先建立網路,再建立執行個體。
注意:編寫 Terraform 模組的好處在於,模組可在許多不同設定中重複使用。您也可以使用 Terraform Module Registry 中的現有模組,不必自行編寫。
-
依序點選「File」>「Save」來儲存 mynetwork.tf。
-
確認 mynetwork.tf 的內容是否如下所示,包括大括號 {}:
# 建立 mynetwork 網路
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# 在這裡加入資源屬性
auto_create_subnetworks = "true"
}
# 新增防火牆規則,允許 HTTP、SSH、RDP 和 ICMP 流量通過 mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# 在這裡加入資源屬性
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
# 建立 mynet-vm-1 執行個體
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# 建立 mynet-vm-2 執行個體
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
建立 mynetwork 及其資源
現在可以套用 mynetwork 設定了。
- 執行下列指令來改寫 Terraform 設定檔,套用標準格式和樣式:
terraform fmt
輸出內容應如下所示:
mynetwork.tf
注意:如果收到錯誤訊息,請返回先前步驟,確認設定是否與實驗室操作說明相符。若無法排解設定問題,請下載並參考下列已完成的設定:
- 執行下列指令來初始化 Terraform:
terraform init
輸出內容應如下所示:
Initializing modules...
- mynet-vm-2 in instance
- mynet-vm-2 in instance
...
Terraform has been successfully initialized!
注意:如果發生錯誤,請回到先前步驟,確認資料夾/檔案的結構正確無誤。若無法排解設定問題,請點選上方連結來參考已完成的設定。待問題解決後,再重新執行先前的指令。
- 執行下列指令,建立執行計畫:
terraform plan
輸出內容應如下所示:
...
Plan: 4 to add, 0 to change, 0 to destroy.
...
Terraform 判定需新增下列 4 項資源:
| 名稱 |
說明 |
| mynetwork |
虛擬私有雲網路 |
| mynetwork-allow-http-ssh-rdp-icmp |
允許 HTTP、SSH、RDP 和 ICMP 流量的防火牆規則 |
| mynet-vm-2 |
中的 VM 執行個體 |
| mynet-vm-2 |
中的 VM 執行個體 |
- 執行下列指令,套用所需變更:
terraform apply
- 輸入以下內容,確認預定執行的操作:
yes
輸出內容應如下所示:
...
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
點選「Check my progress」,確認目標已達成。
建立 mynetwork 及其資源
注意:如果在執行過程中收到錯誤訊息,請返回先前步驟,確認資料夾/檔案結構正確無誤。若無法排解設定問題,請點選上方連結來參考已完成的設定。待問題解決後,再重新執行先前的指令。
工作 3:驗證部署結果
請在 Google Cloud 控制台,驗證先前建立的資源。
在 Google Cloud 控制台驗證虛擬私有雲 (VPC) 網路
- 前往 Google Cloud 控制台,依序點選「導覽選單」圖示
>「虛擬私有雲網路」>「虛擬私有雲網路」。
- 查看 mynetwork 虛擬私有雲網路,確認每個區域都有子網路。
- 在「導覽選單」中依序點選「虛擬私有雲網路」>「防火牆」。
- 依「網路」排序防火牆規則。
- 查看 mynetwork 的 mynetwork-allow-http-ssh-rdp-icmp 防火牆規則。
在 Cloud 控制台驗證 VM 執行個體
- 依序點選「導覽選單」圖示
>「Compute Engine」>「VM 執行個體」。
- 查看 mynet-vm-1 和 mynet-vm-2 執行個體。
- 記下 mynet-vm-2 的內部 IP 位址。
- 在 mynet-vm-1 的資料列,點選「SSH」來啟動終端機並連線。
- 在 SSH 終端機執行下列指令 (將其中的 mynet-vm-2 內部 IP 位址改成稍早記下的值),測試能否連線至 mynet-vm-2 內部 IP 位址:
ping -c 3 <在這裡輸入 mynet-vm-2 的內部 IP>
注意:這 2 個 VM 執行個體位於同一個網路,而且防火牆規則允許 ICMP 流量,因此應能順利連線!
工作 4:回顧
在本實驗室,您建立了使用模組的 Terraform 設定來自動部署 Google Cloud 基礎架構。當設定有所變動時,Terraform 可以建立累加變更內容的執行計畫,讓您逐步建構整體設定。
執行個體模組可讓您將同一組資源設定重複用於多項資源,同時透過輸入變數提供屬性值。您所建立的設定與模組均可做為未來部署作業的基礎。
關閉研究室
如果您已完成實驗室,請點選「End Lab」。Google Skills 會清除您使用的資源和帳戶。
您可以為實驗室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」。
星級評等代表您的滿意程度:
- 1 星 = 非常不滿意
- 2 星 = 不滿意
- 3 星 = 普通
- 4 星 = 滿意
- 5 星 = 非常滿意
如果不想提供意見回饋,您可以直接關閉對話方塊。
如有任何想法、建議或指教,請透過「Support」分頁提交。
Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。