如何修复Terraform plan报Provider configuration not present错误
这个报错和Git仓库迁移本身没有直接关系,核心是迁移配置时漏了aws.cloudfront-acm-us-east-1对应的别名AWS Provider声明块。
Terraform状态文件会记录每个托管资源、数据源绑定的Provider实例唯一标识。你用到的data.aws_acm_certificate.cloudfront_wildcard_product_env_certificate在状态里绑定的是带cloudfront-acm-us-east-1别名的AWS Provider实例,但当前工作目录的配置里找不到这个别名Provider的声明,Terraform无法匹配到对应Provider配置完成校验,就会抛出该错误。
你删掉数据源里的provider = aws.cloudfront-acm-us-east-1行后能跑通,本质是让Terraform把这个数据源重新绑定到了默认无别名的AWS Provider上,属于临时绕过手段,不是正确修复方式:CloudFront要求关联的ACM证书必须存放在us-east-1区域,如果你默认AWS Provider配的不是us-east-1,后续要么查不到证书,要么绑定错区域的证书,直接导致CloudFront部署失败。
报错提示里提到的“加回Provider配置、销毁资源后再移除Provider”是针对可创建销毁的托管资源(resource块)的处理逻辑,你这里用的是只读数据源(data块),完全不需要走销毁流程。
- 恢复数据源配置中被删掉的
provider = aws.cloudfront-acm-us-east-1行,不要移除该配置。 - 在Terraform配置目录下补全对应的别名Provider声明,和旧仓库里的Provider配置保持一致即可,参考配置如下:
# 默认AWS Provider,指向业务实际部署的目标区域 provider "aws" { region = var.aws_region # 替换为你实际使用的区域,例如ap-southeast-1 } # 别名Provider,固定指向us-east-1区域,专门用于查询CloudFront依赖的ACM证书 provider "aws" { alias = "cloudfront-acm-us-east-1" region = "us-east-1" }
- 补完配置后执行
terraform init完成Provider初始化,再运行terraform plan就可以正常执行,不会再报Provider配置缺失的错误。
这类问题大多是迁移时漏拷了存放Provider声明的文件(比如常见的providers.tf),或者误删了别名Provider配置块导致的,补全对应声明即可彻底修复。
内容的提问来源于stack exchange,提问作者Kalpesh Tawde

