Terraform. Разные AWS профили для S3 бэкенда и окружения

Автор: Admin | 17.11.2018

Использование разных AWS профилей для бэкенда и деплоя

Решение ошибки с не валидными кредами Error configuring the backend "s3": No valid credential sources found for AWS Provider при инициализации бэкенда на S3 с использованием AWS профилей

Дано

Провайдер настроен на использование профиля environment_profile под текущей системной учетной записью:

provider "aws" {
  region     = "us-east-1"
  profile    = "environment_profile"
}

Состояние Terraform'а хранится в S3 бакете на отдельном аккаунте и использует его профиль:

terraform {
  backend "s3" {
    bucket = "terraform"
    key    = "states/terraform.tfstate"
    region = "us-east-1"
    profile = "remote_state_profile"
  }
}

Креды профилей находятся в файле ~/.aws/credentials:

[remote_state_profile]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE1
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY1

[environment_profile]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE2
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY2

Проблема

При попытке инициализировать бэкенд вылетает ошибка, что креды не найдены или не валидные:

terraform init

Error loading previously configured backend: 
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.
If you'd like to update the configuration interactively without storing
the values in your configuration, run "terraform init".

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

Решение

Чтобы начать пользоваться AWS профилями в Terraform'е, достаточно добавить переменную окружения для инициализации бэкенда:

export AWS_PROFILE=remote_state_profile
terraform init

И затем использовать Terraform по назначению с профилем окружения, который корректно подхватывается из конфига провайдера:

terraform plan

Использовалась последняя версия Terraform на момент написания:

terraform version
Terraform v0.11.10

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *