对于任何部署,您可能需要检查或修改状态文件。例如,您可能需要从部署中导入或移除资源,这可以通过修改状态文件来实现。
本页介绍了如何使用为每个部署和修订创建的 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 替换为部署标识符。
- 将 PROJECT_ID 替换为运行部署的项目。
- 将 LOCATION 替换为部署运行的位置。
此命令的输出包含用于上传和解锁状态文件的
lock ID
。如需随时检索锁定 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 配置文件进行了任何更改,请上传修改后的配置。将此配置上传到您用作部署配置的源的 Storage 存储分区或公共 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}
后续步骤
- 详细了解 Terraform with Google Cloud。
- 更新部署。
- 查看部署的状态。
- 查看已部署的资源。
- 删除部署。