Terraform
Met de provider lionbackup maakt u projecten en back-uptokens aan als
infrastructuurcode. Hij gebruikt de publieke API en daarmee dezelfde
rechten als uw serviceaccount in het portaal. De provider werkt met Terraform
vanaf 1.9 en met OpenTofu.
Bronadres
De provider wordt niet via de publieke Terraform-registry verspreid, maar via
een network mirror van lionbackup. Neem hem eenmalig op in uw CLI-configuratie
~/.terraformrc (of in het bestand waarnaar TF_CLI_CONFIG_FILE verwijst):
provider_installation {
network_mirror {
url = "https://git.prod.lionbackup.cloud/terraform/providers/"
include = ["git.lionbackup.cloud/*/*"]
}
direct {
exclude = ["git.lionbackup.cloud/*/*"]
}
}
Getest met Terraform 1.16 en OpenTofu 1.12. OpenTofu leest dezelfde configuratie uit ~/.tofurc of, als die ontbreekt, uit ~/.terraformrc.
Het direct-blok zorgt ervoor dat Terraform de lionbackup-provider uitsluitend
van de mirror haalt; alle andere providers laden zoals gebruikelijk uit hun
registry's.
De provider opnemen
Het bronadres is git.lionbackup.cloud/lionbackup/lionbackup. Gebruik de
provider vanaf versie 0.1.4:
terraform {
required_providers {
lionbackup = {
source = "git.lionbackup.cloud/lionbackup/lionbackup"
version = "~> 0.1.4"
}
}
}
provider "lionbackup" {
# De API-sleutel komt uit de omgeving:
# export LIONBACKUP_API_KEY=... (portaal → Ontwikkelaars)
# environment = "prod" # standaard; "dev" voor de ontwikkelomgeving
}
De API-sleutel maakt u in het portaal aan onder Ontwikkelaars (zie
API) en geeft u door als omgevingsvariabele LIONBACKUP_API_KEY. Het
attribuut api_key bestaat ook, maar een sleutel in de configuratie belandt
gemakkelijk in het versiebeheer.
Voorbeeld
Het voorbeeld bepaalt uw organisatie, maakt daarin een project aan in de zone
de01-1, genereert een schrijftoken en geeft het geheim ervan uit als
gevoelige 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
}
De organisatie wordt op naam gekozen, niet op positie in de lijst: een serviceaccount kan meerdere organisaties zien, de lijst is op naam gesorteerd en elke nieuwe organisatie verschuift de posities. one() breekt af bij meer dan één treffer; is er geen, dan blijft organization_id leeg en weigert Terraform het plan. In geen geval wordt het project stilletjes in de verkeerde organisatie aangemaakt.
availability_zone verwacht de naam van de zone, zoals de pagina
Regio's en de data source lionbackup_zones die noemen; het
omzetten naar de identifier doet de provider.
Toepassen:
export LIONBACKUP_API_KEY=...
terraform init
terraform apply
terraform output -raw backup_token
terraform init laadt de provider van de mirror en controleert hem tegen de
daar vastgelegde checksums. De uitvoer hoort zo te eindigen:
- Installing git.lionbackup.cloud/lionbackup/lionbackup v0.1.4...
- Installed git.lionbackup.cloud/lionbackup/lionbackup v0.1.4 (verified checksum)
De checksum belandt in .terraform.lock.hcl. Neem dit bestand op in het
versiebeheer, dan installeert elke run exact dezelfde providerversie.
Legt uw .terraform.lock.hcl nog een oudere versie vast, dan weigert
terraform init de voorwaarde ~> 0.1.4; terraform init -upgrade kiest dan
de nieuwe versie en legt die in het bestand vast. De data source
lionbackup_organization en het attribuut payment_method bestaan pas vanaf
0.1.3.
Het attribuut anomaly_detection bestaat vanaf 0.1.4.
Wat u moet weten
terraform destroysluit een project, het verwijdert het niet. Dat is de semantiek van het platform: schrijftokens worden meteen ingetrokken, opgeslagen back-ups blijven tot het einde van de bewaartermijn leesbaar. Een gesloten project verdwijnt uit de Terraform-state. Tokens die dezelfde configuratie beheert, worden ook ingetrokken, leestokens inbegrepen. Wilt u een leestoken na het afbreken behouden, haal het dan eerst uit de state (terraform state rm <adres>) of maak het aan in het portaal.- Elke wijziging aan een token vervangt het. Alle attributen van een
lionbackup_project_tokenzijn alleen bij het aanmaken te kiezen; wie er een wijzigt, krijgt een nieuw token (oude ingetrokken, nieuwe aangemaakt) — en daarmee een nieuw geheim. - Het geheim staat in de state. De API levert een back-uptoken precies één
keer uit; de provider bewaart het als gevoelig attribuut
secretin de Terraform-state. Bescherm het statebestand als een wachtwoord — bijvoorbeeld in een versleutelde remote backend. - Zone, organisatie en onveranderbaarheid zijn beslissingen bij het
aanmaken. Een wijziging van
organization_id,availability_zone,immutable_storage,retention_daysofauto_delete_after_retentionvervangt het project (plan:must be replaced). Tijdens het gebruik te wijzigen zijnname,alert_email,billing_referenceenanomaly_detection. anomaly_detectionvolgt de configuratie. Zonder het attribuut geldtfalse: eenapplyschakelt een in het portaal ingeschakelde anomaliedetectie weer uit. Beheer de instelling op één plek of voeglifecycle { ignore_changes = [anomaly_detection] }toe.- Snelheidslimiet. De API staat 60 verzoeken per minuut toe per
serviceaccount en per IP-adres. De provider herhaalt
429en503tot drie keer en wacht daarbij de aangekondigdeRetry-After-tijd af; een groteapplywordt daardoor trager, niet afgebroken. - Rechten. De provider kan precies wat de persoon mag die het
serviceaccount bezit. Projecten aanmaken en sluiten vereist de rol
ownerofadminin de organisatie.
Referentie
Provider
| Attribuut | Betekenis |
|---|---|
api_key | API-sleutel; liever via LIONBACKUP_API_KEY in de omgeving |
environment | prod (standaard) of dev; kiest API- en token-endpoint |
api_url | eigen basis-URL van de API, overschrijft environment |
token_url | eigen token-endpoint, overschrijft environment |
Resource lionbackup_project
| Attribuut | Verplicht | Betekenis |
|---|---|---|
organization_id | ja | identifier van de organisatie (data source lionbackup_organizations) |
name | ja | projectnaam, maximaal 100 tekens |
availability_zone | ja | naam van de zone, bijvoorbeeld de01-1 |
alert_email | nee | adres voor meldingen |
billing_reference | nee | vrije tekst voor uw facturering |
anomaly_detection | nee | anomaliedetectie voor de back-ups van het project inschakelen, standaard false |
immutable_storage | nee | onveranderbare opslag, standaard false |
retention_days | nee | bewaartermijn bij onveranderbare opslag; zonder opgave de platformstandaard |
auto_delete_after_retention | nee | standaard true |
id, status | — | worden door het platform toegekend |
Resource lionbackup_project_token
| Attribuut | Verplicht | Betekenis |
|---|---|---|
project_id | ja | identifier van het project |
type | nee | write (standaard) voor back-ups, read voor herstel |
operating_system | nee | Linux (standaard), Windows of macOS (bèta) |
usage_count_limit | nee | maximaal zoveel keer te gebruiken |
rate_limit_per_minute | nee | verzoeken per minuut voor dit token |
rate_limit_per_hour | nee | verzoeken per uur voor dit token |
id | — | wordt door het platform toegekend |
secret | — | het back-uptoken, gevoelig, alleen in de state |
Data sources
lionbackup_organizations levert organizations, gesorteerd op naam, met
id, name, status, role (uw rol in de organisatie) en payment_method:
sepa_debit zolang een SEPA-incassomachtiging actief is, anders transfer, en
null waar uw rol alleen member is. lionbackup_zones levert zones met
id, name, status, provider, location_city en storage_type; te
boeken zijn zones met status = active.
lionbackup_organization leest één organisatie via haar id: haar
payment_method en het blok sepa_mandate met status, reference,
iban_masked, account_holder, granted_at en revoked_at (UTC,
YYYY-MM-DD HH:MM:SS). Zonder machtiging is het blok null; na een
intrekking toont het de ingetrokken machtiging tot er een nieuwe is verleend.
Het IBAN is gemaskeerd, de BIC wordt niet getoond. Elke rol behalve member
mag haar lezen; die rol ziet ook in het portaal geen betaalgegevens.
Daarnaast lionbackup_projects (alle projecten van één organisatie,
organization_id opgeven, gesloten projecten inbegrepen), lionbackup_project
(één project via zijn id) en lionbackup_whoami (het handelende
serviceaccount, de eigenaar ervan en diens rol per organisatie).
OpenTofu
OpenTofu gebruikt dezelfde configuratie. Zet het provider_installation-blok
in ~/.tofurc (ontbreekt dat bestand, dan leest OpenTofu ook ~/.terraformrc)
en vervang in de commando's terraform door tofu. Ook tofu init meldt
verified checksum.
Ontwikkelomgeving
Voor tests tegen de ontwikkelomgeving zet u in de provider
environment = "dev" en gebruikt u een daar aangemaakte sleutel. De provider
zelf kan bovendien van de mirror van de ontwikkelomgeving worden gehaald;
daarvoor wisselt u in ~/.terraformrc de URL:
url = "https://git.dev.lionbackup.cloud/terraform/providers/"
Het bronadres git.lionbackup.cloud/lionbackup/lionbackup blijft in beide
gevallen hetzelfde.