Ga naar hoofdinhoud

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 destroy sluit 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_token zijn 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 secret in 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_days of auto_delete_after_retention vervangt het project (plan: must be replaced). Tijdens het gebruik te wijzigen zijn name, alert_email en billing_reference.
  • Snelheidslimiet. De API staat 60 verzoeken per minuut toe per serviceaccount en per IP-adres. De provider herhaalt 429 en 503 tot drie keer en wacht daarbij de aangekondigde Retry-After-tijd af; een grote apply wordt daardoor trager, niet afgebroken.
  • Rechten. De provider kan precies wat de persoon mag die het serviceaccount bezit. Projecten aanmaken en sluiten vereist de rol owner of admin in de organisatie.

Referentie​

Provider​

AttribuutBetekenis
api_keyAPI-sleutel; liever via LIONBACKUP_API_KEY in de omgeving
environmentprod (standaard) of dev; kiest API- en token-endpoint
api_urleigen basis-URL van de API, overschrijft environment
token_urleigen token-endpoint, overschrijft environment

Resource lionbackup_project​

AttribuutVerplichtBetekenis
organization_idjaidentifier van de organisatie (data source lionbackup_organizations)
namejaprojectnaam, maximaal 100 tekens
availability_zonejanaam van de zone, bijvoorbeeld de01-1
alert_emailneeadres voor meldingen
billing_referenceneevrije tekst voor uw facturering
immutable_storageneeonveranderbare opslag, standaard false
retention_daysneebewaartermijn bij onveranderbare opslag; zonder opgave de platformstandaard
auto_delete_after_retentionneestandaard true
id, status—worden door het platform toegekend

Resource lionbackup_project_token​

AttribuutVerplichtBetekenis
project_idjaidentifier van het project
typeneewrite (standaard) voor back-ups, read voor herstel
operating_systemneeLinux (standaard) of Windows
usage_count_limitneemaximaal zoveel keer te gebruiken
rate_limit_per_minuteneeverzoeken per minuut voor dit token
rate_limit_per_hourneeverzoeken 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.