Table of Contents

The Error

Invalid function argument: Invalid value for "X" parameter

What Causes This

You passed a value of the wrong type to a Terraform function. For example, passing a string where a list is expected, or using a null value where a non-null is required.

How to Fix It

Common Function Fixes

# lookup — provide a default
# BAD
value = lookup(var.settings, "missing_key")  # Error if key doesn't exist!
# GOOD
value = lookup(var.settings, "missing_key", "default_value")

# concat — must be lists, not strings
# BAD
result = concat(var.list_a, "single_item")
# GOOD
result = concat(var.list_a, ["single_item"])

# merge — must be maps
# BAD
result = merge(var.tags, "extra_tag")
# GOOD
result = merge(var.tags, { extra_tag = "value" })

# coalesce — first non-null/non-empty
# BAD
value = coalesce("", var.name)  # Empty string is not null!
# GOOD
value = coalesce(var.name, "default")

# templatefile — variable types
# BAD
content = templatefile("script.sh", {
  items = "not-a-list"  # Template expects a list!
})
# GOOD
content = templatefile("script.sh", {
  items = ["item1", "item2"]
})

Debug with terraform console

terraform console
> lookup({a = "1", b = "2"}, "c", "default")
"default"
> type(var.my_variable)
# Shows the actual type

Prevention Tips

  1. Pin provider versions — avoid surprise breaking changes
  2. Use CI/CD — catch errors before they hit production
  3. Test with terraform plan — always review before applying
  4. Keep Terraform updated — newer versions have better error messages
  5. Use terraform validate — catches syntax errors early

Hands-On Courses

Learn to avoid these errors with interactive, project-based courses:

Conclusion

This error is common and fixable. Follow the solutions above, and check our Terraform course for hands-on training that covers real-world troubleshooting scenarios.