Terraform sağlayıcısı
Elido Terraform sağlayıcısı terraform-provider-elido, kısa bağlantıları altyapınızın geri kalanını yönettiğiniz gibi yönetmenizi sağlar: bildirimsel olarak, sürüm kontrolünde, plan / apply semantiği ve sapma (drift) tespitiyle.
Sağlayıcı, herkese açık REST API’nin üzerinde ince bir bağdaştırıcıdır. elido_link ile ifade edebildiğiniz her şeyi SDK ile ya da api-core’a bir curl ile de ifade edebilirsiniz; Terraform yalnızca bunun üzerine kararlı bir yaşam döngüsü sözleşmesi ekler.
Ne zaman kullanılır
- Pazarlama yönlendirmeleri altyapınızla birlikte durur. Cloudflare DNS, S3 açılış sayfası, CloudFront dağıtımı ve açılış sayfasına işaret eden kısa bağlantı aynı Terraform modülünde yaşar. Açılış sayfasını silerseniz yönlendirme de onunla gider.
- Şablondan toplu kampanya bağlantıları. Kanallar × bölgeler üzerinde bir
for_each, tek birterraform applyile tutarlı etiketlenmiş onlarca bağlantı üretir. - Çok kiracılı (multi-tenant) onboarding. Kiracıları Terraform ile hazırlıyorsanız modüle bir
elido_linkkaynağı ekleyin; her kiracı ilk günden markalı yönlendirmelerine sahip olur.
Tek ihtiyacınız “bir betikten bir bağlantı oluşturmak” ise Go SDK’ya ya da bir curl’e başvurun. Terraform, bir yaşam döngüsünün yönetilmesini istediğiniz durumlar içindir.
Durum
v0.1.0 MVP, kaynaktan derlenir (bkz. Kurulum). Bugünkü yüzey:
| Tür | Ad | Uç nokta |
|---|---|---|
| Kaynak | elido_link | POST /v1/workspaces/{id}/links (+ PATCH / DELETE) |
| Kaynak | elido_custom_domain | alan adları API’si üzerinden oluştur / sil / içe aktar |
| Veri kaynağı | elido_workspace | GET /v1/workspaces/{id} |
| Veri kaynağı | elido_custom_domain | GET /v1/workspaces/{id}/domains (yerelde filtrelenir) |
elido_custom_domain alan adını kaydeder ve varsayılan olarak DNS doğrulaması geçene kadar bekler (wait_for_verified, verify_timeout, varsayılan 10m). Zaman aşımında verify_token döndürür; böylece eksik TXT kaydını yayınlayabilirsiniz. <workspace_id>:<domain_id> ile içe aktarın.
Planlandı.
elido_folderveelido_api_keykaynakları henüz sağlayıcıda yok. Sağlayıcı Terraform Registry’de yayınlanmamıştır ve kararlı bir sürümü yoktur. Ertelenen işlerin tam listesi ADR-0034’tedir.
Kurulum
Sağlayıcı henüz Terraform Registry’de yayınlanmadı. Yayınlanana kadar dev_overrides ile kurun:
git clone https://github.com/elidoapp/elido.git
cd elido/tools/terraform-provider-elido
make install-localArdından ~/.terraformrc dosyasına bir dev_overrides bloğu ekleyin:
provider_installation {
dev_overrides {
"elidoapp/elido" = "/Users/<you>/.terraform.d/plugins/elidoapp/elido"
}
direct {}
}dev_overrides altında terraform init gerekmez; plan ve apply ikili dosyayı doğrudan çözümler.
Yapılandırma
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_...| Öznitelik | Ortam değişkeni yedeği | Varsayılan |
|---|---|---|
api_url | ELIDO_API_URL | https://api.elido.app |
api_token | ELIDO_API_TOKEN | zorunlu |
Kendi barındırdığınız Elido için api_url’yi kendi api-core’unuza yöneltin. Token’lar /dashboard/settings/api-keys altında oluşturulur.
İlk bağlantınız
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 applySağlayıcı durumu sayısal bağlantı id’siyle tutar; bu yüzden Terraform kaynak etiketini yeniden adlandırmak veya slug’ı değiştirmek yeniden oluşturmayı zorlamaz (bir PATCH gönderir). workspace_id veya domain_id değişikliği ise yeniden oluşturmayı zorlar (bağlantı farklı bir edge rotasına ait olur).
Toplu bağlantılar
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 bağlantı, tek bir apply. Bloğu silip terraform apply çalıştırırsanız hepsi tek bir işlemde kaldırılır.
Mevcut bağlantıları içe aktarma
Terraform yönetimi altına almak istediğiniz bağlantılar zaten var mı? <workspace_id>:<link_id> biçimini kullanın:
terraform import elido_link.spring_campaign 42:7Sonraki bir terraform plan, canlı bağlantı ile HCL’niz arasındaki sapmayı gösterir; HCL’yi eşleşecek şekilde güncelleyerek ya da apply’ın HCL durumunuzu API’ye itmesine izin vererek birleştirin.
Başvuru
Kaynak: elido_link
| Öznitelik | Tür | Zorunlu | Notlar |
|---|---|---|---|
workspace_id | number | evet | Değişirse yeniden oluşturmayı zorlar. |
domain_id | number | evet | Değişirse yeniden oluşturmayı zorlar. |
slug | string | hayır | Boşsa otomatik üretilir. |
destination_url | string | evet | |
title | string | hayır | |
tags | list | hayır | Plan farkında sıra önemlidir. |
redirect_status | number | hayır | 301 / 302 / 307 / 308. Varsayılan 302. |
show_splash | bool | hayır | |
status | string | hayır | active, paused, archived. Varsayılan active. |
id | string | hesaplanan | Sayısal kimlik; TF kararlılığı için dize olarak biçimlendirilir. |
created_at | string | hesaplanan | RFC3339. |
updated_at | string | hesaplanan | RFC3339. |
Veri kaynağı: elido_custom_domain
Bir çalışma alanı içinde ana bilgisayar adına göre özel bir yönlendirme alan adı arayın. Sonuçtaki id’yi elido_link kaynaklarında domain_id olarak kullanın.
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"
}| Öznitelik | Tür | Zorunlu | Notlar |
|---|---|---|---|
workspace_id | number | evet | Alan adına sahip çalışma alanı. |
hostname | string | evet | FQDN; joker karakterler *. önekini korur. |
id | number | hesaplanan | elido_link.domain_id’ye iletin. |
status | string | hesaplanan | pending, verified, active, failed. |
is_wildcard | bool | hesaplanan | |
verify_token | string | hesaplanan | Hassas. Doğrulamadan sonra boştur. |
created_at | string | hesaplanan | |
verified_at | string | hesaplanan | |
failed_at | string | hesaplanan | |
fail_reason | string | hesaplanan |
Veri kaynağı: elido_workspace
| Öznitelik | Tür | Zorunlu | Notlar |
|---|---|---|---|
id | number | evet | Arama anahtarı. |
name | string | hesaplanan | |
slug | string | hesaplanan | |
plan_tier | string | hesaplanan | free, paid, business. |
created_at | string | hesaplanan | |
updated_at | string | hesaplanan |
Sorunları nereye bildirmeli
Hatalar, şema eksikleri veya “X kaynağını istiyorum” talepleri için github.com/elidoapp/elido adresinde area:terraform etiketiyle bir issue açın.