我有一个$HOME/.aws/credentials
文件,如下所示:
[config1]
aws_access_key_id=accessKeyId1
aws_secret_access_key=secretAccesskey1
[config2]
aws_access_key_id=accessKeyId2
aws_secret_access_key=secretAccesskey2
因此,我期望通过这种配置,terraform
将选择第二个凭据:
terraform {
backend "s3" {
bucket = "myBucket"
region = "eu-central-1"
key = "path/to/terraform.tfstate"
encrypt = true
}
}
provider "aws" {
profile = "config2"
region = "eu-central-1"
}
但是当我尝试terraform init
时,它说没有找到任何有效的凭证:
初始化后端...
错误:找不到适用于AWS Provider的有效凭证来源。 有关更多信息,请参见https://terraform.io/docs/providers/aws/index.html 为AWS Provider提供凭证
作为解决方法,我在凭证文件中将config2
更改为default
,并从profile
块中删除了provider
字段,因此它可以工作,但我确实需要使用类似于第一种方法的方法。我在这里想念什么?
答案 0 :(得分:1)
不幸的是,您还需要向后端配置以及AWS提供程序配置提供IAM凭证配置。
S3后端配置在此处采用与AWS提供程序相同的参数,因此您可以像这样指定后端配置:
terraform {
backend "s3" {
bucket = "myBucket"
region = "eu-central-1"
key = "path/to/terraform.tfstate"
encrypt = true
profile = "config2"
}
}
provider "aws" {
profile = "config2"
region = "eu-central-1"
}
背后有一些原因需要单独进行。原因之一是您可以为S3存储桶以及将通过AWS提供程序管理的资源独立使用不同的IAM凭证,账户和区域。即使您要在另一个云提供商中创建资源或根本不使用云提供商,您也可能希望将S3用作后端,Terraform可以在很多无法存储Terraform状态的地方管理资源。不过,主要原因是后端实际上是由核心Terraform二进制文件而不是提供程序二进制文件管理的,并且后端初始化发生在几乎其他任何事情之前。