配置 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 凭据

使用 terraform 创建 lambda 函数时出错获取验证错误

使用Terraform部署代码和管理配置