配置 Terraform AWS 提供程序时出错 - Linux
Posted
技术标签:
【中文标题】配置 Terraform AWS 提供程序时出错 - Linux【英文标题】:Error configuring Terraform AWS Provider - Linux 【发布时间】:2021-09-02 14:23:06 【问题描述】:[----------------------- 更新 ------------------- --------]
我现在尝试了一个将 terraform 与 s3 集成的教程。创建了 S3 存储桶,我创建了一个 IAM 用户,我正在使用它的访问密钥和秘密密钥。
尽管如此,在terraform init
之后,我不断收到有关提供程序的错误:
backend.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
【问题讨论】:
在运行 apply 之前您是否运行过terraform init
?
@MarkoE 是的,确实
您的 AWS 访问密钥和秘密访问密钥是否在凭证文件中全部大写?
我同意,如果错误消息仍然存在并且您已在不同位置设置了凭据,那么它们可能以某种方式格式不正确。
作为其他尝试,删除 profile = "default"
行
【参考方案1】:
运行terraform init
,您必须为您的凭据(aws 密钥)添加-backend-config
选项。
【讨论】:
【参考方案2】:所以,我已经尝试了这里建议的所有解决方案,但不幸的是,它们都没有解决我的问题。
经过一番挖掘,我找到了一个适合我的解决方案。那就是执行带有-backend-config
选项的terraform init
命令,如下所示:
terraform init -backend-config="access_key=<your access key>" -backend-config="secret_key=<your secret key>"
这是我找到此解决方案的问题: Error while configuring Terraform S3 Backend
【讨论】:
【参考方案3】:您需要检查几件事。
.aws 文件夹下应该有一个名为 credentials 的文件,该文件的内容应该具有访问密钥和密钥。
[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
并将上述变量值存储在.tfvars文件中
aws_access_key ="****your access key****"
aws_secret_key = "***your secret key****"
希望通过这些设置它应该可以工作,即使在此问题仍然存在之后,我在您的 .aws/config 中看到您提到了 mfa arn。
如果启用了多因素身份验证,请尝试在 backend.tf 文件中添加 mfa session token 以及我上面提到的提供程序块
terraform
required_version = ">=0.12.0"
backend "s3"
region = "us-east-1"
key = "terraform.tfstate"
bucket = "terraformstatebucket3107"
token = "*****Your MFA SessionToken*****"
要获取 MFA SessionToken,请查看here
【讨论】:
我实际上认为使用 MFA 会话令牌可以解决问题。但我仍然得到同样的错误...... 啊,我知道了,我刚刚更新了上面答案中的 backend.tf 内容,您可以尝试从后端“s3”块中删除“profile”参数并按照第二点使用提到的提供程序设置一次。我看到的问题是您的 aws 配置文件,因为如果您尝试这种方式它应该可以工作,s3 后端没有得到初始化.. 没用,不过,我找到了解决问题的方法,并在此处发布。但是我会为您的回答给予一些信任,因为这可能对某些人有用!谢谢@Arpan以上是关于配置 Terraform AWS 提供程序时出错 - Linux的主要内容,如果未能解决你的问题,请参考以下文章
使用 Terraform 创建 AWS-OPSWORK-STACK 时出错
使用 Terraform 创建 AWS MySQL RDS 实例时出错
Terraform:导入 aws 资源时出现凭证错误 - 调用 sts 时出错:GetCallerIdentity:ExpiredToken
如何在 local-exec 配置程序中从 terraform 继承 aws 凭据