Использование поля профиля Terraform в провайдере AWS - PullRequest
0 голосов
/ 07 июля 2019

У меня есть $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 не найдены действительные источники учетных данных. Пожалуйста, смотрите https://terraform.io/docs/providers/aws/index.html для получения дополнительной информации о предоставление учетных данных для провайдера AWS

В качестве обходного пути я изменил config2 на default в своем файле учетных данных и удалил поле profile из блока provider, чтобы оно работало, но мне действительно нужно использовать что-то вроде первого подхода. Что мне здесь не хватает?

1 Ответ

1 голос
/ 07 июля 2019

К сожалению, вам также необходимо предоставить конфигурацию учетных данных 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"
}

Есть несколько причин, по которым это нужно делать отдельно.Одной из причин этого может быть то, что вы можете независимо использовать разные учетные данные IAM, учетные записи и регионы для корзины S3 и ресурсов, которыми вы будете управлять с поставщиком AWS.Возможно, вы также захотите использовать S3 в качестве бэкэнда, даже если вы создаете ресурсы в другом облачном провайдере или вообще не используете облачного провайдера, Terraform может управлять ресурсами во многих местах, где нет способа сохранить состояние Terraform.Однако основная причина заключается в том, что бэкэндами фактически управляет основной двоичный файл Terraform, а не двоичные файлы провайдера, и инициализация бэкэнда происходит раньше, чем что-либо еще.

...