terraform - 无法将 S3 后端与 Terraform 一起使用 - 缺少凭据

标签 terraform terraform-provider-aws

我有一个 Terraform 样本中最普通的:

#  Configure AWS provider
provider "aws" {
    region     = "us-east-1"
    access_key = "xxxxxxxxx"
    secret_key = "yyyyyyyyyyy"
}

#  Terraform configuration
terraform {
  backend "s3" {
    bucket = "terraform.example.com"
    key    = "85/182/terraform.tfstate"
    region = "us-east-1"
  }
}

当我运行 terraform init 时,我收到以下(跟踪)响应:
2018/08/14 14:19:13 [INFO] Terraform version: 0.11.7  41e50bd32a8825a84535e353c3674af8ce799161
2018/08/14 14:19:13 [INFO] Go runtime version: go1.10.1
2018/08/14 14:19:13 [INFO] CLI args: []string{"C:\\cygwin64\\usr\\local\\bin\\terraform.exe", "init"}
2018/08/14 14:19:13 [DEBUG] Attempting to open CLI config file: C:\Users\judall\AppData\Roaming\terraform.rc
2018/08/14 14:19:13 [DEBUG] File doesn't exist, but doesn't need to. Ignoring.
2018/08/14 14:19:13 [INFO] CLI command args: []string{"init"}
2018/08/14 14:19:13 [DEBUG] command: loading backend config file: C:\cygwin64\home\judall\t2

2018/08/14 14:19:13 [DEBUG] command: no data state file found for backend config
Initializing the backend...
2018/08/14 14:19:13 [DEBUG] New state was assigned lineage "5113646b-318f-9612-5057-bc4803292c3a"
2018/08/14 14:19:13 [INFO] Building AWS region structure
2018/08/14 14:19:13 [INFO] Building AWS auth structure
2018/08/14 14:19:13 [INFO] Setting AWS metadata API timeout to 100ms
2018/08/14 14:19:13 [INFO] Ignoring AWS metadata API endpoint at default location as it doesn't return any instance-id

2018/08/14 14:19:13 [DEBUG] plugin: waiting for all plugin processes to complete...
Error configuring the backend "s3": No valid credential sources found for AWS Provider.
  Please see https://terraform.io/docs/providers/aws/index.html for more information on
  providing credentials for the AWS Provider

Please update the configuration in your Terraform files to fix this error
then run this command again.

我已经在谷歌上搜索了几个小时。我尝试使用 'profile' 属性 - 它产生的跟踪日志略有不同,但最终结果相同。我试过设置 AWS_ 环境变量 - 结果相同。

我正在运行 terraform 版本 0.11.7。有什么建议?

最佳答案

provider配置独立于您的 backend配置。

您在 provider 中配置的凭据块,用于创建您的 AWS 相关资源。要访问 S3 存储桶作为远程状态的存储,您还需要提供凭据。这可以与您的 provider 的配置相同或者可以完全不同(出于安全原因,仅对此特定存储桶具有权限)。

您可以通过在 backend 中添加凭据来修复它。堵塞:

#  Terraform configuration
terraform {
  backend "s3" {
    bucket     = "terraform.example.com"
    key        = "85/182/terraform.tfstate"
    region     = "us-east-1"
    access_key = "xxxxxxxxx"
    secret_key = "yyyyyyyyyyy"
  }
}

或者,您可以在您的主目录 ( Docs ) 中创建一个 AWS(默认)配置文件,并在您的 terraform 代码中删除您的凭证(首选选项,当您将配置存储在版本控制系统中时)。

关于terraform - 无法将 S3 后端与 Terraform 一起使用 - 缺少凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51847646/

相关文章:

amazon-web-services - 如何使用 Terraform 和 cloud-init 安全地允许访问 AWS Secrets Manager

amazon-web-services - 与 aws 提供商区域不同的 terraform aws_s3_bucket 区域在同一提供商区域中创建

azure - 使用 Terraform 通过 Microsoft.Storage.BlobCreated 事件创建 Azure 事件订阅筛选

amazon-web-services - 针对匹配模式的 aws api 网关 header 验证

terraform - 如何在 terraform 中回滚到以前的状态

azure - 如果使用 count 或 for_each 创建资源,如何在 terraform 中使用 dependent_on

amazon-web-services - 通过 Terraform 在目标组中添加 ASG 实例

amazon-s3 - 在本地使用 terraform 从 S3 下载文件

azure - 如何在terraform中编写if/else语句来部署特定资源

amazon-web-services - 执行任意二进制文件时不允许操作