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.1:
terraform {
required_providers {
lionbackup = {
source = "git.lionbackup.cloud/lionbackup/lionbackup"
version = "~> 0.1.1"
}
}
}
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 en de volgorde is niet gegarandeerd. 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.2...
- Installed git.lionbackup.cloud/lionbackup/lionbackup v0.1.2 (verified checksum)
De checksum belandt in .terraform.lock.hcl. Neem dit bestand op in het
versiebeheer, dan installeert elke run exact dezelfde providerversie.
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_emailenbilling_reference. - 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 |
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) of Windows |
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 met id, name, status en
role (uw rol in de organisatie). lionbackup_zones levert zones met id,
name, status, provider, location_city en storage_type; te boeken zijn
zones met status = active.
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.