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

Terraform≤0.13下硬件规格变更时重建VM的方案咨询

解决方案:使用for_each触发实例重建

在Terraform ≤0.13版本中,无法使用replace_triggered_by,可以通过for_each将硬件规格作为资源的唯一标识,实现规格变更时自动重建VM的需求。

代码示例

resource "oci_core_instance" "my_instance" {
  # 将规格值包装为集合,作为for_each的判断依据
  for_each = toset([var.etcd_shape])
  
  # 必填参数示例(根据实际环境补充)
  compartment_id = var.compartment_id
  shape          = each.key # 直接使用集合元素作为实例规格

  # 可选:启用先建后删,避免服务中断
  lifecycle {
    create_before_destroy = true
  }
}

原理说明

当var.etcd_shape变更时,for_each的集合元素会从旧规格切换为新规格:

  1. Terraform会识别到对应旧规格的实例资源已不在集合中,自动销毁旧实例
  2. 同时创建对应新规格的新实例,实现完整的重建流程

替代方案(基于你已有的null_resource)

如果希望保留null_resource的触发逻辑,可以通过local-exec执行terraform taint命令强制标记实例为待重建:

resource "null_resource" "shape_trigger" {
  triggers = {
    node_shape = var.etcd_shape
  }

  provisioner "local-exec" {
    # 标记实例为待重建,执行terraform apply时会重新创建
    command = "terraform taint oci_core_instance.my_instance"
  }
}

resource "oci_core_instance" "my_instance" {
  depends_on = [null_resource.shape_trigger]
  
  # 其他必填参数
  compartment_id = var.compartment_id
  shape          = var.etcd_shape
}

注意:此方案要求运行Terraform的环境已安装Terraform,且有权限修改状态文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:34:57