Я настраиваю серверную часть S3 через terraform для AWS.
terraform {
backend "s3" {}
}
При предоставлении значений для имени корзины (серверной части S3), ключа и региона при запуске команды «terraform init» возникает следующая ошибка
"Ошибка настройки серверной части «s3»: для поставщика AWS не найдены действительные источники учетных данных. Дополнительные сведения о предоставлении учетных данных для поставщика AWS см. в статье https://terraform.io/docs/providers/aws/index.html. Пожалуйста, обновите конфигурацию в ваших файлах Terraform, чтобы исправить эту ошибку. затем снова запустите эту команду."
Я объявил доступ и секретные ключи как переменные в provider.tf. При запуске команды «terraform init» не запрашивался ни ключ доступа, ни секретный ключ.
Как решить эту проблему?
Пожалуйста, покажите соответствующий код для вашего провайдера.
Поставщик кода моего провайдера "aws" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" region = "${var.region}" } terraform { backend "s3" {} }





При запуске terraform init вы должны добавить параметры -backend-config для своих учетных данных (ключи aws). Итак, ваша команда должна выглядеть так:
terraform init -backend-config = "access_key=<your access key>" -backend-config = "secret_key=<your secret key>"
У меня есть блок провайдера в моем коде. Пожалуйста, найдите код ниже provider "aws" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" region = "${var.region}" } terraform { backend "s3" {} }
Извините за указание в неправильном направлении. Я думаю, что знаю, в чем проблема сейчас, и соответствующим образом отредактировал свой ответ.
Спасибо за помощь. terraform init теперь работает нормально. При выполнении команды terraform plan выдает новую ошибку «Не удалось загрузить серверную часть: ошибка настройки серверной части «s3»: недопустимый регион:» должен ли я также указать -backend-config при выполнении команды плана terraform?
Хороший! Нет, backend-config абсолютно необходим только во время terraform init. Что касается новой ошибки: убедитесь, что у вас есть region=<region> в вашем блоке backend "s3" {}.
Я пытаюсь выполнить команду terraform plan -var-file и получаю сообщение об ошибке. Какие детали конфигурации необходимо добавить в приведенный здесь файл? Я создал образец файла .tfvars с добавленными к нему ключами доступа и секретными ключами. Это правильно или нужно что-то еще?
Пожалуйста, предоставьте больше информации. Какую именно ошибку вы получаете? Обычно, если какие-либо переменные отсутствуют, terraform явно запрашивает значение этих переменных во время terraform plan и terraform apply. Вы говорите о переменных, которые вы определили как variable "<variable_name>" {}?
просто выполнив команду план терраформирования, я получаю следующую ошибку: «Ошибка: состояние загрузки ошибки: InvalidParameter: найдена 1 ошибка проверки. - минимальный размер поля 1, GetObjectInput.Key». Следовательно, я попытался использовать команду план терраформирования -var-file=. Но я не уверен, какие конфигурации должны быть упомянуты в этом файле.
Я не думаю, что это должно что-то делать с вашим var-файлом. Ошибка больше похожа на то, что вам не хватает атрибута key внутри вашего внутреннего блока (который должен выглядеть примерно как terraform { backend "s3" { bucket = "<name of your existing backend bucket>" key = "terraform.tfstate" region = "<region>" } } ). Если это не решит вашу проблему, я думаю, что при необходимости лучше задать отдельный вопрос здесь, в StackOverflow.
Это был точный ответ, который я искал. Спасибо.
Не добавляйте переменные для секретов. Это действительно очень плохая практика и ненужная.
Terraform подберет ваш профиль AWS по умолчанию или будет использовать любой профиль AWS, который вы задали для AWS_PROFILE. Если это в AWS, вы должны использовать профиль экземпляра. Роли тоже можно делать.
Если вы жестко запрограммируете профиль в свой tf-код, тогда у вас должны быть одинаковые имена профилей, где бы вы ни хотели запускать этот скрипт, и изменять его для каждой другой учетной записи, с которой он работает.
Не делайте - делайте всю эту командную строку, если вам не нравятся сценарии-оболочки или ввод текста. Сделайте — добавьте себе remote_state.tf, который выглядит как
terraform {
backend "s3" {
bucket = "WHAT-YOU-CALLED-YOUR-STATEBUCKET"
key = "mykey/terraform.tfstate"
region = "eu-west-1"
}
}
теперь, когда вы запускаете терраформирование:
Initializing the backend...
Successfully configured the backend "s3"! Terraform will automatically use this backend unless the backend configuration changes.
Значения в провайдере не относятся к разрешениям для remote_state и даже могут быть разными учетными записями AWS (или даже другим облачным провайдером).
У меня также была такая же проблема, способ самый простой и безопасный решить эту проблему заключается в настройке профиля AWS. Даже если вы правильно упомянули AWS_PROFILE в своем проекте, вы должны упомянуть об этом снова в вашем backend.tf.
моя проблема заключалась в том, что я уже настроил поставщика AWS в проекте, как показано ниже, и он работает правильно.
provider "aws" {
region = "${var.AWS_REGION}"
profile = "${var.AWS_PROFILE}"
}
но в конце проекта я пытался настроить файл конфигурации бэкэнда S3. поэтому я запустил команду terraform init и получил такое же сообщение об ошибке.
Error: error configuring S3 Backend: no valid credential sources for S3 Backend found.
Примечание этого недостаточно для конфигурации серверной части terraform. вы также должны упомянуть AWS_ПРОФИЛЬ в файле бэкэнда.
На данный момент я использую последнюю версию terraform. это v0.13.5.
пожалуйста, смотрите provider.tf
provider "aws" {
region = "${var.AWS_REGION}"
profile = "${var.AWS_PROFILE}" # lets say profile is my-profile
}
например, ваш AWS_PROFILE — мой профайл
тогда ваш backend.tf должен быть таким, как показано ниже.
terraform {
backend "s3" {
bucket = "my-terraform--bucket"
encrypt = true
key = "state.tfstate"
region = "ap-southeast-2"
profile = "my-profile" # you have to give the profile name here. not the variable("${var.AWS_PROFILE}")
}
}
затем запустите terraform init
Большое спасибо, это был правильный ответ для меня
Вот это правильный ответ, большое спасибо!
Я столкнулся с аналогичной проблемой, когда переименовал профиль в файле учетных данных AWS. Удаление папки .terraform и повторный запуск terraform init решили проблему.
В моем случае я настроил aws cli с правильными ключ доступа и Секретный ключ. Это сработало! Попытался указать провайдера с ключ доступа и Секретный ключ, но не сработало
Просто из любопытства, сработает ли это, если вы запустите «aws configure» с теми же учетными данными перед запуском Terraform? Кроме того, вы работаете в Windows или Linux/OSX? Я видел некоторые примеры, когда Terraform под Windows игнорирует настройку учетных данных для Git. Возможно, здесь происходит что-то подобное.