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.4:

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

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, listen er sorteret efter navn, og hver ny organisation flytter placeringerne. 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.4...
- Installed git.lionbackup.cloud/lionbackup/lionbackup v0.1.4 (verified checksum)

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

Holder jeres .terraform.lock.hcl stadig fast i en ældre version, afviser terraform init betingelsen ~> 0.1.4; terraform init -upgrade vælger så den nye version og skriver den i filen. Data source lionbackup_organization og attributten payment_method findes først fra 0.1.3. Attributten anomaly_detection findes fra 0.1.4.

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, billing_reference og anomaly_detection ændres.
  • anomaly_detection følger konfigurationen. Uden attributten gælder false: et apply slår en anomalidetektion, der er slået til i portalen, fra igen. Administrér indstillingen ét sted, eller tilføj lifecycle { ignore_changes = [anomaly_detection] }.
  • 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
anomaly_detectionnejslå anomalidetektion til for projektets backups, standard false
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), Windows eller macOS (beta)
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, sorteret efter navn, med id, name, status, role (jeres rolle i organisationen) og payment_method: sepa_debit, så længe et SEPA Direct Debit-mandat er aktivt, ellers transfer, og null, hvor jeres rolle kun er member. lionbackup_zones leverer zones med id, name, status, provider, location_city og storage_type; zoner med status = active kan bookes.

lionbackup_organization læser én organisation via dens id: dens payment_method og blokken sepa_mandate med status, reference, iban_masked, account_holder, granted_at og revoked_at (UTC, YYYY-MM-DD HH:MM:SS). Uden mandat er blokken null; efter en tilbagekaldelse viser den det tilbagekaldte mandat, indtil et nyt er givet. IBAN er maskeret, BIC udleveres ikke. Alle roller undtagen member må læse den; den rolle ser heller ingen betalingsdata i portalen.

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.