配置Terraform S3后端时出错

时间:2019-04-01 07:22:51

标签: amazon-web-services amazon-s3 terraform

我正在通过Terraform为AWS配置S3后端。

terraform {
  backend "s3" {}
}

在运行“ terrain init”命令时提供(S3后端)存储桶名称,键和区域的值时,出现以下错误

配置后端“ s3”时出错:找不到适用于AWS Provider的有效凭证来源。请参阅https://terraform.io/docs/providers/aws/index.html,以获取有关为AWS Provider提供凭证的更多信息。 请更新Terraform文件中的配置以修复此错误 然后再次运行此命令。

我已将访问和秘密密钥声明为providers.tf中的变量。在运行“ terrain init”命令时,它没有提示任何访问密钥或秘密密钥。

如何解决此问题?

4 个答案:

答案 0 :(得分:2)

在 AWS 凭证文件中重命名配置文件时,我遇到了类似的问题。删除 .terraform 文件夹并再次运行 terraform init 解决了问题。

答案 1 :(得分:1)

我也遇到了同样的问题,最简单,最安全的方法是解决此问题,方法是配置AWS配置文件。即使您在项目中正确提及了AWS_PROFILE,您也必须在backend.tf中再次提及它。

我的问题是,我已经在项目中按如下所示设置了AWS提供程序,并且它可以正常工作。

provider "aws" {
region = "${var.AWS_REGION}"
profile = "${var.AWS_PROFILE}"
}

但是在项目结束时,我正在尝试配置S3后端配置文件。因此,我已经运行了terraform init命令,并且得到了相同的错误消息。

Error: error configuring S3 Backend: no valid credential sources for S3 Backend found.

注意,这对于terraform后端配置还不够。您还必须在后端文件中提及 AWS_PROFILE

  • 完整解决方案

目前,我正在使用terraform最新版本。它是v0.13.5。

请参阅provider.tf

provider "aws" {
region = "${var.AWS_REGION}"
profile = "${var.AWS_PROFILE}" # lets say profile is my-profile
}

例如您的AWS_PROFILE是我的个人资料 那么您的backend.tf应该如下所示。

terraform {
    backend "s3" {
    bucket = "my-terraform--bucket"
    encrypt = true
    key = "state.tfstate"
    region = "ap-southeast-2"
    profile = "my-profile" # you have to give the profile name here. not the variable("${var.AWS_PROFILE}")
  }
}

然后运行terraform init

答案 2 :(得分:0)

运行terraform init时,必须添加-backend-config选项作为凭据(aws密钥)。因此,您的命令应如下所示:

terraform init -backend-config="access_key=<your access key>" -backend-config="secret_key=<your secret key>"

答案 3 :(得分:0)

不要-为机密添加变量。这是一种非常糟糕的做法,而且是不必要的。

Terraform将选择您的默认AWS配置文件,或者也使用您设置的AWS_PROFILE的任何AWS配置文件。如果在AWS中使用,则应使用实例配置文件。角色也可以完成。

如果您将配置文件硬编码到tf代码中,那么无论您要在何处运行此脚本,并针对其运行的每个不同帐户,都必须具有相同的配置文件名称。

不要-进行所有这些cmdline任务,除非您喜欢包装脚本或键入内容。 做-添加一个看起来像

remote_state.tf
terraform {
  backend "s3" {
    bucket         = "WHAT-YOU-CALLED-YOUR-STATEBUCKET"
    key            = "mykey/terraform.tfstate"
    region         = "eu-west-1"
  }
}

现在当您的Terraform初始化时:

  

初始化后端...

     

成功配置了后端“ s3”! Terraform将自动   除非后端配置更改,否则请使用此后端。

提供程序中的值与remote_state的权限无关,甚至可以是不同的AWS账户(甚至是其他云提供程序)。