terraform - AWS 提供商中的 Terraform 配置文件字段使用情况
问题描述
我有一个$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 的有效凭证源。有关为 AWS 提供商提供凭证的更多信息,请参阅https://terraform.io/docs/providers/aws/index.html
作为解决方法,我在凭据文件中进行了更改,并从块中删除了该config2
字段,因此它可以工作,但我确实需要使用类似于第一种方法的方法。我在这里想念什么?default
profile
provider
解决方案
不幸的是,您还需要将 IAM 凭证配置提供给后端配置以及您的 AWS 提供商配置。
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 二进制文件而不是提供程序二进制文件管理的,并且后端初始化发生在几乎其他任何事情之前。
推荐阅读
- gltf - THREE.js glTF 加载器(二进制)不显示顶点颜色?
- mapping - 从数据框中按列过滤 Folium MarkerCluster
- python-3.x - swig.exe 未找到:尝试安装 pylinkgrammar 0.2.14 时出错
- python - 无法在 django admin 中添加新用户或组
- ios - PromiseKit 无法使用“(数据)”类型的参数列表调用“完成”
- javascript - 渲染后反应更新值
- c++ - 将 LPCSTR 转换为 std::wstring
- php - Laravel 写入控制台而不影响 PHPUnit
- laravel - Laravel 用户登录继续使用相同的购物车
- python - 如何检查我在 Python 中连接的 Postgres 数据库中是否存在列?