Terraform не удалось найти серверное хранилище azurerm во время инициализации

#terraform #azure-rm

Вопрос:

Я создал учетную запись хранилища Azure для использования в качестве внутреннего хранилища состояний для Terraform, и я смог записать ее из конвейера Azure DevOps, в котором выполняются команды Terraform. Я могу увидеть контейнер в учетной записи хранения и подтвердить, что в нем есть содержимое состояния из выполнения конвейера с тем же ключом. Однако, когда я пытаюсь запустить Terraform «вручную», используя тот же серверный магазин, я получаю сообщение об ошибке, что он не может найти этот контейнер:

 $ terraform init -backend-config="storage_account_name=<redacted>" -backend-config="container_name=auto-api-tfstate" -backend-config="access_key=<redacted>" -backend-config="key=dev-internal2/dev-internal2.tfstate:us"
Initializing modules...

Initializing the backend...
Backend configuration changed!

Terraform has detected that the configuration specified for the backend
has changed. Terraform will now check for existing state in the backends.



Error: Error inspecting states in the "azurerm" backend:
    storage: service returned error: StatusCode=404, ErrorCode=ContainerNotFound, ErrorMessage=The specified container does not exist.
RequestId:89a9b361-a01e-00b1-0fb4-ba5d51000000
Time:2021-10-06T13:18:41.2460433Z, RequestInitiated=Wed, 06 Oct 2021 13:18:40 GMT, RequestId=89a9b361-a01e-00b1-0fb4-ba5d51000000, API Version=2016-05-31, QueryParameterName=, QueryParameterValue=

Prior to changing backends, Terraform inspects the source and destination
states to determine what kind of migration steps need to be taken, if any.
Terraform failed to load the states. The data in both the source and the
destination remain unmodified. Please resolve the above error and try again.
 

Мой main.tf файл имеет просто:

 terraform {
    backend "azurerm" {}
}
 

Как уже упоминалось, эта же terraform init команда работала при вызове в скрипте Bash в конвейере ADO, поэтому я не уверен, в чем может быть проблема. Любые предложения по отладке этого приветствуются.

Комментарии:

1. Как насчет удостоверения, которое вы используете для аутентификации в azure из конвейера или вручную? Имеет ли этот идентификатор правильные разрешения, такие как средство чтения больших двоичных объектов для хранения данных? Вы создали учетную запись хранения и контейнер вручную или об этом позаботился конвейер? Какую версию terraform вы используете?

2. @KedMardemootoo: — Я создал учетную запись хранилища Azure и контейнер вручную, поэтому это не проблема со временем (особенно учитывая, что использование Terraform в конвейере позволило записать его состояние в контейнер). — Удостоверение-это ключ доступа из блейда портала Azure для учетной записи хранения. И синтаксис «terraform init», который я использую вручную, такой же, как и при запуске конвейера.

3. @KedMardemootoo, также версия Terraform v0.12.6 (по общему признанию, старая, но совместимая с поставщиком с открытым исходным кодом, который мы используем).

Ответ №1:

Раскрыл проблему … в папке .terraform была информация о состоянии, которая противоречила новому бэкэнду. Как только я это убрал, команда «terraform init» сработала, как и ожидалось.