Использование разных 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