[--------------------更新---------------------------]
我现在尝试了一个将地形与s3集成的教程。S3存储桶已经创建,我已经创建了一个IAM用户,我正在使用它的访问密钥和密钥。尽管如此,在terraform init
:之后,我不断收到关于提供商的错误
后端.tf
terraform {
required_version = ">=0.12.0"
backend "s3" {
region = "us-east-1"
key = "terraform.tfstate"
profile = "tu"
bucket = "terraformstatebucket3107"
}
}
.aws文件夹中的配置文件
[tu]
region = us-east-1
output = json
.aws文件夹中的凭据文件
[tu]
aws_access_key_id = AKIA*****************
aws_secret_access_key = nn3M1*****************
错误:
Initializing the backend...
Error: error configuring S3 Backend: no valid credential sources for S3 Backend found.
Please see https://www.terraform.io/docs/backends/types/s3.html
for more information about providing credentials.
Error: NoCredentialProviders: no valid providers in chain. Deprecated.
For verbose messaging see aws.Config.CredentialsChainVerboseErrors
因此,我尝试了这里提出的每一个解决方案,但不幸的是,它们都没有解决我的问题。经过一番挖掘,我找到了一个适合我的解决方案。那就是执行带有-backend-config
选项的terraform init
命令:
terraform init -backend-config="access_key=<your access key>" -backend-config="secret_key=<your secret key>"
这就是我找到解决方案的地方:配置Terraform S3后端时出错
要运行terraform init
,必须为凭据(aws密钥(添加-backend-config
选项。
有几件事需要检查。
-
.aws文件夹下应该有一个名为凭据的文件,该文件的内容应该具有访问密钥和密钥。
[tu] aws_access_key_id = *************** aws_secret_access_key = ************************
-
如果上面的文件中有正确的密钥,并且仍然会出现同样的错误,那么我建议你应该在你的提供商块中提到访问密钥和密钥,比如这个
provider "aws" { access_key = var.aws_access_key secret_key = var.aws_secret_key region = var.region }
并将上述变量值存储在.tfwars文件中
aws_access_key ="****your access key****"
aws_secret_key = "***your secret key****"
希望有了这些设置,它应该可以工作,即使在这个问题持续存在之后,我在你的.aws/config中看到你提到了mfa-arn。
如果启用了多因素身份验证,请尝试在后端.tf文件中添加mfa会话令牌以及我在上面提到的提供程序块
terraform {
required_version = ">=0.12.0"
backend "s3" {
region = "us-east-1"
key = "terraform.tfstate"
bucket = "terraformstatebucket3107"
token = "*****Your MFA SessionToken*****"
}
}
要获得MFA会话令牌,请查看此处
在尝试使用Terraform Cloud作为状态的后端存储运行时遇到此问题。
确保在Terraform Cloud中设置环境变量或将执行模式设置为"0";"本地";所以使用您的本地系统。
我花了一段时间对找不到的配置文件进行故障排除,因为我已经将其设置为运行";"远程";其他的都是正确的。
Terraform云执行模式选项屏幕截图