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 destroylukker 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_tokenkan 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
secreti 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_daysellerauto_delete_after_retentionerstatter projektet (plan:must be replaced). Under drift kanname,alert_emailogbilling_referenceændres. - Hastighedsgrænser. API'et tillader 60 forespørgsler pr. minut pr.
servicekonto og pr. IP-adresse. Provideren gentager
429og503op til tre gange og venter imens den oplysteRetry-After-tid; et stortapplybliver 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
ownerelleradmini organisationen.
Reference
Provider
| Attribut | Betydning |
|---|---|
api_key | API-nøgle; bedre via LIONBACKUP_API_KEY i miljøet |
environment | prod (standard) eller dev; vælger API- og token-endpoint |
api_url | egen basis-URL for API'et, tilsidesætter environment |
token_url | eget token-endpoint, tilsidesætter environment |
Ressourcen lionbackup_project
| Attribut | Obligatorisk | Betydning |
|---|---|---|
organization_id | ja | organisationens id (data sourcen lionbackup_organizations) |
name | ja | projektnavn, højst 100 tegn |
availability_zone | ja | zonens navn, f.eks. de01-1 |
alert_email | nej | adresse til meddelelser |
billing_reference | nej | fri tekst til jeres fakturering |
immutable_storage | nej | uforanderlig opbevaring, standard false |
retention_days | nej | opbevaringsperiode ved uforanderlig opbevaring; uden angivelse platformstandard |
auto_delete_after_retention | nej | standard true |
id, status | — | tildeles af platformen |
Ressourcen lionbackup_project_token
| Attribut | Obligatorisk | Betydning |
|---|---|---|
project_id | ja | projektets id |
type | nej | write (standard) til backups, read til gendannelser |
operating_system | nej | Linux (standard) eller Windows |
usage_count_limit | nej | højst så mange anvendelser |
rate_limit_per_minute | nej | forespørgsler pr. minut for dette token |
rate_limit_per_hour | nej | forespø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.