Integracja z projektem gitlab

Terraform State 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
Section titled “Ustawienie terraform state w ustawieniach repozytorium”export VAULT_ADDR="https://vault.local"
export VAULT_TOKEN="hvs.QWERTY"
export CI_SERVER_URL="https://gitlab.com/"
export CI_USERNAME="techuser"
export GITLAB_TOKEN="qwerty"
export CI_PROJECT_ID="123456789"
export TF_STATE_NAME="production"
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=${GITLAB_TOKEN}" \
-backend-config="lock_method=POST" \
-backend-config="unlock_method=DELETE" \
-backend-config="retry_wait_min=5"dla OpenTofu
export VAULT_ADDR="https://vault.local"
export VAULT_TOKEN="hvs.QWERTY"
export CI_SERVER_URL="https://gitlab.com/"
export CI_USERNAME="techuser"
export GITLAB_TOKEN="qwerty"
export CI_PROJECT_ID="123456789"
export TF_STATE_NAME="production"
tofu 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=${GITLAB_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
Terraform state z procesu CI
Section titled “Terraform state z procesu CI”
Dokumentacja: https://docs.gitlab.com/ee/user/infrastructure/iac/terraform_state.html