arrow_back

使用 Terraform 自動部署基礎架構

登录 加入
访问 700 多个实验和课程

使用 Terraform 自動部署基礎架構

实验 1 小时 universal_currency_alt 5 积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

總覽

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

在這個實驗室中,您將建立 Terraform 設定與模組來自動部署 Google Cloud 基礎架構。具體來說,您將部署自動模式網路,以及該網路的防火牆規則和兩個 VM 執行個體,如這張圖表所示:

Terraform 設定圖表

目標

在這個實驗室中,您將瞭解如何執行下列工作:

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

設定

每個實驗室都會提供新的 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

在這項工作中,您將設定 Cloud Shell 環境,以便使用 Terraform。

安裝 Terraform

Terraform 現已整合至 Cloud Shell,請確認目前安裝版本。

  1. 在 Cloud 控制台,點選「啟用 Cloud Shell」圖示 「啟用 Cloud Shell」圖示
  2. 如果出現提示訊息,請點選「繼續」
  3. 執行下列指令,確認 Terraform 是否安裝成功:
terraform --version

輸出內容應如下所示:

Terraform v1.5.7

注意事項:如果收到 Terraform 版本過舊的警告訊息,請不必擔心,本實驗室的操作說明適用於 Terraform v1.5.7 以上版本。如要下載 Terraform 的最新版本,請前往 Terraform 網站。在所有支援平台與架構上,Terraform 是以二進位檔套件發布;Cloud Shell 則是使用 Linux 64 位元。

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

注意事項:如果系統顯示「第三方 Cookie 已停用,因此無法載入程式碼編輯器」,請點選「在新視窗中開啟」,程式碼編輯器將在新分頁中開啟。返回原始分頁並點選「開啟終端機」,然後切換回「程式碼編輯器」分頁。在這個分頁中,您需要定期切換回 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,以及其防火牆規則和兩個 VM 執行個體 (mynet_vm_1mynet_vm_2)。

設定 mynetwork

建立新設定並定義 mynetwork

  1. 如要在 tfinfra 中建立新檔案,請對該資料夾按一下滑鼠右鍵,然後點選「New File」
  2. 將新檔案命名為 mynetwork.tf 後開啟檔案。
  3. 複製下列程式碼集並貼到 mynetwork.tf 中:
# Create the mynetwork network resource [RESOURCE_TYPE] "mynetwork" { name = [RESOURCE_NAME] # RESOURCE properties go here }

在設定 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 檔案是否如下所示:
# Create the mynetwork network resource "google_compute_network" "mynetwork" { name = "mynetwork" # RESOURCE properties go here auto_create_subnetworks = "true" }
  1. 依序點選「File」>「Save」來儲存 mynetwork.tf

設定防火牆規則

定義防火牆規則,以允許 HTTP、SSH、遠端桌面協定和 ICMP 流量通過 mynetwork。

  1. mynetwork.tf 中新增下列程式碼集:
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" { name = [RESOURCE_NAME] # RESOURCE properties go here }
  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 檔案是否如下所示:
# Create the mynetwork network resource "google_compute_network" "mynetwork" { name = "mynetwork" # RESOURCE properties go here auto_create_subnetworks = "true" } # Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" { name = "mynetwork-allow-http-ssh-rdp-icmp" # RESOURCE properties go here 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 執行個體模組來定義 WM 執行個體。模組是指資料夾中可重複使用的設定。在這個實驗室中,您將使用建立好的模組定義兩個 VM 執行個體。

  1. 如要在 tfinfra 中建立新檔案,請選取 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] # RESOURCE properties go here }
  1. main.tf 中,將 [RESOURCE_TYPE] 替換為 "google_compute_instance" (須保留引號)。

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

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

您會使用此模組定義兩個 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-11" } }

這項屬性會定義開機磁碟,以使用 Debian 11 OS 映像檔。兩個 VM 執行個體會使用相同的映像檔,因此您可以在模組中採用硬式編碼的方式寫入此屬性。

  1. main.tf 中新增下列屬性:
network_interface { network = "${var.instance_network}" access_config { # Allocate a one-to-one NAT IP to the instance } }

這項屬性會將網路名稱提供為輸入變數,藉此定義網路介面和存取設定。將存取設定留空會產生臨時外部 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-11" } } network_interface { network = "${var.instance_network}" access_config { # Allocate a one-to-one NAT IP to the instance } } }
  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 執行個體:
# Create the mynet-vm-1 instance 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 } # Create the mynet-vm-2" instance 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 模組資料庫中的現有模組,而不必自行編寫。

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

  2. 確認 mynetwork.tf 包含括號 {} 部分是否如下所示:

# Create the mynetwork network resource "google_compute_network" "mynetwork" { name = "mynetwork" # RESOURCE properties go here auto_create_subnetworks = "true" } # Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" { name = "mynetwork-allow-http-ssh-rdp-icmp" # RESOURCE properties go here network = google_compute_network.mynetwork.self_link allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"] } # Create the mynet-vm-1 instance 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 } # Create the mynet-vm-2" instance 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 控制台,驗證先前建立的資源。

在 Cloud 控制台驗證網路

  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. 為測試連至 mynet-vm-2 內部 IP 位址的連線能力,請在 SSH 終端機執行下列指令 (將 mynet-vm-2 的內部 IP 位址替換為稍早記下的值):
ping -c 3 <在這裡輸入 mynet-vm-2 的內部 IP> 注意事項:兩個 VM 執行個體位於同一個網路,而且防火牆規則允許 ICMP 流量,因此應能順利連線!

工作 4:回顧

在這個實驗室中,您建立了 Terraform 設定與模組來自動部署 Google Cloud 基礎架構。當設定有所變動,Terraform 可以建立遞增的執行計畫,讓您逐步建立整體化設定。

執行個體模組允許您為多個資源重複使用相同的資源設定,同時提供屬性做為輸入變數。您所建立的設定與模組,均可做為未來部署作業的基礎。

關閉研究室

如果您已完成研究室,請按一下「End Lab」(關閉研究室)。Google Cloud Skills Boost 會移除您使用的資源,並清除所用帳戶。

您可以針對研究室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」(提交)

星級評等代表您的滿意程度:

  • 1 星 = 非常不滿意
  • 2 星 = 不滿意
  • 3 星 = 普通
  • 4 星 = 滿意
  • 5 星 = 非常滿意

如果不想提供意見回饋,您可以直接關閉對話方塊。

如有任何想法、建議或指教,請透過「Support」(支援) 分頁提交。

Copyright 2022 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。