Terraform aws_launch_template user_data 变量分离(本地和 ec2 执行)
Terraform aws_launch_template user_data variables separation (local and ec2 execution)
在我的用户数据中,我有:
export INSTANCEID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
和 Terraform:
resource "aws_launch_template" "launch_template" {
user_data = base64encode(
templatefile(
"${path.module}/user_data/user_data.sh.tpl",
{
environment = var.environment
}
)
)
结果,我收到错误:
Invalid value for "vars" parameter: vars map does not contain key "INSTANCEID", referenced at ./user_data/user_data.sh.tpl
如我们所见,INSTANCEID 应在 EC2 端的启动时设置,但 Terraform 正试图在计划时替换此变量。怎么解决?
有2个解决方案:
- 在 shell 脚本中使用额外的
$
转义该变量。例如,INSTANCEID=$${INSTANCEID}
- 在 terraform 脚本的文件变量列表下将该变量作为
INSTANCEID = "$INSTANCEID"
添加,它将用 $INSTANCEID
替换 ${INSTANCEID}
并且脚本仍然有效。
在我的用户数据中,我有:
export INSTANCEID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
和 Terraform:
resource "aws_launch_template" "launch_template" {
user_data = base64encode(
templatefile(
"${path.module}/user_data/user_data.sh.tpl",
{
environment = var.environment
}
)
)
结果,我收到错误:
Invalid value for "vars" parameter: vars map does not contain key "INSTANCEID", referenced at ./user_data/user_data.sh.tpl
如我们所见,INSTANCEID 应在 EC2 端的启动时设置,但 Terraform 正试图在计划时替换此变量。怎么解决?
有2个解决方案:
- 在 shell 脚本中使用额外的
$
转义该变量。例如,INSTANCEID=$${INSTANCEID}
- 在 terraform 脚本的文件变量列表下将该变量作为
INSTANCEID = "$INSTANCEID"
添加,它将用$INSTANCEID
替换${INSTANCEID}
并且脚本仍然有效。