Integracja z projektem gitlab¶
Note
Terraform State1 to mechanizm w Terraformie, który przechowuje aktualny stan zarządzanej infrastruktury. Jest to plik (domyślnie terraform.tfstate
), w którym Terraform zapisuje informacje o zasobach, ich konfiguracji oraz zależnościach. Dzięki temu Terraform może:
- Śledzić zmiany – porównuje aktualną infrastrukturę ze skonfigurowaną w kodzie, identyfikując różnice.
- Optymalizować działania – wie, które zasoby wymagają zmiany, zamiast tworzyć je od nowa.
- Zarządzać zależnościami – rozumie, w jakiej kolejności tworzyć, aktualizować lub usuwać zasoby.
- Współdzielić stan – umożliwia pracę zespołową poprzez zdalne przechowywanie stanu w backendach takich jak S3, GitLab czy Terraform Cloud.
Zarządzanie stanem jest kluczowe, dlatego warto używać zdalnego backendu zamiast przechowywać terraform.tfstate
lokalnie, szczególnie w środowiskach zespołowych.
Ustawienie terraform state w ustawieniach repozytorium¶
Danger
Nigdy umieszczaj terraform state w bezpośrednio w repozytorium kodu
terraform init \
-backend-config="address=${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/terraform/state/${TF_STATE_NAME}" \
-backend-config="lock_address=${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/terraform/state/${TF_STATE_NAME}/lock" \
-backend-config="unlock_address=${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/terraform/state/${TF_STATE_NAME}/lock" \
-backend-config="username=gitlab-ci-token" \
-backend-config="password=${CI_JOB_TOKEN}" \
-backend-config="lock_method=POST" \
-backend-config="unlock_method=DELETE" \
-backend-config="retry_wait_min=5"
gdzie:
- CI_PROJECT_ID - id projektu w gitlab
- CI_SERVER_URL - serwer URL
- TF_STATE_NAME - nazwa instancji state