这是我的 Bash 脚本:
#!/bin/bash
#Colors for terminal
#RED
R="\e[31m"
#GREEN
G="\e[32m"
#YELLOW
Y="\e[33m"
#NORMAL
N="\e[0m"
validation(){
if [ $1 -eq 0 ];
then
echo -e "${G}$2 is successful${N}"
else
echo -e "${R}$2 has Failed${N}"
exit 1;
fi
}
echo -e "${Y}Configuring Cart Service${N}"
cart_config="/etc/systemd/system/cart.service"
cat << EOF >$cart_config
Environment=REDIS_HOST="${redis_ip}" #I want TF to only substitute these
Environment=CATALOGUE_HOST="${app_lb_dns}"
Environment=CATALOGUE_PORT=8082
EOF
validation $? "Configuring Cart Service"
Terraform 创建 Redis-Ip 地址和负载均衡器 DNS 后,我会收到它们,我想将替换这些值的 Bash 脚本作为用户数据传递。问题是 Terraform 试图替换${}
Bash 脚本中的每个变量,但我只想将${redis_ip}
和替换${app_lb_dns}
为用户数据。我尝试使用\${}
和转义所有变量,$${}
但没用。
错误:
20:user_data = base64encode(templatefile(“../userdata/cart.sh”,{redis_ip = data.aws_ssm_parameter.redis_ip.value,app_lb_dns = data.aws_ssm_parameter.app_lb_dns.value}))在调用templatefile(path,vars)时“vars”参数的值无效:vars映射不包含键“G”,在../userdata/cart.sh:16,21-22处引用。
根据错误,TF 正在尝试替换与 bash 脚本相关的变量。
这是我的 Terraform 代码:
user_data = base64encode(templatefile("../userdata/cart.sh", { redis_ip = data.aws_ssm_parameter.redis_ip.value, app_lb_dns = data.aws_ssm_parameter.app_lb_dns.value }))