处理 Terraform 模板文件和 Bash 脚本的解析错误

Posted

技术标签:

【中文标题】处理 Terraform 模板文件和 Bash 脚本的解析错误【英文标题】:Parse error dealing with Terraform template file and Bash script 【发布时间】:2021-09-13 22:51:04 【问题描述】:

我不确定这个错误在哪里出错。我有一个 Terraform 资源,它创建了一个在启动配置中使用的 template_file。资源如下:

模板文件

data "template_file" "user_data" 
  count    = "$(var.enable ? 1 : 0) * var.number_of_zones" // 3 templates being created
  template = "$file("userdata.sh")"

  vars 
    ebs_volume = "$count.index == 0 ? $var.EBS_VOLUME1 : $var.EBS_VOLUME2"
  

template_file 用于启动脚本,该脚本在启动时通过自动缩放事件将 EBS 挂载到实例。下面是脚本:

userdata.sh

#!/bin/bash
# Attach EBS volume
aws ec2 attach-volume --volume-id "$EBS_VOLUME" --instance_id `curl http://169.254.169.254/latest/meta-data/instance-id` --device /dev/sdf

EBS_VOLUME=$ebs_volume

执行此代码时,我收到以下错误,无法理解原因:

错误

Error: Error loading autoscaling-group.tf: Error reading config for template_file[user_data]: parse error at 1:22: expected expression but found invalid sequence "$"

任何有关我如何解决此问题的建议都会有所帮助。

【问题讨论】:

你用的是哪个TF版本? 版本为 0.11.10。 进展如何?问题仍然存在? 嘿,成功了!谢谢! 很高兴它成功了。因此,如果答案有帮助,我们将不胜感激。 【参考方案1】:

TF 0.11 非常旧,您应该考虑升级。但无论如何,您的代码中几乎没有错误(错误的插值,用户数据)。以下应该有效:

variable "number_of_zones" 
  default = 3


variable "EBS_VOLUME2" 
  default = "2222"


variable "EBS_VOLUME1" 
  default = "1111"



variable "enable" 
  default = "true"


data "template_file" "user_data" 
  count    = "$(var.enable ? 1 : 0) * var.number_of_zones"
  template = "$file("userdata.sh")"

  vars 
    ebs_volume = "$count.index == 0 ? var.EBS_VOLUME1 : var.EBS_VOLUME2"
  


output "test"   
  value    = "$data.template_file.user_data.*.rendered"

【讨论】:

以上是关于处理 Terraform 模板文件和 Bash 脚本的解析错误的主要内容,如果未能解决你的问题,请参考以下文章

具有自动缩放组的多个模板文件和使用 Terraform 的启动配置

防止 terraform 函数“模板文件”输出 heredoc

在另一个模板中包含一个 terraform 模板

将 ARM 模板转换为 Terraform [关闭]

用于 aws 策略列表的 terraform 模板文件

如何使用 terraform 将 aws ec2 私有 ips 传递给模板文件