Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule wymieniono typowe problemy i możliwe rozwiązania podczas korzystania z narzędzia Terraform w Azure.
Jeśli wystąpi problem specyficzny dla programu Terraform, użyj jednego z kanałów pomocy technicznej społeczności firmy HashiCorp.
Kanały pomocy technicznej specyficzne dla programu Terraform firmy HashiCorp
- Pytania, przypadki użycia i przydatne wzorce: sekcja narzędzia Terraform w portalu społeczności hashiCorp
- Pytania, przypadki użycia i przydatne wzorce: sekcja narzędzia Terraform w portalu społeczności hashiCorp
Nie można wyświetlić listy stanu rejestracji dostawcy
Komunikat o błędzie:
Błąd: Nie można wyświetlić listy stanu rejestracji dostawcy. Ten błąd może wystąpić z powodu nieprawidłowych poświadczeń lub dlatego, że jednostka usługi nie ma uprawnień do korzystania z interfejsu API Resource Manager. Błąd platformy Azure: resources.ProvidersClient#List: Niepowodzenie podczas odpowiadania na żądanie: StatusCode=403 -- Oryginalny błąd: autorest/azure: Usługa zwróciła błąd. Status=403 Code="AuthorizationFailed" Message="Klient '00000000-0000-0000-0000-000000000000' o identyfikatorze obiektu '00000000-0000-0000-0000-000000000000' nie ma uprawnień do wykonania akcji 'Microsoft.Resources/subscriptions/providers/read' w zakresie '/subscriptions/00000000-0000-0000-0000-000000000000' lub zakres jest nieprawidłowy. Jeśli dostępu udzielono niedawno, odśwież swoje poświadczenia”.
Tło: Jeśli uruchamiasz polecenia narzędzia Terraform w usłudze Cloud Shell i definiujesz określone zmienne środowiskowe Terraform/Azure, mogą wystąpić konflikty. W poniższej tabeli wymieniono zmienne środowiskowe i wartości Azure, które reprezentują:
| Zmienna środowiskowa | Wartość Azure |
|---|---|
| ARM_SUBSCRIPTION_ID | Identyfikator subskrypcji Azure |
| ARM_TENANT_ID | identyfikator dzierżawy konta Microsoft |
| ARM_CLIENT_ID | identyfikator aplikacji jednostki usługi Azure |
| ARM_CLIENT_SECRET | Hasło nazwy głównej usługi Azure |
Przyczyna: W chwili pisania tego tekstu skrypt Terraform uruchamiany w Cloud Shell zastępuje zmienne środowiskowe ARM_SUBSCRIPTION_ID i ARM_TENANT_ID, używając wartości z bieżącej subskrypcji platformy Azure. W związku z tym, jeśli jednostka usługi, do której odwołują się zmienne środowiskowe, nie ma uprawnień do bieżącej subskrypcji platformy Azure, operacje Terraform kończą się niepowodzeniem.
Błąd podczas uzyskiwania blokady stanu
Komunikat o błędzie:
Błąd: Błąd podczas uzyskiwania blokady stanu; Komunikat o błędzie: wystąpiły 2 błędy:
* Stanowy obiekt blob jest już zablokowany
* Metadane obiektu blob "terraformlockid" były puste
Terraform zakłada blokadę stanu, aby zabezpieczyć go przed jednoczesnym zapisem przez wielu użytkowników. Rozwiąż powyższy problem i spróbuj ponownie. W przypadku większości poleceń można wyłączyć blokowanie za pomocą flagi "-lock=false", ale nie jest to zalecane.
Kontekst: Jeśli uruchamiasz polecenia Terraform na pliku stanu Terraform i ten błąd jest jedynym wyświetlanym komunikatem, mogą występować następujące przyczyny. Ten błąd dotyczy plików stanu lokalnego i zdalnego.
Przyczyna: Istnieją dwie potencjalne przyczyny tego błędu. Pierwszą przyczyną jest to, że polecenie Terraform jest już wykonywane na pliku stanu i nałożyło na niego blokadę, dzięki czemu nic nie ulegnie uszkodzeniu. Drugą potencjalną przyczyną jest to, że wystąpiła przerwa w połączeniu między plikiem stanu a interfejsem wiersza polecenia, gdy polecenia były uruchomione. Ta przerwa występuje najczęściej w przypadku korzystania z plików stanu zdalnego.
Rozwiązanie: Najpierw upewnij się, że nie uruchomiono jeszcze żadnych poleceń względem pliku stanu. Jeśli pracujesz z lokalnym plikiem stanu, sprawdź, czy w jakichś terminalach są uruchomione jakieś polecenia. Możesz też sprawdzić potoki wdrażania, aby sprawdzić, czy coś uruchomionego może używać pliku stanu. Jeśli ten warunek nie rozwiąże problemu, możliwe, że druga przyczyna wyzwoliła błąd. W przypadku pliku stanu zdalnego przechowywanego w kontenerze konta Azure Storage można zlokalizować plik i użyć przycisku Przerwij dzierżawę.
Jeśli używasz innych backendów do przechowywania pliku stanu, informacje i zalecenia znajdziesz w dokumentacji HashiCorp.
Błędy sieci VPN
Aby uzyskać informacje na temat rozwiązywania problemów z błędami sieci VPN, zobacz artykuł Rozwiązywanie problemów z hybrydowym połączeniem sieci VPN.
Terraform planuje usunięcie i ponowne utworzenie konta magazynu danych
Terraform może planować usunięcie i ponowne utworzenie konta usługi Azure Storage po wprowadzeniu przez Azure zmian w koncie magazynu poza Terraformem. To zachowanie może wystąpić podczas obsługiwanej konwersji nadmiarowości konta usługi Azure Storage, w przypadku której account_replication_type przekracza granicę między zestawem niestrefowym (LRS, GRS, RA-GRS) a zestawem strefowym (ZRS, GZRS, RA-GZRS).
Przed zastosowaniem planu zapoznaj się z proponowanymi zmianami i potwierdź, dlaczego Terraform uznaje zastąpienie konta magazynowego za konieczne. Ponowne utworzenie konta magazynu może spowodować przestój aplikacji lub utratę danych.
Aby ograniczyć to ryzyko:
- Wyłącz automatyczne zatwierdzanie wdrożeń, które zarządzają kontami magazynowymi, i należy sprawdzać każde
terraform plan. - Skonfiguruj
prevent_destroy = truew blokulifecyclezasobu konta magazynu. - Przed rozpoczęciem konwersji tymczasowo dodaj
account_replication_typedoignore_changes. - Po konwersji uruchom polecenie
terraform apply -refresh-only, aby zaktualizować stan programu Terraform, a następnie zaktualizuj konfigurację programu Terraform w celu dopasowania do wdrożonego konta magazynu. - Usuń
ignore_changestylko po uruchomieniuterraform plani potwierdzeniu, że nie zgłasza żadnych nieoczekiwanych zmian.
Aby uzyskać szczegółowe wskazówki dotyczące konwersji, zobacz Zapobieganie rozjazdowi stanu w Terraform dla zasobów platformy Azure utrzymujących stan.