Настройки Terraform - удаленное состояние s3 - ошибка проверки InvalidParameter
Среда
Terraform v0.12.24 + provider.aws v2.61.0
Бег в альпийском контейнере.
Задний план
У меня есть базовый скрипт terraform, который работает нормально, но теперь я расширяю его и пытаюсь настроить удаленное (S3) состояние.
terraform.tf:
terraform {
backend "s3" {
bucket = "labs"
key = "com/company/labs"
region = "eu-west-2"
dynamodb_table = "labs-tf-locks"
encrypt = true
}
}
Ведро существует, и таблица тоже. Я создал их оба с помощью terraform и подтвердил через консоль.
Проблема
Когда я бегу terraform init
Я получил:
Error refreshing state: InvalidParameter: 2 validation error(s) found.
- minimum field size of 1, GetObjectInput.Bucket.
- minimum field size of 1, GetObjectInput.Key.
Что я пробовал
terraform fmt
не сообщает об ошибках и успешно переформатирует мой terraform.tf
файл. Я попытался переместить строфу в свойmain.tf
тоже на всякий случай terraform.tf
файл по какой-то причине игнорировался. Я получил точно такие же результаты.
Я также пробовал запустить это без контейнера alpine, из экземпляра ubuntu ec2 в aws, но получаю те же результаты.
Изначально в ключе было имя файла terraform. Я удалил это (спасибо), но это не помогло решить проблему.
Кроме того, я только что попытался запустить это в более старом образе: hashicorp/terraform:0.12.17
но получаю аналогичную ошибку:
Error: Failed to get existing workspaces: InvalidParameter: 1 validation error(s) found.
- minimum field size of 1, ListObjectsInput.Bucket.
Я предполагаю, что сделал здесь что-то банально глупое, но не могу понять, что это такое.
2 ответа
Решено!!!
Я не понимаю в чем проблема, но теперь у меня есть рабочее решение. Я удалил.terraform
каталог и переименовать terraform init
. Для меня это нормально, потому что у меня нет существующего состояния. Понимание пришло из чтения ошибки из версии 0.12.17 terraform, которая жаловалась на невозможность чтения рабочей области.
Error: Failed to get existing workspaces: InvalidParameter: 1 validation error(s) found.
- minimum field size of 1, ListObjectsInput.Bucket.
Изначально это привело меня к мысли, что в более ранней версии tf возникла проблема с чтением конфигурации новой версии. Итак, я сдул.terraform
и он работал со старым tf, поэтому я сделал это снова, и он работал и с новым tf. Очевидно, что-то случилось в хранилище терраформа. Не знаю как и почему. Но у меня это работает, так что...
В контексте Gitlab Pipelines:
У меня также было похожее сообщение об ошибке, и я понял, что имя сегмента указано в переменных, но оно было помечено как защищенное, и я запускал конвейер на незащищенной ветке. В этом случае gitlab не предоставляет переменные как переменные среды, и это не удалось.
Таким образом, вы можете проверить, доступно ли имя сегмента для конвейера или нет.