Hop til hovedindhold

Terraform

Med provideren lionbackup opretter I projekter og backup-tokens som infrastrukturkode. Den bruger det offentlige API og dermed de samme rettigheder som jeres servicekonto i portalen. Provideren kører med Terraform fra 1.9 og med OpenTofu.

Kilde​

Provideren distribueres ikke via det offentlige Terraform-registry, men via et network mirror hos lionbackup. Tilføj den én gang i jeres CLI-konfiguration ~/.terraformrc (eller i den fil, som TF_CLI_CONFIG_FILE peger på):

provider_installation {
network_mirror {
url = "https://git.prod.lionbackup.cloud/terraform/providers/"
include = ["git.lionbackup.cloud/*/*"]
}
direct {
exclude = ["git.lionbackup.cloud/*/*"]
}
}

Testet med Terraform 1.16 og OpenTofu 1.12. OpenTofu læser den samme konfiguration fra ~/.tofurc eller, hvis den mangler, fra ~/.terraformrc.

direct-blokken sørger for, at Terraform udelukkende henter lionbackup-provideren fra mirroret; alle andre providere hentes fortsat som sædvanligt fra deres registries.

Tilføj provideren​

Kildeadressen er git.lionbackup.cloud/lionbackup/lionbackup. Brug provideren fra version 0.1.1:

terraform {
required_providers {
lionbackup = {
source = "git.lionbackup.cloud/lionbackup/lionbackup"
version = "~> 0.1.1"
}
}
}

provider "lionbackup" {
# API-nøglen kommer fra miljøet:
# export LIONBACKUP_API_KEY=... (Portal → Udvikler)
# environment = "prod" # standard; "dev" til udviklingsmiljøet
}

API-nøglen opretter I i portalen under Udvikler (se API) og giver den videre som miljøvariablen LIONBACKUP_API_KEY. Attributten api_key findes også, men en nøgle i konfigurationen havner let i versionsstyringen.

Eksempel​

Eksemplet finder jeres organisation, opretter et projekt i den i zonen de01-1, genererer et skrivetoken og udskriver dets hemmelighed som et sensitivt output:

data "lionbackup_organizations" "mine" {}

locals {
organization_id = one([
for o in data.lionbackup_organizations.mine.organizations : o.id
if o.name == "Example Ltd"
])
}

resource "lionbackup_project" "backup" {
organization_id = local.organization_id
name = "web-servers"
availability_zone = "de01-1"
alert_email = "ops@example.com"
}

resource "lionbackup_project_token" "writer" {
project_id = lionbackup_project.backup.id
type = "write"
}

output "backup_token" {
value = lionbackup_project_token.writer.secret
sensitive = true
}

Organisationen vælges efter navn, ikke efter placering i listen: en servicekonto kan se flere organisationer, og rækkefølgen er ikke garanteret. one() fejler ved flere træf; er der intet, forbliver organization_id tom, og Terraform afviser planen. Projektet oprettes under ingen omstændigheder stille i den forkerte organisation.

availability_zone forventer zonens navn, som siden Regioner og data sourcen lionbackup_zones angiver det; opslaget til id'et klarer provideren.

Anvend:

export LIONBACKUP_API_KEY=...
terraform init
terraform apply
terraform output -raw backup_token

terraform init henter provideren fra mirroret og kontrollerer den mod de checksummer, der ligger der. Outputtet bør slutte sådan:

- Installing git.lionbackup.cloud/lionbackup/lionbackup v0.1.2...
- Installed git.lionbackup.cloud/lionbackup/lionbackup v0.1.2 (verified checksum)

Checksummen havner i .terraform.lock.hcl. Tag denne fil med i versionsstyringen, så installerer hver kørsel nøjagtig samme providerversion.

