Skip to content

Terraform: Jak znaleźć przyczynę błędu „Error: Forbidden: Forbidden”

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.

Published inTerraform

Be First to Comment

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *