Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Create resources in Terraform
/ 30
Change the infrastructure
/ 20
Make destructive changes
/ 20
Create resource dependencies
/ 20
Create a bucket dependent instance
/ 10
Create resources in Terraform
/ 30
Change the infrastructure
/ 20
Make destructive changes
/ 20
Create resource dependencies
/ 20
Create a bucket dependent instance
/ 10
本實驗室由我們與合作夥伴 HashiCorp 共同開發。如果您在帳戶個人資料中選擇接收產品最新消息、公告和優惠資訊,您的個人資訊即有可能提供給本實驗室的贊助者 HashiCorp。
Terraform 是 HashiCorp 提供的基礎架構即程式碼工具,能讓您以安全且可重複的方式建構、變更及管理基礎架構。作業人員和基礎架構團隊可透過 Terraform 管理環境,並在過程中使用名為 HashiCorp Configuration Language (HCL) 的設定語言,以人類可讀的方式自動部署。
採取基礎架構即程式碼的做法時,是透過一或多個檔案管理基礎架構,而非在使用者介面中手動設定資源。在此,資源是指特定環境中基礎架構的任一環節,例如虛擬機器、安全性群組、網路介面等。整體來說,Terraform 可讓作業人員使用 HCL 編寫檔案,針對絕大多數的 provider (AWS、Google Cloud、GitHub、Docker 等) 定義所需資源,並在執行 apply 時自動建立這些資源。
簡易的部署工作流程基本上包含下列步驟:
terraform init,為專案下載正確的 provider。terraform plan 確認建立程序,然後執行 terraform apply 建立實際資源和狀態檔案。這個檔案會比較設定檔日後的異動內容與部署環境中實際存在的內容。在本實驗室中,您將瞭解如何執行下列工作:
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
按一下「Start Lab」按鈕。如果實驗室會產生費用,請在開啟的對話方塊中選取付款方式。右側的「Lab setup and access」面板會顯示下列項目:
請注意,實驗室計時器位於頁面頂端附近,會顯示剩餘時間。
按一下「Open Google Cloud console」。如果使用 Chrome 瀏覽器,也可以按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗並排開啟分頁。
如有必要,請將下方的 Username 貼到「登入」對話方塊。
您也可以在「Lab setup and access」面板找到「Username」。
點選「下一步」。
複製下方的 Password,並貼到「歡迎使用」對話方塊。
您也可以在「Lab setup and access」面板找到「Password」。
點選「下一步」。
繼續點按後續頁面:
Google Cloud 控制台稍後會在這個分頁開啟。
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示 。
系統顯示視窗時,請按照下列步驟操作:
連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID:
gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
輸出內容:
輸出內容:
gcloud 的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南。
Cloud Shell 未預先安裝 Terraform。您必須安裝 Terraform CLI,並設定成會跨 Cloud Shell 工作階段保留。
輸出內容應該會顯示已安裝的版本 (v1.5.7 以上):
首先,請建立名為 main.tf 的範例設定檔。Terraform 會將名稱結尾為 .tf 或 .tf.json 的檔案視為設定檔,並在執行時載入。
main.tf 檔案:在 Cloud Shell 工具列點選「開啟編輯器」。您可利用「開啟編輯器」或「開啟終端機」圖示切換介面。您也能按一下「在新視窗中開啟」,在另一個分頁中保持開啟編輯器。
在編輯器中,將下列內容新增至 main.tf 檔案。
terraform {} 區塊為必要項目,可讓 Terraform 知道要從 Terraform Registry 下載哪個 provider。在上述設定中,google provider 的來源定義為 hashicorp/google,也就是 registry.terraform.io/hashicorp/google 的簡寫。
您也能為 required_providers 區塊中定義的每個 provider 指派版本。version 引數雖為選用,但建議您使用。這個引數是用來限定版本或版本範圍,以免下載到可能包含破壞性變更的新 provider。如未指定版本,Terraform 會在初始化時自動下載最新的 provider。
詳情請參閱 HashiCorp Terraform 網站中的「Provider Requirements」(Provider 要求) 一文。
provider 區塊是用來設定指定的 provider,在這個範例中為 google。provider 負責建立及管理資源。如果 Terraform 設定會管理不同 provider 的資源,則可以有多個區塊。
建立新設定或透過版本管控提取現有設定後,您要執行的第一項指令是 terraform init。這項指令會初始化各種本機設定,以及後續指令所用的資料。
terraform apply 指令,立即套用設定:輸出內容中的資源 "google_compute_network" "vpc_network" 旁邊有 +,表示 Terraform 將建立這項資源。底下則為系統將設定的屬性。若顯示的值為 (known after apply),代表該值要等資源建立後才能確定。
計畫建立成功後,Terraform 會先暫停,等您核准後再繼續執行作業。若計畫內容有誤或具危險性,您可以放心取消作業,基礎架構不會受到任何影響。
萬一 terraform apply 執行失敗,請查看錯誤訊息並修正問題。
yes,並按下 Enter 鍵來繼續操作。Terraform 會等候網路建立成功,因此計畫需要幾分鐘才會執行完畢:
這樣就大功告成了!您可以前往 Cloud 控制台查看已佈建的網路。
terraform-network 已佈建完成。terraform show 指令,檢查目前的狀態:您可以參照這些值來設定其他資源或輸出內容,本實驗室的後續部分會說明具體做法。
點選「Check my progress」,確認目標已達成。
在上一節中,您透過 Terraform 建立了基本的基礎架構:虛擬私有雲網路。現在您將修改設定,並瞭解 Terraform 如何處理變更內容。
基礎架構會持續演進,而 Terraform 的設計初衷便是協助管理及導入這類異動。變更設定時,Terraform 會建構執行計畫,僅修改達到目標狀態所需的內容。
如此一來,不僅能管控設定的版本,還能對狀態進行版本管控,以便掌握基礎架構的演進過程。
請將資源新增至 Terraform 設定,然後執行 terraform apply 來佈建。
main.tf:這項資源包含幾個其他引數。名稱和機型為簡易字串,但 boot_disk 和 network_interface 是較複雜的區塊。您可以在 google_compute_instance 說明文件中查看所有可用選項。
在這個範例中,運算執行個體將使用 Debian 作業系統,並連線至您先前建立的虛擬私有雲網路。請注意,這項設定是使用 google_compute_network.vpc_network.name 參照網路的名稱屬性,其中 google_compute_network.vpc_network 是 ID (與網路定義區塊中的值一致),name 則是該資源的屬性。
access_config 區塊可確保執行個體能透過網際網路存取,即使沒有任何引數也一樣。
terraform apply,建立運算執行個體:yes。這是一項很簡易的變更:您在設定中新增了名為「vm_instance」的「google_compute_instance」資源,然後 Terraform 在 Google Cloud 中建立了該資源。
Terraform 除了建立資源,也可變更資源。
main.tf 檔案中,為 vm_instance 資源新增 tags 引數,如下所示:terraform apply,更新執行個體:~ 表示 Terraform 會就地更新資源。輸入 yes 就能套用這項變更,Terraform 隨即會將標記新增至執行個體。點選「Check my progress」,確認目標已達成。
毀壞性變更是指供應商外掛程式必須取代現有資源 (而非更新資源) 的變更。之所以會發生這類變更,通常是因為雲端供應商的服務不支援以設定所述的方式更新資源。
舉例來說,變更執行個體的磁碟映像檔就是一種毀壞性變更。
main.tf 設定檔中,編輯 vm_instance 資源的 boot_disk 區塊,變更為下列內容:terraform apply,看看 Terraform 如何將這項變更套用至現有資源:前置字串 -/+ 表示 Terraform 會刪除並重新建立資源,而非就地更新。雖然某些屬性可以就地更新 (這類屬性會包含前置字串 ~),但如要變更執行個體的開機磁碟映像檔,就必須重新建立映像檔。Terraform 和 Google Cloud provider 會為您處理相關細節,而您可以透過執行計畫清楚瞭解 Terraform 將採取的動作。
此外,執行計畫會顯示執行個體之所以遭到取代,是因為磁碟映像檔變更。您可以運用這項資訊調整變更內容,避免在不該刪除/建立更新時執行這些作業。
yes 來執行規劃的步驟。如執行計畫所示,Terraform 會先刪除現有執行個體,然後再建立新的執行個體來取代。您可以再次使用 terraform show,查看與這個執行個體相關聯的新值。
您已瞭解如何建構及變更基礎架構,接著要來學習如何徹底刪除 Terraform 代管的基礎架構,才能繼續建立多項資源並顯示資源依附性。
在正式環境中,您幾乎不需要刪除基礎架構。不過,如果您使用 Terraform 建立並啟動多個環境 (例如開發、測試和暫存環境),就常常會用到「刪除基礎架構」這個動作。
您可以使用 terraform destroy 指令刪除資源。這項指令與 terraform apply 類似,只不過會假設所有資源都已從設定中移除。
terraform destroy 指令。出現提示時,請輸入 yes,執行這項計畫並刪除基礎架構:前置字串 - 表示執行個體和網路將遭到刪除。和執行 apply 一樣,Terraform 會先顯示執行計畫,待您核准後才會進行任何變更。
此外,如同 terraform apply,Terraform 會決定刪除順序。Google Cloud 中不允許刪除仍包含資源的虛擬私有雲網路,因此 Terraform 會等執行個體刪除完畢後再刪除網路。執行多項作業時,Terraform 會建立依附性圖表來決定正確的作業順序。若是涉及多項資源等較複雜的情況,Terraform 會在安全無虞時平行執行作業。
點選「Check my progress」,確認目標已達成。
在本節中,您將進一步瞭解資源依附性,以及如何使用資源參數,將某項資源的相關資訊提供給其他資源。
實際的基礎架構包含各種資源和資源類型。Terraform 設定可含有多項資源和多種資源類型,且這些類型甚至可能涵蓋多個 provider。
在本節中,您將透過一個簡易範例,瞭解如何設定多項資源,以及如何使用資源屬性設定其他資源。
出現提示時輸入 yes,系統隨即會建立這些資源。
main.tf 設定檔新增下列內容,為 VM 執行個體指派靜態 IP:這段內容應該很類似先前新增 VM 執行個體資源的範例,差別在於這次建立的是「google_compute_address」資源類型。這種資源類型會為專案分配預留的 IP 位址。
terraform plan:您可以查看執行 terraform plan 後將建立的內容:
與 terraform apply 不同的是,plan 指令只會顯示變更內容,絕對不會直接套用變更。請注意,您目前所做的變更就只有新增靜態 IP。接著需要將該 IP 位址附加至您的執行個體。
network_interface 設定:access_config 區塊包含多個選用引數,在這個範例中,請將 nat_ip 設為靜態 IP 位址。Terraform 讀取這項設定時會執行下列動作:
vm_instance 前建立 vm_static_ip
vm_static_ip 的屬性儲存在狀態中nat_ip 設為 vm_static_ip.address 屬性的值terraform plan,但這次須儲存計畫:以此方式儲存計畫,日後就能套用完全相同的內容。如果您套用由計畫建立的檔案,Terraform 會先確認變更內容是否完全一致,再套用計畫。
在這個範例中,Terraform 會建立新的 google_compute_address,並更新現有 VM 來使用該項目。
terraform apply "static_ip",看看 Terraform 如何規劃套用這項變更:如上所示,Terraform 在修改 VM 執行個體前建立了靜態 IP。由於有內插運算式將 IP 位址傳遞至執行個體的網路介面設定,因此 Terraform 能推論依附性,也知道必須先建立靜態 IP 再更新執行個體。
點選「Check my progress」,確認目標已達成。
藉由研究內插運算式中使用的資源屬性,Terraform 可自動推論資源之間的依附關係。上方範例參照 google_compute_address.vm_static_ip.address,因此會針對名為 vm_static_ip 的 google_compute_address 建立「隱含依附性」。
Terraform 會使用這項依附性資訊,決定建立及更新不同資源的正確順序。在上方範例中,Terraform 知道必須在更新 vm_instance 之前建立 vm_static_ip,才能使用這個靜態 IP。
建議盡可能透過內插運算式來推論隱含依附性,這是告知 Terraform 資源關係的主要方式。
Terraform 有時「無法」掌握某些資源的依附性。您可以將 depends_on 引數新增至任何資源,並提供要建立明確依附性的資源清單。
舉例來說,假如您在執行個體上執行的應用程式,預期會使用特定 Cloud Storage bucket,但這項依附性是在應用程式程式碼內設定,因此 Terraform 無從得知這項資訊。在這種情況下,您可以使用 depends_on 明確宣告依附性。
main.tf 加入下列內容,藉此新增 Cloud Storage bucket 以及明確依附於該 bucket 的執行個體:{{{project_0.project_id | PROJECT_ID}}}。您可能會想知道這些資源應放在設定中的哪個位置。事實上,資源在 Terraform 設定檔中定義的順序,並不會影響 Terraform 套用變更的方式。因此,請以您和團隊覺得最合理的方式整理設定檔。
terraform plan 和 terraform apply,看看這些變更的實際效果:點選「Check my progress」,確認目標已達成。
main.tf 檔案刪除 google_storage_bucket.example_bucket 和 google_compute_instance.another_instance 資源區塊,然後再次執行 terraform apply 來刪除資源。本實驗室的後續部分不會用到這個 bucket 或第二個執行個體。您目前啟動的運算執行個體是以所提供的 Google 映像檔為基礎,但尚未安裝任何額外軟體,也未套用任何設定。
Google Cloud 可讓客戶管理自己的自訂作業系統映像檔,確保透過 Terraform 佈建的執行個體已經過預先設定,符合自身需求。Packer 是處理這項作業的絕佳工具,並包含適用於 Google Cloud 的建構工具。
Terraform 會使用佈建工具上傳檔案、執行殼層指令碼,或安裝及觸發設定管理工具等其他軟體。
vm_instance 的資源區塊修改如下:這樣 resource 區塊中就會新增 provisioner 區塊。您可以新增多個 provisioner 區塊來定義多個佈建步驟。Terraform 支援許多佈建工具,但在這個例子中,您要使用 local-exec 佈建工具。
local-exec 佈建工具會在執行 Terraform 的機器本機上執行指令,而非在 VM 執行個體上執行。選用此佈建工具而非其他工具,這樣目前就不必設定連線資訊。
這個字串內插範例也比先前的範例還要複雜。每個 VM 執行個體都可能有多個網路介面,因此請使用 network_interface[0] 參照第一個介面;如同大部分的程式設計語言,編號是從 0 開始。每個網路介面也可能包含多個 access_config 區塊,因此您同樣要指定第一個區塊。
terraform apply:現階段,輸出內容一開始可能會令人困惑。
Terraform 沒有任何要執行的動作,而如果您有檢查,就會發現本機機器上並沒有 ip_address.txt 檔案。
Terraform 處理佈建工具的方式與其他引數不同。佈建工具只會在資源建立時執行,但新增佈建工具並不會導致系統強制刪除並重新建立該資源。
terraform taint,讓 Terraform 重新建立執行個體:下次執行 apply 時,系統會刪除並重新建立受汙染的資源。
terraform apply:ip_address.txt 檔案內容,確認是否符合預期。這個檔案包含 IP 位址,與您的要求內容一致。
如果資源已成功建立,但未能完成某個佈建步驟,Terraform 會顯示錯誤,並將該資源標示為「tainted」(受汙染)。受汙染的資源雖然依然存在,但因佈建失敗,不應視為可安全使用。
您產生下一個執行計畫時,Terraform 會移除所有受汙染的資源,然後建立並重新佈建新資源。
您也能將佈建工具定義為只在刪除作業期間執行,有助於系統清理、資料擷取等作業。
處理許多資源時,建議盡量使用內建清理機制 (例如 init 指令碼),但也能視需要使用佈建工具。
本實驗室不提供任何已刪除佈建工具的範例。如要使用刪除佈建工具,請參閱佈建工具說明文件。
您在本實驗室學會如何透過 Terraform 建構、變更及刪除基礎架構。接著,您建立了資源依附性,並透過 Terraform 設定檔佈建了基本的基礎架構。
建議參考下列資源,獲得更多 Terraform 實作練習機會:
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2026 年 7 月 14 日
實驗室上次測試日期:2026 年 7 月 14 日
Copyright 2026 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。
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