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

如何通过Terraform代码获取Azure虚拟机的创建时长?

用Terraform获取Azure虚拟机创建时长及清理方案

可以通过Terraform的Azure数据源获取虚拟机的创建时间,进而计算出创建时长,甚至实现对超期VM的清理,但要注意Terraform的声明式特性限制。

核心实现步骤

  • 拉取VM创建时间:使用azurerm_virtual_machine数据源获取目标VM的元数据,其中time_created字段就是VM的创建时间戳。
  • 计算时长差值:用Terraform内置的timeadd和timestamp()函数算出5天前的时间节点,再对比VM的创建时间是否早于该节点。
  • 触发删除操作:结合null_resource和local-exec调用Azure CLI删除符合条件的VM,但这种方式仅在执行terraform apply时生效,无法自动周期性运行。

示例代码

# 获取目标虚拟机的信息
data "azurerm_virtual_machine" "target_vm" {
  name                = "your-vm-name"
  resource_group_name = "your-resource-group"
}

# 定义时间变量与判断条件
locals {
  five_days_ago = timeadd(timestamp(), "-120h") # 5天等价于120小时
  is_overdue    = data.azurerm_virtual_machine.target_vm.time_created < local.five_days_ago
}

# 当VM超期时执行删除命令
resource "null_resource" "cleanup_old_vm" {
  count = local.is_overdue ? 1 : 0

  provisioner "local-exec" {
    command = "az vm delete --name ${data.azurerm_virtual_machine.target_vm.name} --resource-group ${data.azurerm_virtual_machine.target_vm.resource_group_name} --yes"
  }
}

补充说明

  • 若要批量处理多个VM,可改用azurerm_virtual_machines复数数据源获取同资源组下的所有VM,再通过for_each循环遍历判断每个VM的创建时间。
  • Terraform本身不支持定时任务,若需要周期性自动清理超期VM,建议将上述代码与Azure Automation、GitHub Actions或其他定时工具结合,定期触发terraform apply执行。
  • 执行环境需提前配置Azure认证,并确保拥有虚拟机的删除权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:57:18