编辑:我已经修改了这个问题,现在显示整个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