#amazon-web-services #terraform #localstack
#amazon-веб-сервисы #terraform #localstack
Вопрос:
У меня возникли проблемы с подключением поставщика terraform AWS к localstack. Что бы я ни пытался, я просто получаю ту же ошибку:
Error: error configuring Terraform AWS Provider: error validating provider credentials: error calling sts:GetCallerIdentity: InvalidClientTokenId: The security token included in the request is invalid.
status code: 403, request id: dc96c65d-84a7-4e64-947d-833195464538
Эта ошибка предполагает, что поставщик устанавливает контакт с HTTP-сервером, но учетные данные отклоняются (согласно любому 403). Вы можете себе представить, что проблема в том, что я ввожу неправильные учетные данные (через переменные среды).
Однако имя хоста local-aws
существует в моем /etc/hosts
файле, но blahblahblah
не существует. Если я поменяю конечную точку на http://blahblahblah:4566
точку, я все равно получу тот же 403. Поэтому я думаю, что проблема в том, что провайдер не использует мою локальную конечную точку. Я не могу понять, почему.
resource "aws_secretsmanager_secret_version" "foo" {
secret_id = aws_secretsmanager_secret.foo.id
secret_string = "bar"
}
resource "aws_secretsmanager_secret" "foo" {
name = "rabbitmq_battery_emulator"
}
provider "aws" {
region = "eu-west-2"
endpoints {
secretsmanager = "http://local-aws:4566"
}
}
Ответ №1:
Сначала убедитесь, что localstack настроен для запуска sts
. В docker-compose это была просто переменная среды SERVICES:
services:
local-aws:
image: localstack/localstack
environment:
EDGE_PORT: 4566
SERVICES: secretsmanager, sts
Затем убедитесь, что вы установили sts
конечную точку, а также требуемую службу:
provider "aws" {
region = "eu-west-2"
endpoints {
sts = "http://local-aws:4566"
secretsmanager = "http://local-aws:4566"
}
}
Комментарии:
1. Связь, извините, я опаздываю на вечеринку. У меня были настроены sts и secretsmanager, как вы упомянули выше, но все равно появилось то же сообщение об ошибке.
2. чтобы сообщить другим людям, если вы используете в terraform этот источник данных:
data "aws_caller_identity" "current" {}
у вас, вероятно, будет та же проблема — он также использует sts thingy. Итак, это решение здесь — ваше решение.
Ответ №2:
В дополнение к конфигурации СЛУЖБ и конечной точки sts, упомянутой @philip-couling, мне также пришлось удалить terraform
блок из моего main.tf:
#terraform {
# backend "s3" {
# bucket = "valid-bucket"
# key = "terraform/state/account/terraform.tfstate"
# region = "eu-west-1"
# }
# required_providers {
# local = {
# version = "~> 2.1"
# }
# }
#}