Create mynetwork and its resources

Check my progress

/ 100

This lab may incorporate AI tools to support your learning.

總覽

Terraform 能讓您以安全且可預測的方式建立、變更與改良基礎架構。Terraform 是開放原始碼工具,能將 API 編碼為宣告式設定檔。這類設定檔可供團隊成員共用,也能視為程式碼處理,進行編輯、審查和版本管理。

在本實驗室,您將建立使用模組的 Terraform 設定來自動部署 Google Cloud 基礎架構。具體來說,您將部署 1 個自動模式網路,其中設有防火牆規則和 2 個執行個體,如下圖所示:

Terraform 設定圖表

目標

本實驗室將帶您瞭解如何執行下列工作:

  • 建立自動模式網路設定
  • 建立防火牆規則設定
  • 建立執行個體模組
  • 建立及部署設定
  • 驗證設定的部署結果

設定

每個實驗室都會提供新的 Google Cloud 專案和一組資源,讓您在時限內免費使用。

  1. 按一下「Start Lab」按鈕。如果研究室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側的「Lab Details」窗格會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 剩餘時間
    • 必須在這個研究室中使用的臨時憑證
    • 完成這個實驗室所需的其他資訊 (如有)
  2. 點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」

    接著,實驗室會啟動相關資源並開啟另一個分頁,當中顯示「登入」頁面。

    提示:您可以在不同的視窗中並排開啟分頁。

    注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab Details」窗格找到 Username

  4. 點選「下一步」

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab Details」窗格找到 Password

  6. 點選「下一步」

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 按過後續的所有頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

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 資源。

  1. 在 Cloud 控制台的右上方找到工具列,然後按一下「開啟 Cloud Shell」按鈕。

    特別標明的「Cloud Shell」圖示

  2. 按一下「繼續」

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

在 Cloud Shell 終端機中,特別標明了專案 ID

gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵完成功能。

  • 您可以使用下列指令來列出使用中的帳戶:
gcloud auth list

輸出內容:

Credentialed accounts: - @.com (active)

輸出內容示例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project =

輸出內容示例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注意事項:如需 gcloud 的完整說明,請參閱 gcloud CLI 總覽指南

安裝 Terraform

Cloud Shell 未預先安裝 Terraform。您必須安裝 Terraform CLI,並設定成會跨 Cloud Shell 工作階段保留。

  1. 請在 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
  1. 請執行下列指令,確認 Terraform 是否正確安裝:
terraform --version

輸出內容應該會顯示已安裝的版本 (v1.5.7 以上):

Terraform v1.9.0

建立設定檔

安裝 Terraform 後,請建立 Terraform 設定的目錄和檔案。

  1. 執行下列指令來建立 Terraform 設定目錄:
mkdir tfinfra
  1. 在 Cloud Shell 點選「開啟編輯器」圖示 「Cloud Shell 編輯器」圖示

注意:如果系統顯示「Unable to load code editor because third-party cookies are disabled」訊息,請點選「在新視窗中開啟」,程式碼編輯器便會在新分頁開啟。請返回原始分頁並點選「開啟終端機」,然後切換回「程式碼編輯器」分頁。在本實驗室,您需要定時切換回 Cloud Shell 終端機。

  1. 在程式碼編輯器的左側窗格中,展開 tfinfra 資料夾。

初始化 Terraform

Terraform 使用外掛程式型架構,支援多個可用基礎架構和供應商服務。每個「供應商」均為自己專屬的封裝二進位檔,與 Terraform 本身分開發布。請將 Google 設為供應商來初始化 Terraform。

  1. tfinfra 資料夾按一下滑鼠右鍵,然後點選「New File」,在該資料夾中建立新檔案。
  2. 將新檔案命名為 provider.tf,然後開啟檔案。
  3. 將下列程式碼複製到 provider.tf
provider "google" {}
  1. 依序點選「File」>「Save」來儲存 provider.tf

  2. 執行下列指令來初始化 Terraform:

cd tfinfra terraform init

現在可以在 Cloud Shell 使用 Terraform 了。

工作 2:建立 mynetwork 及其資源

在這項工作中,您將建立自動模式網路 mynetwork、該網路的防火牆規則,以及 2 個 VM 執行個體 (mynet_vm_1mynet_vm_2)。

設定 mynetwork

請建立新設定並定義 mynetwork

  1. tfinfra 資料夾按一下滑鼠右鍵,然後點選「New File」,在該資料夾中建立新檔案。
  2. 將新檔案命名為 mynetwork.tf,然後開啟檔案。
  3. 將下列基本程式碼複製到 mynetwork.tf
