Cześć!
Ostatnio podczas pracy z Terraformem spotkałem się z sytuacją w której otrzymałem błąd związany z brakiem dostępu do jednego z obiektów w chmurze AWS. Błąd ten jednak nie pokazał, którego obiektu dotyczy problem. Błąd miał taki format:
Error: Forbidden: Forbidden
status code: 403, request id: XXXXX, host id: XXXXX=
W związku z tym, że infrastruktura zarządzana przez Terraforma zawierała bardzo dużo obiektów, trudne było tutaj odnalezienie gdzie dokładnie jest błąd.
W takim wypadku można poradzić sobie z tym błędem wykorzystując dodatkowe ustawienia:
- przełączyć tryb logowania błędów
- uruchomić Terraforma tylko w jednym wątku
Tryb logowania błędów
Terraform umożliwia ustawienie poziomu logowania błędów na jednym z poniżej podanych wartości:
- TRACE
- DEBUG
- INFO
- WARN
- ERROR
W naszym przypadku najbardziej przydatny będzie poziom debug, w którym możemy podejrzeć nie tylko błędy ale również komunikację pomiędzy Terraformem i API. Aby ustawić poziom DEBUG należy ustawić zmienną środowiskową TF_LOG:
export TF_LOG=DEBUG
Uruchamianie Terraforma tylko z jednym wątkiem
Domyślnie komendy apply i plan wykorzystują wielowątkowość po to aby przyspieszyć pracę. W naszym wypadku może to spowodować sytuację, w której nasze logi będą mocno przemieszane. Dlatego warto tutaj ustawić tylko jeden wątek, co spowoduje, że w logu pojawią się informacje o kolejnych operacjach po kolei.
Aby uruchomić te komendy w tym trybie należy użyć parametru parallelism.
terraform plan -parallelism=1
Lub:
terraform apply -parallelism=1
Co dalej?
Jak już udało nam się wyświetlić wszystkie logi, to warto teraz poszukać gdzie jest problem. Tutaj należy poszukać w logach błędów 403, takich jak:
HTTP/1.1 403 Forbidden
W moim przypadku błąd związany był z brakiem uprawnień do jednego z obiektów S3 Bucket.
Be First to Comment