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
本實驗室是我們與合作夥伴 Hashicorp 攜手開發而成。如果您在帳戶個人資料中選擇接收產品最新消息、公告和優惠資訊,您的個人資訊即有可能提供給本實驗室的贊助者 Hashicorp。
Terraform 是 HashiCorp 提供的基礎架構即程式碼工具,能夠讓您以安全且可重複的方式建構、變更及管理基礎架構。作業人員和基礎架構團隊可透過 Terraform 管理環境,並在過程中使用名為 HashiCorp Configuration Language (HCL) 的設定語言,以人類可讀的方式自動部署。
採取基礎架構即程式碼的做法時,是透過一或多個檔案管理基礎架構,而非在使用者介面中手動設定資源。在此,資源指的是特定環境中基礎架構的任一環節,例如虛擬機器、安全性群組、網路介面等。整體來說,Terraform 可讓作業人員使用 HCL,針對絕大多數供應商的服務 (AWS、Google Cloud、GitHub、Docker 等) 建立包含所需資源定義的檔案,並在執行套用動作時自動處理這些資源的建立作業。
簡易的部署工作流程基本上包含以下步驟:
terraform init,為專案下載正確的供應商外掛程式。terraform plan 確認建立程序,然後執行 terraform apply 建立實際資源和狀態檔案,這個檔案會比較設定檔日後的異動內容與部署環境中實際存在的內容。在本實驗室中,您將瞭解如何執行下列工作:
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
如有必要,請將下方的 Username 貼到「登入」對話方塊。
您也可以在「Lab Details」窗格找到 Username。
點選「下一步」。
複製下方的 Password,並貼到「歡迎使用」對話方塊。
您也可以在「Lab Details」窗格找到 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,因此您可以直接開始建立基礎架構。
首先,請建立名為 main.tf 的範例設定檔。Terraform 會將名稱結尾為 .tf 或 .tf.json 的檔案視為設定檔,並在執行時載入這些檔案。
main.tf 檔案:在 Cloud Shell 的工具列中按一下「開啟編輯器」按鈕。如要在 Cloud Shell 與程式碼編輯器之間切換,請視需要按一下「開啟編輯器」或「開啟終端機」圖示。您也可以點按「在新視窗中開啟」按鈕,讓編輯器在另一個分頁中保持開啟。
在編輯器中,將以下內容新增至 main.tf 檔案。
terraform {} 區塊,即可透過 Terraform 0.12 使用這個程式碼片段。terraform {} 區塊為必要項目,可讓 Terraform 知道要從 Terraform Registry 下載哪個供應商外掛程式。在上方的設定中,google 供應商外掛程式的來源是定義為 hashicorp/google,即 registry.terraform.io/hashicorp/google 的簡寫。
您也可以為 required_providers 區塊中定義的每個供應商外掛程式指派版本。version 引數雖為選用性質,但建議您使用。這個引數的用途是限制供應商外掛程式的版本 (可以是特定版本或一組特定的版本),避免下載可能包含破壞性變更的新供應商外掛程式。如未指定版本,Terraform 會在初始化時自動下載最新的供應商外掛程式。
詳情請參閱 HashiCorp Terraform 網站中的「Provider Requirements」(供應商外掛程式要求) 一文。
provider 區塊是用來設定指定的供應商外掛程式,在這個範例中為 google。供應商外掛程式負責建立及管理資源。如果 Terraform 設定會管理不同供應商外掛程式的資源,則可以有多個供應商外掛程式區塊。
建立新設定或透過版本管控提取現有設定後,您要執行的第一項指令是 terraform init。這項指令會初始化各種本機設定,以及後續指令將使用的資料。
main.tf 檔案相同的目錄中執行 terraform init 指令,初始化新的 Terraform 設定: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 變更基礎架構,不僅能管控設定的版本,還能對狀態進行版本管控,以便掌握基礎架構的演進過程。
如要新增資源,您可以將資源新增至 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 中建立了該資源。
您可以在 Cloud Shell 等整合式開發環境 (IDE) 中使用 Gemini Code Assist,取得程式碼相關指引或解決程式碼問題。Gemini Code Assist 必須先啟用,才能開始使用。
點選畫面底部狀態列中的「Cloud Code - No Project」。
依指示授權外掛程式。如果系統未自動選取專案,請點按「選取 Google Cloud 專案」,然後選擇
確認狀態列的 Cloud Code 狀態訊息中已顯示 Google Cloud 專案 (
Terraform 除了建立資源,也可變更資源。
Gemini Code Assist 直接在程式碼編輯器中提供 AI 輔助智慧動作,協助您提高工作效率,同時減少切換情境的次數。在本節中,您將使用 Gemini Code Assist 透過 Terraform 修改部分資源。
您要在設定檔 main.tf 中,將 tags 引數新增至 vm_instance 資源。
點選工具列上的「Gemini Code Assist: Smart Actions」 圖示。
將下列提示詞貼到從工具列開啟的 Gemini Code Assist 內嵌文字欄位。
按下 Enter 鍵,提示 Gemini 據此修改程式碼。
在「Gemini Diff」檢視畫面出現提示時,點選「接受」。
設定檔 main.tf 中 vm_instance 資源內新增的 tags 引數現在應如下所示:
terraform apply 來更新執行個體:~ 表示 Terraform 會就地更新資源。您可以回應 yes,直接套用這項變更,Terraform 隨即會將標記新增至執行個體。點選「Check my progress」,確認目標已達成。
破壞性變更是指供應商外掛程式必須取代現有資源 (而非更新資源) 的變更。發生這類變更,通常是因為雲端供應商的服務不支援以設定所述的方式更新資源。
舉例來說,變更執行個體的磁碟映像檔就是破壞性變更。在本節中,您將使用 Gemini Code Assist 的智慧動作,編輯設定檔 main.tf 中 vm_instance 資源的 boot_disk 區塊。
點選「開啟編輯器」切換回 Cloud Shell 編輯器,然後點選工具列上的「Gemini Code Assist: Smart Actions」 圖示。
將下列提示詞貼到從工具列開啟的 Gemini Code Assist 內嵌文字方塊:
按下 Enter 鍵,變更 vm_instance 資源中相應的映像檔。
在「Gemini Diff」檢視畫面出現提示時,點選「接受」。
設定檔 main.tf 中 vm_instance 資源的 boot_disk 區塊應如下所示:
terraform apply,看看 Terraform 會如何將這項變更套用至現有資源:前置字串 -/+ 表示 Terraform 會刪除並重新建立資源,而非就地更新。雖然某些屬性可以就地更新 (這類屬性會包含前置字串 ~),但如要變更執行個體的開機磁碟映像檔,就必須重新建立映像檔。Terraform 和 Google Cloud 供應商外掛程式會為您處理相關細節,而您可以透過執行計畫清楚瞭解 Terraform 將採取的動作。
此外,執行計畫會顯示執行個體之所以遭到取代,是因為磁碟映像檔變更。您可以運用這項資訊調整變更內容,避免在不該刪除/建立更新時執行這些作業。
yes 來執行規劃的步驟。如執行計畫所示,Terraform 會先刪除現有執行個體,然後再建立新的執行個體來取代。您可以再次使用 terraform show,查看與這個執行個體相關聯的新值。
您已瞭解如何建構及變更基礎架構,接著要來學習如何徹底刪除 Terraform 代管的基礎架構,才能繼續建立多項資源和顯示資源依附性。
在實際工作環境中,您幾乎不需要刪除基礎架構。不過,如果您使用 Terraform 建立並啟動多個環境 (例如開發、測試和暫存環境),就常常會用到「刪除基礎架構」這個動作。
您可以使用 terraform destroy 指令刪除資源。這項指令與 terraform apply 類似,只不過會假設所有資源都已從設定中移除。
terraform destroy 指令,然後回應 yes 來執行這項計畫並刪除基礎架構:前置字串 - 表示執行個體和網路將遭到刪除。和執行套用動作時一樣,Terraform 會顯示執行計畫,待您核准後才會開始變更。
此外,如同 terraform apply,Terraform 會決定刪除順序。Google Cloud 中不允許刪除仍包含資源的虛擬私有雲網路,因此 Terraform 會等執行個體刪除完畢後再刪除網路。執行多項作業時,Terraform 會建立依附性圖表來決定正確的作業順序。若是涉及多項資源這種較複雜的情況,Terraform 只有在安全狀態才會平行執行多項作業。
點選「Check my progress」,確認目標已達成。
在本節中,您將進一步瞭解資源依附性,以及如何使用資源參數,將某項資源的相關資訊提供給其他資源。
實際的基礎架構包含各種資源和資源類型。Terraform 設定可含有多項資源和多種資源類型,且這些類型甚至可能涵蓋多個供應商外掛程式。
在本節中,您將透過一個簡易範例,瞭解如何設定多項資源,以及如何使用資源屬性設定其他資源。
出現提示時回應 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 有明確依附性的執行個體:UNIQUE-BUCKET-NAME 替換為不重複的有效 bucket 名稱,使用您的名字和當天日期通常是不錯的做法。您可能會想知道如何決定這些資源在設定中的順序。實際上,資源在 Terraform 設定檔中定義的順序不會影響 Terraform 套用變更的方式。因此,請以您和團隊覺得最合理的方式整理設定檔。
terraform plan 和 terraform apply,看看這些變更的實際效果:點選「Check my progress」,確認目標已達成。
terraform apply 來刪除資源。本實驗室的後續部分不會用到這個 bucket 或第二個執行個體。您目前啟動的運算執行個體是以所提供的 Google 映像檔為基礎,但尚未安裝任何額外軟體,也未套用任何設定。
Google Cloud 可讓客戶管理自己的自訂作業系統映像檔,確保透過 Terraform 佈建的執行個體已經過預先設定,符合自身需求。Packer 是處理這項作業的絕佳工具,並且包含適用於 Google Cloud 的建構工具。
Terraform 會使用佈建工具上傳檔案、執行殼層指令碼,或安裝及觸發設定管理工具等其他軟體。
vm_instance 的資源區塊修改為以下內容:這樣 resource 區塊中就會新增 provisioner 區塊。您可以新增多個 provisioner 區塊來定義多個佈建步驟。Terraform 支援許多佈建工具,但在這個例子中,您要使用 local-exec 佈建工具。
local-exec 佈建工具會在執行 Terraform 的機器本機上執行指令,而非在 VM 執行個體上執行。您使用的佈建工具是 local-exec,而不是其他的佈建工具,因此暫時不必煩惱如何指定連線資訊。
這個字串內插範例也比先前的範例還要複雜。每個 VM 執行個體都可能有多個網路介面,因此如同大部分的程式設計語言,請從 0 開始計數,使用 network_interface[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 技術方面的技能和專業知識。
使用手冊上次更新日期:2025 年 8 月 25 日
實驗室上次測試日期:2025 年 10 月 13 日
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