# 建立 mynetwork 網路 resource [RESOURCE_TYPE] "mynetwork" { name = [RESOURCE_NAME] # 在這裡加入資源屬性 }

在設定 Google Cloud 資源時,這個基礎範本是很好的起點:name 欄位可用來命名資源,type 欄位則可用來指定要建立的 Google Cloud 資源。您也可以定義其他屬性,但有些資源不一定需要設定這些屬性。

  1. mynetwork.tf 中,將 [RESOURCE_TYPE] 改成 "google_compute_network" (須保留引號)。

注意:google_compute_network 資源為虛擬私有雲網路。如需可用資源相關資訊,請參閱 Google Cloud 供應商說明文件。如要進一步瞭解這項資源,請參閱 Terraform 說明文件

  1. mynetwork.tf 中,將 [RESOURCE_NAME] 改成 "mynetwork" (須保留引號)。
  2. mynetwork.tf 新增下列屬性:
auto_create_subnetworks = true

根據定義,自動模式網路會在每個區域自動建立子網路,因此您需要將 auto_create_subnetworks 設為 true

  1. 確認 mynetwork.tf 檔案的內容是否如下所示:
# 建立 mynetwork 網路 resource "google_compute_network" "mynetwork" { name = "mynetwork" # 在這裡加入資源屬性 auto_create_subnetworks = true }
  1. 依序點選「File」>「Save」來儲存 mynetwork.tf

設定防火牆規則

請定義防火牆規則,允許 HTTP、SSH、RDP 和 ICMP 流量通過 mynetwork。

  1. mynetwork.tf 新增下列基本程式碼:
# 新增防火牆規則,允許 HTTP、SSH、RDP 和 ICMP 流量通過 mynetwork resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" { name = [RESOURCE_NAME] # 在這裡加入資源屬性 }
  1. mynetwork.tf 中,將 [RESOURCE_TYPE] 改成 "google_compute_firewall" (須保留引號)。

注意:google_compute_firewall 資源為防火牆規則,如要進一步瞭解這項資源,請參閱 Terraform 說明文件

  1. mynetwork.tf 中,將 [RESOURCE_NAME] 改成 "mynetwork-allow-http-ssh-rdp-icmp" (須保留引號)。
  2. mynetwork.tf 新增下列屬性:
network = google_compute_network.mynetwork.self_link

注意:這項防火牆規則依附於網路上,因此須使用 google_compute_network.mynetwork.self_link 參照,指示 Terraform 按相依順序解析這些資源。在這個案例中,系統會先建立網路,再建立防火牆規則。

  1. mynetwork.tf 新增下列屬性:
allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"]

allow 規則清單會指定允許的通訊協定和通訊埠。

  1. 確認 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"] }
  1. 依序點選「File」>「Save」來儲存 mynetwork.tf

設定 VM 執行個體

請建立 VM 執行個體模組來定義 VM 執行個體。模組是指資料夾中可重複使用的設定。在本實驗室,您將使用建立好的模組定義 2 個 VM 執行個體。

  1. 選取 tfinfra 資料夾,然後依序點選「File」>「New Folder」,在該資料夾中建立新資料夾
  2. 將新資料夾命名為 instance
  3. instance 資料夾按一下滑鼠右鍵,然後點選「New File」,在該資料夾中建立新檔案。
  4. 將新檔案命名為 main.tf,然後開啟檔案。

Cloud Shell 中的資料夾架構應如下所示:

資料夾結構

  1. 將下列基本程式碼複製到 main.tf
