Устранение распространенных проблем при использовании Terraform в Azure
В этой статье перечислены распространенные проблемы и возможные решения при использовании Terraform в Azure.
Если возникла проблема, связанная с Terraform, воспользуйтесь одним из каналов поддержки сообщества HashiCorp.
Каналы поддержки HashiCorp, связанные с Terraform
- Вопросы, варианты использования и полезные шаблоны: раздел Terraform на портале сообщества HashiCorp
- Вопросы, связанные с поставщиком: раздел "Поставщики Terraform" на портале сообщества HashiCorp
Не удалось просмотреть состояние регистрации поставщика
Сообщение об ошибке
Ошибка. Не удается перечислить состояние регистрации поставщика, возможно, это связано с недопустимыми учетными данными или субъект-служба не имеет разрешения на использование 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, можно найти файл и нажать кнопку Прервать аренду.
Если вы используете другие серверные конечные точки для хранения файла состояния, см. документацию по HashiCorp.
Ошибки VPN
Сведения об устранении ошибок VPN см. в статье Устранение неполадок при гибридном VPN-подключении.