Terraform
Con el proveedor lionbackup crea proyectos y tokens de copia de seguridad
como infraestructura como código. Utiliza la API pública y, por tanto,
los mismos permisos que su cuenta de servicio en el portal. El proveedor
funciona con Terraform a partir de la versión 1.9 y con OpenTofu.
Dónde obtenerlo
El proveedor no se distribuye a través del registro público de Terraform, sino
mediante un network mirror de lionbackup. Regístrelo una sola vez en su
configuración de la CLI ~/.terraformrc (o en el archivo al que apunte
TF_CLI_CONFIG_FILE):
provider_installation {
network_mirror {
url = "https://git.prod.lionbackup.cloud/terraform/providers/"
include = ["git.lionbackup.cloud/*/*"]
}
direct {
exclude = ["git.lionbackup.cloud/*/*"]
}
}
Probado con Terraform 1.16 y OpenTofu 1.12. OpenTofu lee la misma configuración desde ~/.tofurc o, si no existe, desde ~/.terraformrc.
El bloque direct garantiza que Terraform obtenga el proveedor de lionbackup
exclusivamente del mirror; todos los demás proveedores se siguen descargando
como de costumbre desde sus registros.
Incluir el proveedor
La dirección de origen es git.lionbackup.cloud/lionbackup/lionbackup. Utilice
el proveedor a partir de la versión 0.1.1:
terraform {
required_providers {
lionbackup = {
source = "git.lionbackup.cloud/lionbackup/lionbackup"
version = "~> 0.1.1"
}
}
}
provider "lionbackup" {
# La clave de API procede del entorno:
# export LIONBACKUP_API_KEY=... (Portal → Desarrollo)
# environment = "prod" # por defecto; "dev" para el entorno de desarrollo
}
La clave de API se crea en el portal, en Desarrollo (véase API),
y se pasa como variable de entorno LIONBACKUP_API_KEY. El atributo api_key
también existe, pero una clave en la configuración acaba fácilmente en el
control de versiones.
Ejemplo
El ejemplo determina su organización, crea en ella un proyecto en la zona
de01-1, genera un token de escritura y emite su secreto como output
sensible:
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
}
La organización se selecciona por su nombre, no por su posición en la lista: una cuenta de servicio puede ver varias organizaciones y el orden no está garantizado. one() falla si hay más de una coincidencia; si no hay ninguna, organization_id queda vacío y Terraform rechaza el plan. En ningún caso se crea el proyecto en silencio en la organización equivocada.
availability_zone espera el nombre de la zona, tal como lo indican la
página Regiones y la data source lionbackup_zones; de la
resolución al identificador se encarga el proveedor.
Aplicar:
export LIONBACKUP_API_KEY=...
terraform init
terraform apply
terraform output -raw backup_token
terraform init descarga el proveedor del mirror y lo verifica contra las
sumas de comprobación allí depositadas. La salida debería terminar así:
- Installing git.lionbackup.cloud/lionbackup/lionbackup v0.1.2...
- Installed git.lionbackup.cloud/lionbackup/lionbackup v0.1.2 (verified checksum)
La suma de comprobación queda en .terraform.lock.hcl. Incluya este archivo
en el control de versiones y cada ejecución instalará exactamente la misma
versión del proveedor.
Lo que debe saber
terraform destroycierra un proyecto, no lo borra. Esa es la semántica de la plataforma: los tokens de escritura se revocan de inmediato y las copias guardadas siguen siendo legibles hasta el final del período de retención. Un proyecto cerrado desaparece del state de Terraform. También se revocan los tokens que gestiona la misma configuración, incluidos los de lectura. Para conservar un token de lectura tras el desmontaje, quítelo antes del state (terraform state rm <dirección>) o créelo en el portal.- Cualquier cambio en un token lo sustituye. Todos los atributos de un
lionbackup_project_tokensolo pueden elegirse al crearlo; quien cambie uno obtiene un token nuevo (el antiguo se revoca, se genera uno nuevo) — y con ello un secreto nuevo. - El secreto reside en el state. La API entrega un token de copia de
seguridad una sola vez; el proveedor lo conserva como atributo sensible
secreten el state de Terraform. Proteja el archivo de state como una contraseña — por ejemplo en un backend remoto cifrado. - Zona, organización e inmutabilidad son decisiones de creación. Un cambio
en
organization_id,availability_zone,immutable_storage,retention_daysoauto_delete_after_retentionsustituye el proyecto (plan:must be replaced). Durante la operación pueden cambiarsename,alert_emailybilling_reference. - Límites de frecuencia. La API permite 60 peticiones por minuto por cuenta
de servicio y por dirección IP. El proveedor reintenta
429y503hasta tres veces y espera entretanto el tiempoRetry-Afteranunciado; unapplygrande se vuelve así más lento, no se interrumpe. - Permisos. El proveedor puede hacer exactamente lo que puede hacer la
persona a la que pertenece la cuenta de servicio. Crear y cerrar proyectos
requiere el rol
owneroadminen la organización.
Referencia
Proveedor
| Atributo | Significado |
|---|---|
api_key | clave de API; mejor mediante LIONBACKUP_API_KEY en el entorno |
environment | prod (por defecto) o dev; elige el endpoint de la API y del token |
api_url | URL base propia de la API, sobrescribe environment |
token_url | endpoint de token propio, sobrescribe environment |
Recurso lionbackup_project
| Atributo | Obligatorio | Significado |
|---|---|---|
organization_id | sí | identificador de la organización (data source lionbackup_organizations) |
name | sí | nombre del proyecto, 100 caracteres como máximo |
availability_zone | sí | nombre de la zona, por ejemplo de01-1 |
alert_email | no | dirección para notificaciones |
billing_reference | no | texto libre para su facturación |
immutable_storage | no | almacenamiento inmutable, por defecto false |
retention_days | no | período de retención con almacenamiento inmutable; sin indicación, el valor de la plataforma |
auto_delete_after_retention | no | por defecto true |
id, status | — | los asigna la plataforma |
Recurso lionbackup_project_token
| Atributo | Obligatorio | Significado |
|---|---|---|
project_id | sí | identificador del proyecto |
type | no | write (por defecto) para copias de seguridad, read para restauraciones |
operating_system | no | Linux (por defecto) o Windows |
usage_count_limit | no | como máximo este número de usos |
rate_limit_per_minute | no | peticiones por minuto para este token |
rate_limit_per_hour | no | peticiones por hora para este token |
id | — | lo asigna la plataforma |
secret | — | el token de copia de seguridad, sensible, solo en el state |
Data sources
lionbackup_organizations devuelve organizations con id, name, status
y role (su rol en la organización). lionbackup_zones devuelve zones con
id, name, status, provider, location_city y storage_type; son
contratables las zonas con status = active.
Además lionbackup_projects (todos los proyectos de una organización, indique
organization_id, incluidos los cerrados), lionbackup_project (un proyecto
por su id) y lionbackup_whoami (la cuenta de servicio que actúa, su
propietario y el rol de este en cada organización).
OpenTofu
OpenTofu utiliza la misma configuración. Coloque el bloque
provider_installation en ~/.tofurc (si el archivo no existe, OpenTofu lee
también ~/.terraformrc) y sustituya en los comandos terraform por tofu.
También tofu init informa de verified checksum.
Entorno de desarrollo
Para pruebas contra el entorno de desarrollo, establezca en el proveedor
environment = "dev" y utilice una clave creada allí. El propio proveedor
puede obtenerse además del mirror del entorno de desarrollo; para ello cambie
la URL en ~/.terraformrc:
url = "https://git.dev.lionbackup.cloud/terraform/providers/"
La dirección de origen git.lionbackup.cloud/lionbackup/lionbackup es la misma
en ambos casos.