Provider Terraform

Gérer les ressources SteadyCron avec Terraform — déclarer les jobs HTTP, moniteurs heartbeat, canaux d'alerte et règles d'alerte en HCL aux côtés du reste de l'infrastructure.

Le provider Terraform SteadyCron permet de gérer les cron jobs dans le cadre de la stack d’infrastructure — sans manifestes YAML séparés si vous utilisez déjà Terraform.

Installation

Ajoutez le provider au bloc required_providers et lancez terraform init :

terraform {
  required_providers {
    steadycron = {
      source  = "steadycron/steadycron"
      version = "1.0.4"
    }
  }
}

Authentification

Créez une clé API dans le tableau de bord SteadyCron sous Paramètres → Clés API. Une clé de portée Full est requise pour les opérations d’écriture (apply) ; les sources de données fonctionnent avec une clé en lecture seule.

Fournissez la clé via une variable d’environnement (recommandé pour la CI) :

export STEADYCRON_API_KEY=sc_...

Ou configurez-la dans le bloc provider :

provider "steadycron" {
  api_key = var.steadycron_api_key   # évitez de la coder en dur
  # endpoint par défaut : https://api.steadycron.com
  # peut aussi être défini via STEADYCRON_ENDPOINT
}

Ressources

RessourceDescription
steadycron_http_jobAppel HTTPS planifié
steadycron_heartbeat_monitorMoniteur de ping attendu avec URL de ping unique
steadycron_alert_channelCanal email, Slack, Discord, webhook ou Telegram
steadycron_alert_ruleRelie un job à un canal avec une condition de déclenchement
steadycron_tagLabel key=value pour regrouper et filtrer les jobs
steadycron_template_variableEspace réservé nommé pour la substitution côté serveur

Les sources de données (data.steadycron_http_job, data.steadycron_heartbeat_monitor, data.steadycron_tag, data.steadycron_alert_channel) permettent de référencer des ressources existantes.

Exemple

provider "steadycron" {
  # api_key depuis la variable d'environnement STEADYCRON_API_KEY
}

resource "steadycron_tag" "env_prod" {
  key   = "env"
  value = "prod"
  color = "green"
}

resource "steadycron_alert_channel" "ops_email" {
  name     = "ops-email"
  kind     = "email"
  email_to = "ops@example.com"
}

resource "steadycron_http_job" "weekly_digest" {
  name   = "weekly-digest"
  method = "POST"
  url    = "https://api.example.com/jobs/digest"

  cron_expression = "0 9 * * 1"   # Lundi 09:00
  timezone        = "Europe/Berlin"
  timeout_seconds = 120
  max_retries     = 2

  headers = {
    Authorization = "Bearer {{digest_token}}"
  }

  tags = [steadycron_tag.env_prod.id]
}

resource "steadycron_alert_rule" "digest_failure" {
  job_id     = steadycron_http_job.weekly_digest.id
  channel_id = steadycron_alert_channel.ops_email.id
  trigger    = "on_failure"
  severity   = "P1"
}

Importer des ressources existantes

Placez les ressources existantes créées via le tableau de bord ou la CLI sous la gestion Terraform :

terraform import steadycron_http_job.example <job_id>
terraform import steadycron_heartbeat_monitor.db_backup <job_id>
terraform import steadycron_alert_channel.ops_email <channel_id>
terraform import steadycron_alert_rule.digest_failure <rule_id>
terraform import steadycron_tag.env_prod <tag_id>
terraform import steadycron_template_variable.digest_token <variable_id>

Après l’import, lancez terraform plan. Les champs que l’API masque en lecture (secrets de canal d’alerte, tokens heartbeat) apparaîtront comme des diffs — ajoutez leurs vraies valeurs à la configuration.

Interopérabilité avec la CLI

Les ressources créées via Terraform ont un manifest_namespace null et ne sont donc jamais supprimées par steadycron sync --prune. Gérez une ressource avec Terraform ou le manifeste CLI, pas les deux — l’utilisation simultanée des deux outils pour la même ressource n’est pas prise en charge.

Limites de débit

L’API SteadyCron autorise 120 requêtes par minute et par clé. Le provider réessaie automatiquement les réponses 429 Too Many Requests avec un backoff exponentiel (jusqu’à 5 essais, en respectant Retry-After). En cas de dépassement régulier, réduisez le parallélisme du provider :

terraform apply -parallelism=5

Liens associés