Terraform AWS не имеет доступа к localstack

#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"
#    }
#  }
#}