resource [RESOURCE_TYPE] "vm_instance" { name = [RESOURCE_NAME] # 在這裡加入資源屬性 }
  1. main.tf 中,將 [RESOURCE_TYPE] 改成 "google_compute_instance" (須保留引號)。

注意:google_compute_instance 資源為 Compute Engine 執行個體。如要進一步瞭解這項資源,請參閱 Terraform 說明文件

  1. main.tf 中,將 [RESOURCE_NAME] 改成 "${var.instance_name}" (須保留引號)。

您會使用此模組定義 2 個 VM 執行個體,因此須將執行個體名稱定義為輸入變數,以便透過 mynetwork.tf 控制變數名稱。如要進一步瞭解輸入變數,請參閱 Terraform:定義輸入變數指南

  1. main.tf 新增下列屬性:
zone = "${var.instance_zone}" machine_type = "${var.instance_type}"

這些屬性會將執行個體的可用區和機型定義為輸入變數。

  1. main.tf 新增下列屬性:
boot_disk { initialize_params { image = "debian-cloud/debian-12" } }

這項屬性會將開機磁碟設為使用 Debian 12 OS 映像檔。2 個 VM 執行個體會使用同一個映像檔,因此您可以在模組中以硬式編碼寫入這個屬性。

  1. main.tf 新增下列屬性:
network_interface { network = "${var.instance_network}" access_config { # 為執行個體分配一對一 NAT IP } }

這項屬性會透過輸入變數提供網路名稱,並加入存取設定,藉此定義網路介面。將存取設定留空會產生臨時外部 IP 位址 (本實驗室需使用這個位址)。如要建立只有內部 IP 位址的執行個體,請移除「access_config」部分。詳情請參閱 Terraform 說明文件

  1. 確認 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 } } }
  1. 依序點選「File」>「Save」來儲存 main.tf。
  2. instance 資料夾按一下滑鼠右鍵,然後點選「New File」,在該資料夾中建立新檔案。
  3. 將新檔案命名為 variables.tf,然後開啟檔案。
  4. variables.tf 定義 4 個輸入變數。
variable "instance_name" {} variable "instance_zone" {} variable "instance_type" { default = "e2-micro" } variable "instance_network" {}

instance_type 提供預設值,即可將變數設為選填。instance_nameinstance_zoneinstance_network 為必填變數,之後會在 mynetwork.tf 中定義。

  1. 依序點選「File」>「Save」來儲存 variables.tf。
  2. 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 中的現有模組,不必自行編寫。

  1. 依序點選「File」>「Save」來儲存 mynetwork.tf

  2. 確認 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 設定了。

  1. 執行下列指令來改寫 Terraform 設定檔,套用標準格式和樣式:
terraform fmt

輸出內容應如下所示:

mynetwork.tf

注意:如果收到錯誤訊息,請返回先前步驟,確認設定是否與實驗室操作說明相符。若無法排解設定問題,請下載並參考下列已完成的設定:

  1. 執行下列指令來初始化 Terraform:
terraform init

輸出內容應如下所示:

Initializing modules... - mynet-vm-2 in instance - mynet-vm-2 in instance ... Terraform has been successfully initialized!

注意:如果發生錯誤,請回到先前步驟,確認資料夾/檔案的結構正確無誤。若無法排解設定問題,請點選上方連結來參考已完成的設定。待問題解決後,再重新執行先前的指令。

  1. 執行下列指令,建立執行計畫:
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 執行個體
  1. 執行下列指令,套用所需變更:
terraform apply
  1. 輸入以下內容,確認預定執行的操作:
yes

輸出內容應如下所示:

... Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

點選「Check my progress」,確認目標已達成。 建立 mynetwork 及其資源

注意:如果在執行過程中收到錯誤訊息,請返回先前步驟,確認資料夾/檔案結構正確無誤。若無法排解設定問題,請點選上方連結來參考已完成的設定。待問題解決後,再重新執行先前的指令。

工作 3:驗證部署結果

請在 Google Cloud 控制台,驗證先前建立的資源。

在 Google Cloud 控制台驗證虛擬私有雲 (VPC) 網路

  1. 前往 Google Cloud 控制台,依序點選「導覽選單」圖示 「導覽選單」圖示 >「虛擬私有雲網路」>「虛擬私有雲網路」
  2. 查看 mynetwork 虛擬私有雲網路,確認每個區域都有子網路。
  3. 在「導覽選單」中依序點選「虛擬私有雲網路」>「防火牆」
  4. 依「網路」排序防火牆規則
  5. 查看 mynetworkmynetwork-allow-http-ssh-rdp-icmp 防火牆規則。

在 Cloud 控制台驗證 VM 執行個體

  1. 依序點選「導覽選單」圖示 「導覽選單」圖示 >「Compute Engine」>「VM 執行個體」
  2. 查看 mynet-vm-1mynet-vm-2 執行個體。
  3. 記下 mynet-vm-2 的內部 IP 位址。
  4. mynet-vm-1 的資料列,點選「SSH」來啟動終端機並連線。
  5. 在 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 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

Use private browsing

  1. Copy the provided Username and Password for the lab
  2. Click Open console in private mode

Sign in to the Console

  1. Sign in using your lab credentials. Using other credentials might cause errors or incur charges.
  2. Accept the terms, and skip the recovery resource page
  3. Don't click End lab unless you've finished the lab or want to restart it, as it will clear your work and remove the project

This content is not currently available

We will notify you via email when it becomes available

Great!

We will contact you via email if it becomes available

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Using an Incognito or private browser window is the best way to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.