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
| Recurso | Descripción |
|---|---|
steadycron_http_job | Llamada HTTPS planificada |
steadycron_heartbeat_monitor | Monitor de ping esperado con URL de ping única |
steadycron_alert_channel | Canal de email, Slack, Discord, webhook o Telegram |
steadycron_alert_rule | Vincula un job a un canal con una condición de activación |
steadycron_tag | Etiqueta key=value para agrupar y filtrar jobs |
steadycron_template_variable | Marcador 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
- Infrastructure as code — enfoque con manifiesto YAML
- Flujo de trabajo IaC — comandos CLI
- API y autenticación — gestión de claves API