使用從控制台下載的 Terraform 部署基礎架構

Google Cloud 設定:管理員可使用Google Cloud 導覽流程設定基礎,並直接從 Google Cloud 控制台部署,或以 Terraform 格式下載。

本文說明如何部署 Google Cloud 設定 Terraform 檔案。

事前準備

請參閱「使用 Terraform 的最佳做法」,瞭解如何有效運用 Terraform 進行開發,並在團隊成員和工作流程中採用相關指南。

如果您已在控制台中點選「部署」按鈕來部署基礎設定,現在想使用自己的管道部署下載的 Terraform 設定,請務必執行下列操作:

  • 下載控制台產生的 Terraform 狀態檔案。
  • 在自己的管道程序中加入下載的狀態檔案。

詳情請參閱「從控制台部署後,部署下載的 Terraform」。

使用 Cloud Shell 部署 Terraform

Cloud Shell 已預先安裝 Terraform 並完成預先驗證,因此您可以快速開始使用。

  1. 在控制台設定指南中,按一下「以 Terraform 格式下載」並儲存設定。
  2. 開啟 Cloud Shell
  3. 在 Cloud Shell 中建立目錄並前往該目錄:

    mkdir cloud-foundation-example && cd cloud-foundation-example
    
  4. 上傳您在步驟 1 下載的 Terraform 設定。

    在 Cloud Shell 的「More」(更多) 選單中,選取「Upload」(上傳),然後按一下「Choose Files」(選擇檔案) 來選取 Terraform 設定。將目的地目錄設為您在上一步建立的資料夾,然後按一下「上傳」

  5. 確認您位於 cloud-foundation-example 目錄。

  6. 建立 Cloud Storage bucket,用來儲存 Terraform 遠端狀態。 Terraform 可透過遠端狀態,使用 Cloud Storage 等物件儲存空間,儲存 Terraform 管理基礎架構的狀態資訊。這項設定可提供團隊委派和狀態鎖定等優點。

    如要建立 Cloud Storage bucket,請執行下列指令:

    gcloud storage buckets create gs://tf-state-PROJECT_ID
    
  7. backend.tf 檔案中定義 Terraform 後端設定,並將 PROJECT_ID 替換為您在上一個步驟中使用的專案 ID。詳情請參閱「將 Terraform 狀態儲存在 Cloud Storage」一文。

    # backend.tf
    terraform {
          backend "gcs" {
            bucket  = "tf-state-PROJECT_ID"
            prefix  = "terraform/state"
          }
    }
    
  8. 執行 terraform init。 這個程序會初始化包含 Terraform 設定檔和後端的工作目錄。

  9. 執行 terraform plan,查看 Terraform 建立的資源。輸出範例:

    ...
    Plan: 6 to add, 0 to change, 0 to destroy.
    Note: You didn't use the -out option to save this plan, so Terraform can't
    guarantee to take exactly these actions if you run "terraform apply" now.
    

  10. 執行 terraform apply 來套用設定,將資源部署至Google Cloud。系統顯示提示訊息時,請輸入 yes

  11. 探索 Google Cloud 控制台,確認資源已部署至帳戶或專案。

使用 Cloud Shell 重新部署 Terraform

Terraform 會將已部署資源的相關資訊儲存在 Terraform 狀態檔案中。如果您已按照先前的步驟部署設定,強烈建議您重複使用相同的後端,自動偵測、修剪及更新新匯出設定定義的資源。

  1. 在控制台設定指南中,按一下「Download as Terraform」(下載為 Terraform),然後儲存設定。
  2. 開啟 Cloud Shell
  3. 在 Cloud Shell 中建立新目錄並前往該目錄:
    mkdir cloud-foundation-example-redeploy && cd cloud-foundation-example-redeploy
    
  4. 上傳您在步驟 1 下載的 Terraform 設定。

    從 Cloud Shell 的「More」(更多) 選單中,選取「Upload」(上傳),然後按一下「Choose Files」(選擇檔案) 來選取 Terraform 設定。將目的地目錄設為您在上一步建立的資料夾,然後按一下「上傳」

  5. 確認您位於 cloud-foundation-example-redeploy 目錄。

  6. 確認先前建立的 Cloud Storage 後端 bucket 和狀態檔案存在。

    gcloud storage ls gs://tf-state-PROJECT_ID/terraform/state/
    
    輸出範例:
    gs://tf-state-PROJECT_ID/terraform/state/default.tfstate
    

  7. backend.tf 檔案中定義 Terraform 後端設定,並重複使用相同的值區和前置字元。

    # backend.tf
    terraform {
          backend "gcs" {
            bucket  = "tf-state-PROJECT_ID"
            prefix  = "terraform/state"
          }
    }
    
  8. 執行 terraform init。 這個程序會初始化包含 Terraform 設定檔和後端的工作目錄。

  9. 執行 terraform plan,查看 Terraform 建立、變更或刪除的資源。 輸出範例:

    ...
    Plan: 2 to add, 3 to change, 4 to destroy.
    Note: You didn't use the -out option to save this plan, so Terraform can't
    guarantee to take exactly these actions if you run "terraform apply" now.
    

  10. 執行 terraform apply 來套用設定,將資源部署至Google Cloud。系統顯示提示訊息時,請輸入 yes

  11. 探索 Google Cloud 控制台,確認資源已部署至帳戶或專案。

從控制台部署後,部署下載的 Terraform

如果您已使用控制台中的「Deploy」按鈕部署基礎設定,系統會產生 Terraform 狀態檔案。如要下載 Terraform 設定,並使用自己的管道部署,請務必一併下載控制台部署期間產生的 Terraform 狀態檔。

如要下載及使用狀態檔案,請按照下列步驟操作:

  1. 如要下載 Terraform 狀態檔案,請在「管理 Terraform 狀態檔案」中完成下列程序:

    1. 鎖定部署作業
    2. 下載狀態檔案
    3. 解鎖部署作業
  2. 如要將下載的狀態檔案移至 Cloud Storage bucket,請參閱「將 Terraform 狀態儲存在 Cloud Storage bucket」一文。

  3. 如要重新部署 Terraform 設定,請參閱「使用 Cloud Shell 重新部署 Terraform」。

排解 Terraform 部署作業問題

使用現有資源部署 Terraform

如果下載的 Terraform 設定嘗試建立已存在的資源,Terraform 會以 409 錯誤代碼結束。 如要解決這些錯誤,請使用Google Cloud 控制台 或 gcloud CLI 刪除資源,然後重新套用 Terraform 設定。或者,如果這些資源非常重要,無法刪除,您可以將資源匯入 Terraform 狀態。

使用 Terraform、Cloud Build 和 GitOps 管理基礎架構式程式碼

建議按照這篇教學課程的完整說明操作。這個選項適用於平台管理員和操作人員,他們正在尋找可預測且可重複的基礎架構變更策略。本指南假設您熟悉 Google Cloud、Linux 和 GitHub。這個選項的大致步驟如下:

  1. 設定您的 GitHub 存放區。
  2. 設定 Terraform 以將狀態儲存在 Cloud Storage 值區中。
  3. 將權限授予您的 Cloud Build 服務帳戶。
  4. 將 Cloud Build 連線至您的 GitHub 存放區。
  5. 在功能分支版本中變更您的環境設定。
  6. 將變更推行至開發環境。
  7. 將變更推行至實際工作環境。