Terraform-provider
Met de Elido Terraform-provider - terraform-provider-elido - beheer je
shortlinks op dezelfde manier als de rest van je infrastructuur:
declaratief, onder versiebeheer, met plan / apply-semantiek
en driftdetectie.
De provider is een dunne adapter boven de openbare REST API. Alles
wat je in elido_link kunt uitdrukken, kun je ook uitdrukken via de SDK of
een curl naar api-core; Terraform geeft je er alleen een stabiel lifecycle-
contract bovenop.
Wanneer gebruik je het
- Marketingredirects horen bij je infrastructuur. Cloudflare DNS, S3-lander, CloudFront-distributie, en de shortlink die naar de lander wijst, staan allemaal in dezelfde Terraform-module. Verwijder de lander → de redirect gaat mee.
- Bulkcampagnelinks vanuit een sjabloon. Een
for_eachover kanalen × regio’s levert tientallen consequent getagde links op in éénterraform apply. - Multi-tenant-onboarding. Als je tenants met
Terraform provisioneert, voeg dan een
elido_link-resource aan de module toe en elke tenant heeft vanaf dag één zijn eigen gebrande redirects.
Als je enige behoefte is “een link aanmaken vanuit een script”, gebruik dan de
Go SDK of een curl. Terraform is voor het geval dat je
een lifecycle beheerd wilt hebben.
Status
v0.1.0 MVP, gebouwd vanuit de broncode (zie Installatie). Oppervlak vandaag:
| Soort | Naam | Endpoint |
|---|---|---|
| Resource | elido_link | POST /v1/workspaces/{id}/links (+ PATCH / DELETE) |
| Resource | elido_custom_domain | aanmaken / verwijderen / importeren via de domeinen-API |
| Databron | elido_workspace | GET /v1/workspaces/{id} |
| Databron | elido_custom_domain | GET /v1/workspaces/{id}/domains (lokaal gefilterd) |
elido_custom_domain registreert het domein en wacht standaard
tot de DNS-verificatie slaagt (wait_for_verified, verify_timeout,
standaard 10m). Bij een time-out geeft het de verify_token terug, zodat je
het ontbrekende TXT-record kunt publiceren. Importeer met
<workspace_id>:<domain_id>.
Gepland. De resources
elido_folderenelido_api_keyzitten nog niet in de provider. De provider is niet gepubliceerd in het Terraform Registry en heeft geen stabiele release. ADR-0034 bevat de volledige lijst met uitgesteld werk.
Installatie
De provider is nog niet gepubliceerd in het Terraform Registry. Tot dat zo is,
installeer je via dev_overrides:
git clone https://github.com/elidoapp/elido.git
cd elido/tools/terraform-provider-elido
make install-localVoeg daarna een dev_overrides-blok toe aan ~/.terraformrc:
provider_installation {
dev_overrides {
"elidoapp/elido" = "/Users/<you>/.terraform.d/plugins/elidoapp/elido"
}
direct {}
}Onder dev_overrides is terraform init niet nodig - plan
en apply lossen het binaire bestand direct op.
Configureren
terraform {
required_providers {
elido = {
source = "elidoapp/elido"
version = "~> 0.1"
}
}
}
provider "elido" {
# api_url defaults to https://api.elido.app
# api_token reads ELIDO_API_TOKEN
}export ELIDO_API_TOKEN=ek_...| Attribuut | Env-terugval | Standaard |
|---|---|---|
api_url | ELIDO_API_URL | https://api.elido.app |
api_token | ELIDO_API_TOKEN | verplicht |
Wijs bij zelf gehost Elido api_url naar je api-core. Tokens worden
aangemaakt op /dashboard/settings/api-keys.
Je eerste link
data "elido_workspace" "main" {
id = 42
}
resource "elido_link" "spring_campaign" {
workspace_id = data.elido_workspace.main.id
domain_id = 1
slug = "spring-2026"
destination_url = "https://example.com/landing/spring"
title = "Spring 2026 email campaign"
tags = ["spring-2026", "email"]
redirect_status = 301
}terraform plan
terraform applyDe provider koppelt de state aan de numerieke link-id, dus het hernoemen van het
Terraform-resourcelabel of het wijzigen van de slug forceert geen
vervanging - er wordt een PATCH gestuurd. Het wijzigen van workspace_id of
domain_id forceert wel vervanging (de link hoort dan bij een andere
edge-route).
Bulklinks
locals {
channels = ["email", "twitter", "linkedin", "reddit", "hn"]
regions = ["us", "eu", "apac", "latam"]
}
resource "elido_link" "campaign_launch" {
for_each = {
for pair in setproduct(local.channels, local.regions) :
"${pair[0]}-${pair[1]}" => pair
}
workspace_id = data.elido_workspace.main.id
domain_id = 1
slug = "launch-${each.key}"
destination_url = "https://example.com/launch?ch=${each.value[0]}&r=${each.value[1]}"
tags = ["launch-2026", each.value[0], each.value[1]]
}20 links, één apply. Verwijder het blok en terraform apply
verwijdert ze in één transactie.
Bestaande links importeren
Heb je al links die je onder Terraform-beheer wilt brengen? Gebruik het
formaat <workspace_id>:<link_id>:
terraform import elido_link.spring_campaign 42:7Een daaropvolgende terraform plan toont de drift tussen de live link
en je HCL - convergeer door ofwel de HCL aan te passen of door
apply de HCL-state naar de API te laten pushen.
Referentie
Resource - elido_link
| Attribuut | Type | Verplicht | Opmerkingen |
|---|---|---|---|
workspace_id | number | ja | Forceert vervanging bij wijziging. |
domain_id | number | ja | Forceert vervanging bij wijziging. |
slug | string | nee | Automatisch gegenereerd als leeg. |
destination_url | string | ja | |
title | string | nee | |
tags | list | nee | Volgorde telt mee in het plan-verschil. |
redirect_status | number | nee | 301 / 302 / 307 / 308. Standaard 302. |
show_splash | bool | nee | |
status | string | nee | active, paused, archived. Standaard active. |
id | string | berekend | Numerieke ID, als string opgemaakt voor TF-stabiliteit. |
created_at | string | berekend | RFC3339. |
updated_at | string | berekend | RFC3339. |
Databron - elido_custom_domain
Zoek een eigen redirectdomein op hostnaam binnen een workspace. Gebruik
de resulterende id als domain_id in elido_link-resources.
data "elido_custom_domain" "links" {
workspace_id = data.elido_workspace.main.id
hostname = "links.example.com"
}
resource "elido_link" "spring_campaign" {
workspace_id = data.elido_workspace.main.id
domain_id = data.elido_custom_domain.links.id
destination_url = "https://example.com/landing/spring"
slug = "spring-2026"
}| Attribuut | Type | Verplicht | Opmerkingen |
|---|---|---|---|
workspace_id | number | ja | Workspace die eigenaar is van het domein. |
hostname | string | ja | FQDN; wildcards behouden het voorvoegsel *.. |
id | number | berekend | Geef door aan elido_link.domain_id. |
status | string | berekend | pending, verified, active, failed. |
is_wildcard | bool | berekend | |
verify_token | string | berekend | Gevoelig. Leeg na verificatie. |
created_at | string | berekend | |
verified_at | string | berekend | |
failed_at | string | berekend | |
fail_reason | string | berekend |
Databron - elido_workspace
| Attribuut | Type | Verplicht | Opmerkingen |
|---|---|---|---|
id | number | ja | Zoeksleutel. |
name | string | berekend | |
slug | string | berekend | |
plan_tier | string | berekend | free, paid, business. |
created_at | string | berekend | |
updated_at | string | berekend |
Waar je issues meldt
Bugs, ontbrekende schema-onderdelen of “ik wil resource X” - open een issue op
github.com/elidoapp/elido met
het label area:terraform.