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

如何在Terraform创建资源时使用Bash脚本的输出值?

解决方案

一、基于现有null_resource的实现方式

1. 修改脚本执行命令,将输出写入文件

让find_another_value.sh的输出写入临时文件,供Terraform读取。修改null_resource的local-exec命令:

resource "null_resource" "find_another_value" {
  provisioner "local-exec" {
    command     = "shell_scripts/find_another_value.sh > ${path.module}/another_value.txt"
    interpreter = ["/bin/bash"]
    working_dir = path.module

    environment = {
      DAR = var.aws_dar
      RAD = var.aws_rad
    }
  }
}

2. 在AWS资源中读取文件并建立依赖

修改some_aws_resource,读取文件内容作为another_key的值,并通过显式依赖确保AWS资源等待脚本执行完成:

resource "some_aws_resource" "resource_name" {
  name        = var.resource_name
  role_name   = var.role_name
  another_key = trimspace(file("${path.module}/another_value.txt")) # 去除输出中的换行/空格

  # 显式声明依赖,确保脚本执行完成后再创建资源
  depends_on = [null_resource.find_another_value]
}

注意:脚本需只输出another_value本身,不要包含额外日志或错误信息。若有错误输出,可在命令中重定向:shell_scripts/find_another_value.sh > ${path.module}/another_value.txt 2>/dev/null

二、更优实现:使用terraform_data替代null_resource

Terraform 1.4+版本推荐用terraform_data替代null_resource,它支持直接捕获脚本输出,无需临时文件,实现更简洁:

resource "terraform_data" "find_another_value" {
  provisioner "local-exec" {
    command         = "shell_scripts/find_another_value.sh"
    interpreter     = ["/bin/bash"]
    working_dir     = path.module
    environment     = {
      DAR = var.aws_dar
      RAD = var.aws_rad
    }
    capture_output  = true # 开启输出捕获
  }

  # 定义输出变量存储脚本结果
  output "another_value" {
    value = trimspace(self.provisioners[0].stdout)
  }
}

在AWS资源中直接引用该输出即可,Terraform会自动处理依赖顺序,无需额外声明:

resource "some_aws_resource" "resource_name" {
  name        = var.resource_name
  role_name   = var.role_name
  another_key = terraform_data.find_another_value.output.another_value
}

三、关键注意事项

  • 脚本必须保证输出仅包含目标值another_value,避免多余内容导致参数错误。
  • 若脚本执行可能失败,可添加on_failure = continue或on_failure = abort配置控制错误处理逻辑。
  • trimspace函数用于清理输出中的换行符和空格,确保值符合AWS资源属性的格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:05:25