Hvad I bør vide​

  • terraform destroy lukker et projekt, det sletter det ikke. Det er platformens semantik: skrivetokens tilbagekaldes med det samme, gemte backups kan læses indtil opbevaringsperiodens udløb. Et lukket projekt forsvinder fra Terraform-staten. Tokens, som samme konfiguration administrerer, tilbagekaldes også, læsetokens inklusive. Skal et læsetoken overleve nedlukningen, så fjern det først fra staten (terraform state rm <adresse>) eller opret det i portalen.
  • Enhver ændring af et token erstatter det. Alle attributter på et lionbackup_project_token kan kun vælges ved oprettelsen; den, der ændrer en, får et nyt token (det gamle tilbagekaldes, et nyt genereres) — og dermed en ny hemmelighed.
  • Hemmeligheden ligger i staten. API'et udleverer et backup-token præcis én gang; provideren opbevarer det som den sensitive attribut secret i Terraform-staten. Beskyt state-filen som en adgangskode — f.eks. i et krypteret remote-backend.
  • Zone, organisation og uforanderlighed er beslutninger ved oprettelsen. En ændring af organization_id, availability_zone, immutable_storage, retention_days eller auto_delete_after_retention erstatter projektet (plan: must be replaced). Under drift kan name, alert_email og billing_reference ændres.
  • Hastighedsgrænser. API'et tillader 60 forespørgsler pr. minut pr. servicekonto og pr. IP-adresse. Provideren gentager 429 og 503 op til tre gange og venter imens den oplyste Retry-After-tid; et stort apply bliver dermed langsommere, ikke afbrudt.
  • Rettigheder. Provideren kan præcis det, som det menneske må, der ejer servicekontoen. At oprette og lukke projekter forudsætter rollen owner eller admin i organisationen.

Reference​

Provider​

AttributBetydning
api_keyAPI-nøgle; bedre via LIONBACKUP_API_KEY i miljøet
environmentprod (standard) eller dev; vælger API- og token-endpoint
api_urlegen basis-URL for API'et, tilsidesætter environment
token_urleget token-endpoint, tilsidesætter environment

Ressourcen lionbackup_project​

AttributObligatoriskBetydning
organization_idjaorganisationens id (data sourcen lionbackup_organizations)
namejaprojektnavn, højst 100 tegn
availability_zonejazonens navn, f.eks. de01-1
alert_emailnejadresse til meddelelser
billing_referencenejfri tekst til jeres fakturering
immutable_storagenejuforanderlig opbevaring, standard false
retention_daysnejopbevaringsperiode ved uforanderlig opbevaring; uden angivelse platformstandard
auto_delete_after_retentionnejstandard true
id, status—tildeles af platformen

Ressourcen lionbackup_project_token​

AttributObligatoriskBetydning
project_idjaprojektets id
typenejwrite (standard) til backups, read til gendannelser
operating_systemnejLinux (standard) eller Windows
usage_count_limitnejhøjst så mange anvendelser
rate_limit_per_minutenejforespørgsler pr. minut for dette token
rate_limit_per_hournejforespørgsler pr. time for dette token
id—tildeles af platformen
secret—backup-tokenet, sensitivt, kun i staten

Data sources​

lionbackup_organizations leverer organizations med id, name, status og role (jeres rolle i organisationen). lionbackup_zones leverer zones med id, name, status, provider, location_city og storage_type; zoner med status = active kan bookes.

Desuden lionbackup_projects (alle projekter i én organisation, angiv organization_id, lukkede inklusive), lionbackup_project (ét projekt via dets id) og lionbackup_whoami (den handlende servicekonto, dens ejer og ejerens rolle pr. organisation).

OpenTofu​

OpenTofu bruger samme konfiguration. Læg provider_installation-blokken i ~/.tofurc (mangler filen, læser OpenTofu også ~/.terraformrc), og erstat terraform med tofu i kommandoerne. Også tofu init melder verified checksum.

Udviklingsmiljø​

Til test mod udviklingsmiljøet sætter I environment = "dev" i provideren og bruger en nøgle, der er oprettet dér. Selve provideren kan desuden hentes fra udviklingsmiljøets mirror; det gør I ved at bytte URL'en i ~/.terraformrc:

url = "https://git.dev.lionbackup.cloud/terraform/providers/"

Kildeadressen git.lionbackup.cloud/lionbackup/lionbackup er den samme i begge tilfælde.