启动模板字符串中的 Terraform 无效引用

Terraform Invalid reference in Launch Template String

我正在尝试创建一个带有 NVMe 存储的 EKS 节点组(供 Spark 使用)。我关注了这个博客 post:https://aws.amazon.com/blogs/containers/best-practices-for-running-spark-on-amazon-eks/

我正在尝试通过为 EKS 节点组指定启动模板来在 Terraform 上进行设置,如下所示:

data "template_file" "user_data_prepare_nvme" {
  template = <<EOF
#!/bin/bash -xe
IDX=1
for DEV in /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_*-ns-1; do
  mkfs.xfs ${DEV}
  mkdir -p /pv-disks/local${IDX}
  echo ${DEV} /pv-disks/local${IDX} xfs defaults,noatime 1 2 >> /etc/fstab
  IDX=$((${IDX} + 1))
done
mount -a
EOF
}

但是,我遇到了一个奇怪的错误

Error: Invalid reference
│ 
│   on __data__.tf line 227, in data "template_file" "user_data_prepare_nvme":
│  227: IDX=1 && for DEV in /dev/disk/by-id/nvme-Amazon_EC2_NVMe_Instance_Storage_*-ns-1; do  mkfs.xfs ${DEV};mkdir -p /pv-disks/local${IDX};echo ${DEV} /pv-disks/local${IDX} xfs defaults,noatime 1 2 >> /etc/fstab; IDX=$((${IDX} + 1)); done
│ 
│ A reference to a resource type must be followed by at least one attribute
│ access, specifying the resource name.

我不知道 Terraform 在这里想什么。我的理解是这里只是一个字符串定义?

如果 ${IDX} 是您的 bash 变量引用,而不是 TF 引用,您必须 escape 它:

$${IDX}

您必须对其他 bash 变量引用进行类似的转义。