Устранение распространенных проблем при использовании Terraform в Azure

В этой статье перечислены распространенные проблемы и возможные решения при использовании Terraform в Azure.

Если возникла проблема, связанная с Terraform, воспользуйтесь одним из каналов поддержки сообщества HashiCorp.

Каналы поддержки HashiCorp, связанные с Terraform

Не удалось просмотреть состояние регистрации поставщика

Сообщение об ошибке

Ошибка. Не удается перечислить состояние регистрации поставщика, возможно, это связано с недопустимыми учетными данными или субъект-служба не имеет разрешения на использование API Resource Manager, ошибки Azure: ресурсы. ProvidersClient#List: сбой ответа на запрос: StatusCode=403 - Исходная ошибка: autorest/azure: служба вернула ошибку. Status=403 Code="AuthorizationFailed" Message="Клиент "000000000-0000-0000-00000-000000000000000" с идентификатором объекта "00000000000-0000-0000-0000-0000-0000-00000-0000-0000-0000-00000-0000-0000-0000-0000-0000-0000-0000". У параметра "0000000000000" нет авторизации для выполнения действия "Microsoft.Resources/subscriptions/providerss/read" более область "/subscriptions/000000000-0000-0000-00000000000000000" или область является недопустимым. If access was recently granted, please refresh your credentials."

Пояснения. Если вы выполняете команды Terraform из Cloud Shell и определили некоторые переменные среды Terraform или Azure, иногда могут отображаться конфликты. Переменные среды и значения Azure, которые они представляют, приведены в следующей таблице:

Переменная среды Значение Azure
ARM_SUBSCRIPTION_ID Идентификатор подписки Azure
ARM_TENANT_ID идентификатор арендатора учетной записи Майкрософт.
ARM_CLIENT_ID Идентификатор приложения субъекта-службы Azure
ARM_CLIENT_SECRET Пароль субъекта-службы Azure

Причина. На момент написания этой статьи скрипт Terraform, который выполняется в Cloud Shell, перезаписывает переменные среды ARM_SUBSCRIPTION_ID и ARM_TENANT_ID, используя значения из текущей подписки Azure. В результате, если у субъекта-службы, на который ссылаются переменные среды, нет прав на текущую подписку Azure, любые операции Terraform будут завершаться ошибкой.

Ошибка при получении блокировки состояния

Сообщение об ошибке

Ошибка: ошибка при получении блокировки состояния; Сообщение об ошибке: произошли 2 ошибки:
* большой двоичный объект состояния уже заблокирован
* метаданные BLOB-объектов "terraformlockid" были пустыми
Terraform получает блокировку состояния для защиты состояния от записи несколькими пользователями одновременно. Устраните указанную выше проблему и повторите попытку. Для большинства команд можно отключить блокировку с флагом -lock=false, но это не рекомендуется.

Предпосылки. Если вы выполняете команды Terraform для файла состояния Terraform и это единственное отображаемое сообщение, ошибка может возникнуть по описанным ниже причинам. Применимо к локальным и удаленным файлам состояния.

Причина. Существуют две возможные причины такой ошибки. Первая заключается в том, что команда Terraform уже выполняется для файла состояния и блокирует файл, чтобы не допустить ошибок. Вторая возможная причина — произошло прерывание соединения между файлом состояния и CLI при выполнении команд. Такое прерывание чаще всего возникает при использовании удаленных файлов состояния.

Решение. Сначала убедитесь, что вы уже не выполняете какие-либо команды для файла состояния. Если вы работаете с локальным файлом состояния, проверьте, есть ли у вас терминалы, выполняющие какие-либо команды. Кроме того, проверьте конвейеры развертывания, чтобы определить, используют ли какие-нибудь процессы файл состояния. Если это не решит проблему, возможно, ошибка вызвана второй причиной. Для удаленного файла состояния, хранящегося в контейнере учетной записи службы хранилища Azure, можно найти файл и нажать кнопку Прервать аренду.

Screenshot that shows the Azure Storage container Break lease button.

Если вы используете другие серверные конечные точки для хранения файла состояния, см. документацию по HashiCorp.

Ошибки VPN

Сведения об устранении ошибок VPN см. в статье Устранение неполадок при гибридном VPN-подключении.