AWS S3存储桶的Terraform文件不断获取错误:无效的提供程序配置



编辑:我已经修改了这个问题,现在显示整个main.tf文件。

我有一个Terraform文件,它应该创建一个AWS S3存储桶,但每次运行terraform plan时,我都会收到一个错误:

│ Error: Invalid provider configuration
│ Provider "registry.terraform.io/hashicorp/aws" requires explicit configuration. Add a provider block to the root module and configure the provider's required arguments as described in the provider documentation.

主.tf文件:

terraform {
backend  "s3" {
region         = "us-east-1"
bucket         = "bucketname"
key            = "path/terraform.tfstate" 
dynamodb_table = "tf-state-lock" 
access_key = "<access_key>"
secret_key = "<secret_key"
}
required_providers {
aws = {
version = " ~> 3.0"
source = "registry.terraform.io/hashicorp/aws"
}
}
} 
provider "aws" {
alias  = "east" 
region = "us-east-1"
access_key = "access_key"
secret_key = "secret_key"
}
resource "aws_s3_bucket" "tf-remote-state" {
bucket = "bucketname" 
versioning {
enabled = true
}
lifecycle {
prevent_destroy = true
}
}
resource "aws_dynamodb_table" "dynamodb-tf-state-lock" {
name            = "tf-state-lock" 
hash_key        = "LockID"
read_capacity   = 20
write_capacity = 20
attribute {
name = "LockID"
type = "S"
}
tags = {
name = "state lock"
}
} 

我做错了什么?

由于您在provider块中使用alias[1],当前设置资源的方式将导致Terraform期望您要创建的资源存在未别名的provider块:

默认情况下,资源使用从资源类型名称的第一个单词推断出的默认提供程序配置(不带别名参数(。

换句话说,由于您没有在两个资源块(S3和DynamoDB(中指定别名提供程序的名称,Terraform希望在默认情况下使用非别名提供程序配置。由于没有alias就没有提供程序块,修复它的最简单方法可能是在两个资源块中添加以下内容[2]:

provider = aws.east

整个区块看起来是这样的:

resource "aws_s3_bucket" "tf-remote-state" {
provider = aws.east
bucket   = "bucketname" 
versioning {
enabled = true
}
lifecycle {
prevent_destroy = true
}
}
resource "aws_dynamodb_table" "dynamodb-tf-state-lock" {
provider        = aws.east
name            = "tf-state-lock" 
hash_key        = "LockID"
read_capacity   = 20
write_capacity = 20
attribute {
name = "LockID"
type = "S"
}
tags = {
name = "state lock"
}
}

然而,如果没有任何特殊的理由使用别名(即,资源无论如何都会在一个区域中创建(,那么只设置region(正如您已经做的那样(也可以。如果你不想使用别名,只需从provider块中删除alias = "east",然后你就不必更改资源块中的任何内容,代码就会按原样工作。


[1]https://www.terraform.io/language/providers/configuration#alias-多供应商配置

[2]https://www.terraform.io/language/providers/configuration#selecting-备用提供商配置

我从谷歌来找

提供者"registry.terraform.io/hashicorp/aws";需要显式配置。

这就是它的修复方法:要么将此行添加到main.tf:

provider "aws" {
region = "eu-central-1"
}

或者定义一个环境变量:

AWS_REGION=eu-central-1

最新更新