我正在通过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”命令时,它没有提示任何访问密钥或秘密密钥。
如何解决此问题?
答案 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.tfterraform {
backend "s3" {
bucket = "WHAT-YOU-CALLED-YOUR-STATEBUCKET"
key = "mykey/terraform.tfstate"
region = "eu-west-1"
}
}
现在当您的Terraform初始化时:
初始化后端...
成功配置了后端“ s3”! Terraform将自动 除非后端配置更改,否则请使用此后端。
提供程序中的值与remote_state的权限无关,甚至可以是不同的AWS账户(甚至是其他云提供程序)。