You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Terraform挂载随实例关机销毁的GCP磁盘

解决方案

首先明确:GCP里VM实例**关机(停止运行)**时,持久磁盘(包括你定义的区域磁盘)本来就会留存,这是默认设计——关机只是暂停实例运行,并非销毁资源,没法通过配置让磁盘随关机一起销毁。

如果你的实际需求是当VM实例被销毁(而非关机)时,附带的区域磁盘也一并删除,可以用下面两种方法实现:

方法一:给实例的挂载磁盘添加自动删除配置

修改google_compute_instance里的attached_disk块,加上delete_on_termination = true:

resource google_compute_instance my_instance {
  ...
  attached_disk {
    # 注意:原代码里硬编码"my_disk"会有问题,多磁盘场景要引用资源的self_link
    source = google_compute_region_disk.my_data_disk1[0].self_link
    device_name = "data-disk1"
    kms_key_self_link = var.kms_key_self_link
    mode = "READ_WRITE"
    delete_on_termination = true # 新增这行,实例销毁时自动删磁盘
  }
  ....
}

提醒:原代码里source = "my_disk"是硬编码名称,要是磁盘用了count创建多个实例,必须改成引用Terraform资源的self_link属性,比如和实例的count对应起来。

方法二:给磁盘绑定实例的生命周期

在google_compute_region_disk资源里添加依赖和生命周期配置,让磁盘跟着实例一起销毁:

resource google_compute_region_disk my_data_disk1 {
  count = (var.master_count + (var.master_count * var.replicas))
  provider = google-beta
  # 原代码里固定name会导致重名报错,必须加索引区分
  name = "my_disk-${count.index}"
  project = var.service_project
  type = var.attach_data_disk_type
  region = substr(local.uk_staging_zones[count.index],0,12)
  size = var.attach_data_disk_size
  disk_encryption_key {
    kms_key_name = var.kms_key_self_link
  }

  # 让磁盘依赖实例,实例销毁时磁盘也会被销毁
  depends_on = [google_compute_instance.my_instance]
  lifecycle {
    prevent_destroy = false # 确保允许磁盘被销毁
  }
}

提醒:原代码里磁盘name固定为"my_disk",当count>1时会因为名称重复报错,必须改成带索引的命名格式。

补充说明

要是你确实需要在关机(停止实例)时销毁磁盘,GCP没有原生支持这种场景——因为关机是临时暂停,默认要保留磁盘数据。这种情况建议改用临时磁盘(比如本地SSD或实例临时磁盘),临时磁盘会在实例停止或销毁时自动清除,但数据没法持久化。

内容的提问来源于stack exchange,提问作者user8473984

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:24:27