Hi there, looks like there is some glitch in Terraform, I am continuously getting below error, I tried with …/… as well as it works on local system but in terraform apply it’s giving error.
Error: Invalid function argument
629
630 on modules/rule-target/main.tf line 4, in resource "aws_cloudwatch_event_rule" "event_rule":
631 4: event_pattern = file("../event_patterns/${var.rule_name}.json")
632 ----------------
633 var.rule_name is ""
634
635 Invalid value for "path" parameter: no file exists at
636 ../event_patterns/s3.json; this function works only with files
637 that are distributed as part of the configuration source code, so if this file
638 will be created by a resource in this configuration you must instead obtain
639 this result from an attribute of that resource.
I’d suggest using ${path.module}
or ${path.root}
(References to Values - Configuration Language - Terraform by HashiCorp) rather than relying on relative paths.
Hi @stuart-c thanks for replying. Will it be something as below?
old path: event_pattern = file("../event_pattern/${var.rule_name}.json")
new path: event_pattern = file($"{path.root/event_patterns}/${var.rule_name}.json")
Something like event_pattern = file("${path.root}/event_patterns/${var.rule_name}.json")
That is assuming the file lives in a event_patterns
directory in your root module. If that code is in a module and the file is too, you’d want ${path.module}
instead of ${path.root}
.
1 Like
@stuart-c same error. Really not sure whats broke, struggling to fix this error from couple of days now.
Error: Invalid function argument
195
196 on modules/rule-target/main.tf line 4, in resource "aws_cloudwatch_event_rule" "event_rule":
197 4: event_pattern = file("${path.root}/event_patterns}/${var.rule_name}.json")
198 ----------------
199 path.root is "."
200 var.rule_name is "eventTrigger"
201
202 Invalid value for "path" parameter: no file exists at
203 event_patterns}/eventTrigger.json; this function works only with files that
204 are distributed as part of the configuration source code, so if this file will
205 be created by a resource in this configuration you must instead obtain this
206 result from an attribute of that resource.
Could you paste the exact code, as the error event_patterns}/eventTrigger.json
suggests you have something wrong (that } shouldn’t appear there)?
Could you reformat your post using backticks as otherwise it is very hard to follow.
It looks like you have file("./event_patterns}/${var.rule_name}.json")
. You watn file("${part.root}/event_patterns/${var.rule_name}.json")
You still have the extra } that needs removing after event_patterns.
@stuart-c Yes, I tried removing } as well, same error.
Could you paste the code & error with the extra } removed?
@stuart-c sure
resource "aws_cloudwatch_event_rule" "event_rule" {
name = "${var.rule_name}"
event_pattern = file("./event_patterns/${var.rule_name}.json")
}
Error: Invalid function argument
195
196 on modules/rule-target/main.tf line 4, in resource "aws_cloudwatch_event_rule" "event_rule":
197 4: event_pattern = file("./event_patterns/${var.rule_name}.json")
198 ----------------
199 var.rule_name is "eventTrigger"
200
201 Invalid value for "path" parameter: no file exists at
202 event_patterns/eventTrigger.json; this function works only with files that are
203 distributed as part of the configuration source code, so if this file will be
204 created by a resource in this configuration you must instead obtain this
205 result from an attribute of that resource.
Have you tried "${path.root}/event_patterns/${var.rule_name}.json"
as suggested?
1 Like
Thank you so much @stuart-c it worked.
2 posts were split to a new topic: File not found with “file” function