Provider de Terraform

Gestionar recursos de SteadyCron con Terraform — declarar jobs HTTP, monitores heartbeat, canales de alerta y reglas de alerta en HCL junto con el resto de la infraestructura.

El provider de Terraform para SteadyCron permite gestionar los cron jobs como parte de la pila de infraestructura — sin manifiestos YAML separados si ya usa Terraform.

Instalación

Añada el provider al bloque required_providers y ejecute terraform init:

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

Autenticación

Cree una clave API en el panel de SteadyCron bajo Ajustes → Claves API. Se requiere una clave de alcance Full para operaciones de escritura (apply); las fuentes de datos funcionan con una clave de solo lectura.

Proporcione la clave mediante una variable de entorno (recomendado para CI):

export STEADYCRON_API_KEY=sc_...

O configúrela en el bloque del provider:

provider "steadycron" {
  api_key = var.steadycron_api_key   # evite codificarla directamente
  # endpoint por defecto: https://api.steadycron.com
  # también puede establecerse mediante STEADYCRON_ENDPOINT
}

Recursos

RecursoDescripción
steadycron_http_jobLlamada HTTPS planificada
steadycron_heartbeat_monitorMonitor de ping esperado con URL de ping única
steadycron_alert_channelCanal de email, Slack, Discord, webhook o Telegram
steadycron_alert_ruleVincula un job a un canal con una condición de activación
steadycron_tagEtiqueta key=value para agrupar y filtrar jobs
steadycron_template_variableMarcador de posición para sustitución en el servidor

Las fuentes de datos (data.steadycron_http_job, data.steadycron_heartbeat_monitor, data.steadycron_tag, data.steadycron_alert_channel) permiten referenciar recursos existentes.

Ejemplo

provider "steadycron" {
  # api_key desde la variable de entorno 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"   # Lunes 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"
}

Importar recursos existentes

Ponga los recursos existentes creados desde el panel o la CLI bajo la gestión de 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>

Después de importar, ejecute terraform plan. Los campos que la API oculta en lectura (secretos de canales de alerta, tokens heartbeat) aparecerán como diferencias — añada sus valores reales a la configuración.

Interoperabilidad con la CLI

Los recursos creados mediante Terraform tienen un manifest_namespace nulo, por lo que nunca son eliminados por steadycron sync --prune. Gestione un recurso con Terraform o con el manifiesto de la CLI, no con ambos — el uso mixto de las dos herramientas para el mismo recurso no está soportado.

Límites de velocidad

La API de SteadyCron permite 120 solicitudes por minuto y por clave. El provider reintenta automáticamente las respuestas 429 Too Many Requests con backoff exponencial (hasta 5 intentos, respetando Retry-After). Si supera los límites con frecuencia, reduzca el paralelismo:

terraform apply -parallelism=5

Enlaces relacionados