能否用同一个Terraform脚本创建Google Cloud存储桶并将Terraform状态存入其中?
可以将Terraform脚本的远程状态存储在其自身创建的GCP项目中,只要按阶段拆分执行流程即可解决你提到的"鸡和蛋"逻辑矛盾,具体操作步骤如下:
具体操作流程
- 第一阶段:用本地状态初始化核心基础资源
先不要配置GCS远程后端,直接使用默认的本地状态。编写第一版Terraform代码,包含3类核心资源:GCP项目实例、Cloud Storage服务启用、用于存储状态的GCS存储桶(建议同时配置桶的禁止删除、对象版本控制等安全策略)。执行terraform init初始化本地环境,再执行terraform apply完成这部分资源的创建,此时状态文件默认存在本地的terraform.tfstate中。 - 第二阶段:完成状态迁移
第一阶段资源创建成功后,在Terraform代码中补充GCS后端配置,填入你刚创建的存储桶信息。再次执行terraform init,Terraform会自动检测到后端变更,提示你是否要将本地状态迁移到新的远程GCS存储桶中,确认后即可完成状态迁移,之后所有的Terraform操作都会读取和写入该项目内的存储桶状态。 - 第三阶段:完善剩余资源配置
后续该环境对应的所有业务资源(VPC、虚拟机、数据库、权限配置等)都可以在同一套代码中迭代开发,所有资源的状态都会自动同步到该项目内的存储桶中,完全符合1个Google Project对应1个环境的规划。
关键注意事项
- 若后续需要销毁整个环境,需要先把GCS后端配置移除,执行
terraform init将状态迁回本地后,再执行terraform destroy,否则会出现存储桶被提前删除导致状态丢失、剩余资源无法通过Terraform管理的问题 - 必须给状态存储桶开启对象版本控制,避免状态文件误改误删后无法回滚
- 多团队协作场景下要严格配置存储桶的IAM权限,仅给授权的人员和服务账号开放状态文件的读写权限
内容的提问来源于stack exchange,提问作者spierce7
相关产品推荐
相关产品推荐

