Hello Everyone,
I want to pass a file named app.sh to the user data in my launch template. However, getting following error:
Code Snippet:
resource "aws_launch_template" "LT_main" {
instance_type = "t2.micro"
image_id = data.aws_ami.LatestAMI.image_id
vpc_security_group_ids = [var.ec2sg]
user_data = file(templatefile("${path.module}/app.sh",{
DB_HOST = var.DB_HOST
DB_USER = var.DB_USER
DB_PASSWORD_PARAM = var.DB_PASSWORD_PARAM
DB_PORT = var.DB_PORT
DB_NAME = var.DB_NAME
}))
depends_on = [var.DB_HOST]
}
Error:
Error: Invalid function argument
on module/Compute/main.tf line 27, in resource "aws_launch_template" "LT_main":
user_data = file(templatefile("${path.module}/app.sh",{
DB_HOST = var.DB_HOST
DB_USER = var.DB_USER
DB_PASSWORD_PARAM = var.DB_PASSWORD_PARAM
DB_PORT = var.DB_PORT
DB_NAME = var.DB_NAME
}))
while calling file(path)
path.module is "module/Compute"
var.DB_HOST is "*********.rds.amazonaws.com:3306"
var.DB_NAME is "maindb"
var.DB_PORT is 3306
var.DB_USER is "*****"
Invalid value for "path" parameter: no file exists at (sensitive value); this function works only with files that are distributed as part of the configuration source code, so if this file will be created by a resource in this configuration you must instead obtain this result from an attribute of that resource.
However, it works fine if I do not provide any argument:
Working:
resource "aws_launch_template" "LT_main" {
instance_type = "t2.micro"
image_id = data.aws_ami.LatestAMI.image_id
vpc_security_group_ids = [var.ec2sg]
user_data = file("${path.module}/app.sh")
depends_on = [var.DB_HOST]
}
OR
user_data = filebase64(“${path.module}/app.sh”) also works. templatefile() never works.
For entire code, please feel free to refer to the following repo:
Any Clue?