执行Terraform代码时遇hashicorp/server Provider不存在错误求助
问题原因与解决方案
核心错误点
你的代码中**server_side_encryption_configuration**资源类型定义错误:Terraform会根据资源类型的前缀识别对应provider,没有aws_前缀的资源会被默认匹配到hashicorp/server provider,而该provider在官方仓库不存在,因此触发terraform init报错。
正确的S3桶服务端加密配置资源类型应为**aws_s3_bucket_server_side_encryption_configuration**。
修正后的完整代码
Provider配置(无需修改)
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 4.16" } } required_version = ">= 1.2.0" }
S3桶配置(修正加密资源及引用错误)
resource "aws_s3_bucket" "terraform-state" { bucket = "terrafrom-state-992292" acl = "private" } resource "aws_s3_bucket_versioning" "versioning-terrafrom-state" { bucket = aws_s3_bucket.terraform-state.id versioning_configuration { status = "Enabled" } } # 修正资源类型为AWS官方S3加密配置类型 resource "aws_s3_bucket_server_side_encryption_configuration" "ssec_terrafrom-state-992292" { bucket = aws_s3_bucket.terraform-state.id rule { apply_server_side_encryption_by_default { kms_master_key_id = aws_kms_key.terrafrom-state-992292-bucket-key.arn sse_algorithm = "aws:kms" } } } resource "aws_s3_bucket_public_access_block" "block" { bucket = aws_s3_bucket.terraform-state.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true }
额外修正说明
代码中还有几处资源引用错误:所有写aws_s3_bucket.terrafrom-state-992292.id的地方,需改为aws_s3_bucket.terraform-state.id——原资源名称是terraform-state,而非桶名。
验证步骤
- 替换修正后的代码
- 执行
terraform init,此时会正常拉取hashicorp/aws provider - 执行
terraform providers,确认依赖的provider仅为hashicorp/aws
内容的提问来源于stack exchange,提问作者Peter Jackson
相关产品推荐
相关产品推荐

