Lim*_*mbo 1 amazon-s3 amazon-web-services terraform terraform-provider-aws
编辑:我现在已经修改了问题以显示整个 main.tf 文件。
\n我有一个 Terraform 文件,该文件应该创建一个 AWS S3 存储桶,但每次运行时我不断收到的错误之一terraform plan是:
\xe2\x94\x82 Error: Invalid provider configuration\n\xe2\x94\x82 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.\nRun Code Online (Sandbox Code Playgroud)\nmain.tf 文件:
\nterraform {\n backend "s3" {\n region = "us-east-1"\n bucket = "bucketname"\n key = "path/terraform.tfstate" \n dynamodb_table = "tf-state-lock" \n access_key = "<access_key>"\n secret_key = "<secret_key"\n }\n\n required_providers {\n aws = {\n version = " ~> 3.0"\n source = "registry.terraform.io/hashicorp/aws"\n }\n }\n\n} \n\nprovider "aws" {\n alias = "east" \n region = "us-east-1"\n access_key = "access_key"\n secret_key = "secret_key"\n}\n\nresource "aws_s3_bucket" "tf-remote-state" {\n bucket = "bucketname" \n\n versioning {\n enabled = true\n }\n\n lifecycle {\n prevent_destroy = true\n }\n}\n\nresource "aws_dynamodb_table" "dynamodb-tf-state-lock" {\n name = "tf-state-lock" \n hash_key = "LockID"\n read_capacity = 20\n write_capacity = 20\n\n attribute {\n name = "LockID"\n type = "S"\n }\n\n tags = {\n name = "state lock"\n }\n} \nRun Code Online (Sandbox Code Playgroud)\n我究竟做错了什么?
\n由于您在块中使用alias[1] ,当前设置资源的方式将导致 Terraform 期望您要创建的资源存在provider无别名块:provider
默认情况下,资源使用从资源类型名称的第一个单词推断的默认提供程序配置(没有别名参数的配置)。
换句话说,由于您没有在两个资源块(对于 S3 和 DynamoDB)中指定别名提供程序的名称,Terraform 希望默认使用非别名提供程序配置。由于您没有没有 的提供程序块alias,因此修复它的最简单方法可能是将以下内容添加到两个资源块 [2]:
provider = aws.east
Run Code Online (Sandbox Code Playgroud)
整个块将如下所示:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果没有任何特殊原因需要使用别名(即无论如何都会在一个区域中创建资源),则仅设置region(就像您已经做的那样)也可以解决问题。如果您不想使用别名,只需alias = "east"从provider块中删除别名,然后您就不必更改资源块中的任何内容,代码将按原样工作。
[1] https://www.terraform.io/language/providers/configuration#alias-multiple-provider-configurations
| 归档时间: |
|
| 查看次数: |
9001 次 |
| 最近记录: |