管理 Terraform 狀態檔案

您可能需要檢查或修改任何部署作業的狀態檔案。舉例來說,您可能想從部署作業匯入或移除資源,這時就要修改狀態檔案。

本頁說明如何使用為每個部署作業和修訂版本建立的 Terraform 狀態檔案。如要進一步瞭解狀態檔案,請參閱「狀態」。

本頁的操作說明假設您已熟悉 Terraform

事前準備

  1. 請確認您具備處理狀態檔案的必要權限。config.admin 角色包含必要權限。所需權限如下:

    • config.deployments.lock
    • config.revisions.getState
    • config.deployments.updateState
    • config.deployments.unlock
    • config.deployments.getLock
    • config.deployments.getState
  2. 請確認您有 Terraform 設定的本機副本。這是與您使用的狀態檔案對應的設定。

    設定的本機副本可讓您在修改狀態檔案時,在本機執行 terraform refreshterraform plan 等指令。

  3. 安裝 Terraform,在本機電腦上使用 Terraform CLI。

變更或檢查狀態檔案

如要變動 (修改) 或檢查狀態檔案,您必須鎖定部署作業並下載狀態檔案。然後即可變動或檢查狀態檔案。

變更狀態檔案後,請上傳檔案,供 Infra Manager 在部署作業中使用。

鎖定部署作業

  1. 鎖定部署作業,避免在變動狀態檔案時,部署作業發生任何變更。部署作業必須處於鎖定狀態,才能下載狀態檔案。

    gcloud infra-manager deployments lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
    

    更改項目:

    • DEPLOYMENT_ID 換成部署識別碼。
    • PROJECT_ID,部署作業會在該專案中執行。
    • LOCATION 替換為部署作業的執行位置。

    這個指令的輸出內容包含 lock ID,用於上傳及解鎖狀態檔案。

  2. 如要隨時擷取鎖定 ID,請使用下列指令:

    gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
    

下載狀態檔案

如要下載狀態檔案,請使用已簽署的 Cloud Storage 網址

SIGNED_STATE_DOWNLOAD_URL=$(gcloud infra-manager deployments export-statefile DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(signedUri)")

curl -s -X GET --output terraform.tfstate ${SIGNED_STATE_DOWNLOAD_URL}

在本機變更狀態檔案

  1. 確認設定 (*.tf 檔案) 與下載的狀態檔案 (terraform.tfstate) 位於相同目錄。

  2. 初始化 Terraform:

    terraform init
    
  3. 如果您先前已初始化 Terraform,可能需要使用重新設定標記初始化:

    terraform init -reconfigure
    
  4. 視需要使用狀態檔案。舉例來說,您可以執行狀態檢查突變作業。如要進一步瞭解如何使用狀態檔案,請參閱「操控 Terraform 狀態」。

  5. 如果您在本機對 Terraform 設定檔進行任何變更,請上傳修改後的設定。將這項設定上傳至儲存空間 bucket 或公開 Git 存放區,做為部署設定的來源。

上傳州別檔案

使用已簽署的 Cloud Storage 網址上傳狀態檔案:

  1. 取得智慧門鎖 ID:

    LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. 取得上傳網址:

    SIGNED_STATE_UPLOAD_URL=$(gcloud infra-manager deployments import-statefile DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID} --format="get(signedUri)")
    
    curl -s -X PUT --upload-file terraform.tfstate ${SIGNED_STATE_UPLOAD_URL}
    

解鎖部署作業

  1. 取得智慧門鎖 ID:

    LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
    
  2. 解鎖部署作業:

    gcloud infra-manager deployments unlock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID}
    

後續步驟