【发布时间】:2021-09-04 23:56:54
【问题描述】:
场景:我正在尝试读取存储在 AWS S3 存储桶中的远程 terraform 状态。我已经使用 aws configure cli 配置了 aws 凭证,并使用了我能够读取 AWS S3 存储桶和 tf 状态对象的凭证。
terraform 初始化工作正常。但是当我运行 terraform plan 时,出现以下错误:
Error: error configuring S3 Backend: no valid credential sources for S3 Backend found.
│
│ Please see https://www.terraform.io/docs/language/settings/backends/s3.html
│ for more information about providing credentials.
│
│ Error: NoCredentialProviders: no valid providers in chain. Deprecated.
│ For verbose messaging see aws.Config.CredentialsChainVerboseErrors
│
provider "aws" {
region = "ap-southeast-1"
profile = "dev-token"
shared_credentials_file = "~/.aws/credentials"
}
data "terraform_remote_state" "ekscluster_state" {
backend = "s3"
config = {
bucket = "bucket"
region = "ap-southeast-1"
key = "remote.tfstate"
}
}
data "aws_eks_cluster" "db_subnet_ids" {
name = data.terraform_remote_state.ekscluster_state.outputs.db_subnet_ids
}
resource "aws_db_subnet_group" "aurora_subnet_group" {
name = "name"
subnet_ids = data.aws_eks_cluster.db_subnet_ids
tags = {
Name = format("%s", "name")
}
}
远程状态包含所有内容。注意:在 S3 上存储状态可以使用相同的凭据正常工作。
期待听到一些提示。
【问题讨论】:
-
您是否考虑过使用
aws_subnet_idsdata source 而不是使用 Terraform 的远程状态?在可能的情况下使用适当的提供商特定数据源几乎总是更好的解决方案,并且会更容易工作。 -
如果您确实想使用远程状态数据源,那么您还需要将其配置与远程状态后端的配置保持一致,因为它们是单独处理的。您尚未显示远程状态后端配置,但如果它与提供程序配置匹配,您还需要将
profile键添加到config块。
标签: amazon-s3 terraform terraform-provider-aws