對於任何部署作業,您可能需要檢查或修改狀態檔案。舉例來說,您可能想從部署作業中匯入或移除資源,這可以透過修改狀態檔案來完成。
本頁面說明如何使用為每個部署作業和修訂版本建立的 Terraform 狀態檔案。如要進一步瞭解狀態檔案,請參閱「狀態」。
本頁說明假設您已熟悉 Terraform。
事前準備
請確認您具備處理狀態檔案的必要權限。
config.admin
角色包含必要權限。所需的具體權限如下:config.deployments.lock
config.revisions.getState
config.deployments.updateState
config.deployments.unlock
config.deployments.getLock
config.deployments.getState
請確認您有 Terraform 設定的本機副本。這是與您使用的狀態檔案相對應的設定。
設定檔的本機副本可讓您在修改狀態檔案時,在本機執行
terraform refresh
或terraform plan
等指令。安裝 Terraform,即可在本機電腦上使用 Terraform CLI。
變更或檢查狀態檔案
如要變異 (修改) 或檢查狀態檔案,您必須鎖定部署作業並下載狀態檔案。接著,您可以變更或檢查狀態檔案。
變更狀態檔案後,請上傳檔案,讓 Infra Manager 在部署作業中使用。
鎖定部署作業
鎖定部署作業,以免在變更狀態檔案時,部署作業發生任何變更。您必須鎖定部署作業,才能下載狀態檔案。
gcloud infra-manager deployments lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION
取代:
- DEPLOYMENT_ID 與部署 ID 搭配使用。
- PROJECT_ID 與部署專案。
- LOCATION 與部署作業執行的位置。
這項指令的輸出內容包含
lock ID
,可用於上傳及解鎖 statefile。如要隨時擷取鎖定 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}
在本機變更狀態檔案
確認設定檔 (
*.tf
檔案) 與下載的狀態檔案 (terraform.tfstate
) 位於相同目錄。初始化 Terraform:
terraform init
如果您先前已初始化 Terraform,可能需要使用重新設定標記進行初始化:
terraform init -reconfigure
視需要使用狀態檔案。舉例來說,您可以執行狀態檢查或變異作業。如要進一步瞭解如何使用狀態檔案,請參閱「操控 Terraform 狀態」。
如果您在本機對 Terraform 設定檔進行任何變更,請上傳修改過的設定。將這項設定上傳至您用來部署設定的儲存空間 bucket 或公開 Git 存放區。
上傳狀態檔案
使用已簽署的 Cloud Storage 網址上傳狀態檔案:
取得鎖定 ID:
LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
取得上傳網址:
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
解鎖部署
取得鎖定 ID:
LOCK_ID=$(gcloud infra-manager deployments export-lock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --format="get(lockId)")
解鎖部署:
gcloud infra-manager deployments unlock DEPLOYMENT_ID --project PROJECT_ID --location LOCATION --lock-id ${LOCK_ID}