Terraform Error: Call to unknown function for a provider-defined function
Fix Terraform 'Call to unknown function' for provider::<name>::<fn> calls: missing required_providers entry, wrong provider local name, or a provider too old to expose functions.
- #terraform
- #iac
- #troubleshooting
- #errors
Stuck on this Terraform error? Get the free incident triage checklist
A one-page PDF — the exact steps to isolate, fix, and verify a production error like this one. No spam, unsubscribe anytime.
Exact Error Message
╷
│ Error: Call to unknown function
│
│ on main.tf line 12, in locals:
│ 12: arn = provider::aws::arn_build("aws", "iam", "", data.aws_caller_identity.current.account_id, "role/example")
│
│ There is no function named "provider::aws::arn_build".
╵
You may also see the more specific provider-namespace form:
│ Error: Function not found in provider
│
│ The provider "registry.terraform.io/hashicorp/aws" does not define a
│ function named "arn_build".
What It Means
Provider-defined functions (Terraform 1.8+) let a provider expose custom functions callable as provider::<local_name>::<function_name>. Unlike built-in functions such as jsonencode, these are shipped inside a provider plugin and are only available when that provider is properly declared and installed.
Call to unknown function for a provider::... reference means Terraform could not resolve the function to an installed provider. Either the provider local name in the namespace does not match a required_providers entry, the provider version installed is too old to include the function, or the function name is misspelled or does not exist in that provider.
Common Causes
- The provider is not declared in
required_providers, so theprovider::<name>::namespace resolves to nothing. - The local name used (
aws,local, etc.) does not match the key you gave the provider inrequired_providers. - The installed provider version predates provider-defined functions or predates that specific function.
- The function name is misspelled, or you assumed a function that the provider does not actually ship.
- Your Terraform CLI is older than 1.8 and does not support the
provider::namespace at all.
Diagnostic Commands
Check your Terraform version supports provider functions:
terraform version
Inspect declared providers and their local names/versions:
terraform providers
Show the exact installed provider versions from the lock file:
grep -A2 'provider "registry.terraform.io/hashicorp/aws"' .terraform.lock.hcl
Reproduce the resolution failure:
terraform validate
Step-by-Step Resolution
- Confirm Terraform is 1.8 or newer. Provider-defined functions do not exist before that:
terraform version
- Declare the provider in
required_providersand note the local name (the map key). The namespace in your call must use that exact key:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 5.40.0"
}
}
}
-
Make sure the function call’s middle segment matches the local name. If you named the provider
awscloud, the call must beprovider::awscloud::arn_build(...), notprovider::aws::.... -
Upgrade the provider so the function actually exists in the installed version, then re-lock:
terraform init -upgrade
- Verify the function name against the provider’s documentation. For example, the AWS provider exposes
arn_parseandarn_build; confirm spelling and argument order:
locals {
parsed = provider::aws::arn_parse("arn:aws:iam::444455556666:role/example")
}
- Run validate and plan to confirm resolution:
terraform validate && terraform plan
Success! The configuration is valid.
Prevention
- Pin a provider
versionconstraint that is at or above the release which introduced the function you call. - Keep the function-call namespace in sync with the
required_providerslocal name — treat renaming a provider key as a breaking change to everyprovider::call. - Run
terraform init -upgradeafter adopting a new provider function so the lock file reflects a version that ships it. - Prefer provider-defined functions over brittle string interpolation for ARNs, CIDR math, and encoding, but document the minimum provider version in a comment.
- Check the provider changelog before using a function; not every provider ships functions, and names differ between providers. The Terraform provider prompts can generate the correct
required_providersblock and version constraint for a function you want to use.
Related Errors
Call to unknown function(noprovider::prefix) — a misspelled built-in function likejsondecode.Failed to install provider— the provider version that ships the function could not be downloaded.Unsupported Terraform Core version— your CLI is too old forprovider::syntax.Invalid provider local name— the namespace segment is not a valid identifier or is undeclared.
Frequently Asked Questions
What does the provider:: namespace mean? It is the syntax for provider-defined functions: provider::<local_name>::<function_name>. The local name must match the key you used for that provider in required_providers.
Why does Terraform say the function is unknown when the provider is installed? Usually the installed version is older than the release that added the function, or the local name in your call does not match the required_providers key. Run terraform init -upgrade and check terraform providers.
Do I need a specific Terraform version? Yes — provider-defined functions require Terraform 1.8 or newer. On older CLIs the provider:: prefix is a parse-time unknown function.
How do I know which functions a provider offers? Consult the provider’s registry documentation; function names and signatures are provider-specific and are listed under the provider’s “Functions” section. For more provider troubleshooting, see the Terraform guides.
Fixed it? Get 500 Terraform & DevOps AI prompts — free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.
Stuck on this? Start guided troubleshooting
Open an interactive diagnostic session with this error already loaded. Work a step-by-step plan, record what each check returns, land on a root cause, and export a clean incident summary — no account needed to start.
Did this fix your issue?
Solved it a different way?
Share the fix that worked for you — reviewed, then published to help the next engineer.
That looks like it may contain a secret (key, token, password, or connection string). Please remove it — a note with a detected secret can’t be published.
Thanks — that helps. Published notes appear after a quick review.
Trending errors this week
The error guides other engineers are actually reading right now.
- 1mount: wrong fs type, bad option, bad superblock
- 2Docker 'failed to set up container networking': Fix the Bridge and IP Pool
- 3Docker 'failed to create shim task': How to Fix the containerd Runtime Error
- 4Transport endpoint is not connected
- 5modprobe: FATAL: Module not found
- 6mount: wrong fs type, bad option, bad superblock
Get 500 Battle-Tested DevOps AI Prompts — Free
500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.
- 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
- Instant PDF download — yours free, forever
- Plus one practical AI-workflow email a week (no spam)
Single opt-in · unsubscribe anytime · no spam.