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

Terraform如何通过条件控制脚本仅在指定EC2节点执行?

Terraform null_resource按节点条件执行的count参数设置

需求说明

  • 三种执行场景:
    • 在所有节点执行:同时开启run_on_THIS_node和run_on_THAT_node
    • 仅在THIS节点执行:仅开启run_on_THIS_node
    • 仅在THAT节点执行:仅开启run_on_THAT_node
  • 通过null_resource的count参数控制是否创建资源(即是否执行脚本)

现有资源与变量定义

现有null_resource代码

resource "null_resource" "generic_script" {
  connection {
    type        = "ssh"
    user        = "ubuntu"
    private_key = file(var.ssh_key_file)
    host        = var.ec2_pub_ip
  }

  provisioner "file" {
    source      = "../modules/k8s_installer/${var.shell_script}"
    destination = "/tmp/${var.shell_script}"
  }

  provisioner "remote-exec" {
    inline = [
      "sudo chmod u+x /tmp/${var.shell_script}",
      "sudo /tmp/${var.shell_script}"
    ]
  }
}

变量定义

variable "run_on_THIS_node" {
  type        = boolean
  description = "Run script on THIS node"
  default     = false
}

variable "run_on_THAT_node" {
  type        = boolean
  description = "Run script on THAT node"
  default     = false
}

解决方案:设置count参数

通过判断两个布尔变量的逻辑或结果,控制是否创建null_resource:

  • 当任意一个变量为true时,count=1(执行脚本)
  • 当两个变量都为false时,count=0(不执行脚本)

修改后的资源代码

resource "null_resource" "generic_script" {
  # 两种等价写法任选其一
  count = toint(var.run_on_THIS_node || var.run_on_THAT_node)
  # count = var.run_on_THIS_node || var.run_on_THAT_node ? 1 : 0

  connection {
    type        = "ssh"
    user        = "ubuntu"
    private_key = file(var.ssh_key_file)
    host        = var.ec2_pub_ip
  }

  provisioner "file" {
    source      = "../modules/k8s_installer/${var.shell_script}"
    destination = "/tmp/${var.shell_script}"
  }

  provisioner "remote-exec" {
    inline = [
      "sudo chmod u+x /tmp/${var.shell_script}",
      "sudo /tmp/${var.shell_script}"
    ]
  }
}

场景对应变量设置

执行场景run_on_THIS_noderun_on_THAT_node效果
仅在THIS节点执行truefalse仅THIS节点的脚本执行
仅在THAT节点执行falsetrue仅THAT节点的脚本执行
在所有节点执行truetrue所有节点的脚本都执行
不执行脚本falsefalse无节点执行脚本

说明

该通用脚本需为每个节点单独实例化(比如通过模块调用),每个实例传入对应节点的ec2_pub_ip,通过控制每个实例的变量值实现不同执行场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:20:31