Nota
A partir del 22 de febrero de 2023, Vercele ofrece oficialmente trabajos cron incorporados para activar sus funciones sin servidor y borde. Lea la documentación para obtener más información. Tenga en cuenta que la característica solo es gratuita durante su fase beta, será una característica pagada para la disponibilidad general, lo que significa que la ruta de las acciones de GitHub seguirá siendo relevante para una opción completamente gratuita.
Trabajos cron con acciones de GitHub para las aplicaciones Next.js en Vercel
Dado que la plataforma Vercel está basada en eventos, por lo tanto, no mantiene un servidor en ejecución, realmente no puede programar llamadas en sus rutas API o funciones sin servidor en su aplicación Next.js. Aunque hay muchos servicios preexistentes que brindan trabajos de Cron programados, finalmente decidí que las acciones de GitHub se adaptan mejor a mis necesidades, ya que se integra muy bien con cualquier proyecto que ya vive en Github, además de que es completamente gratuito.
Todas las acciones de GitHub residen en el directorio .github/workflows/ de su repositorio y se escriben en YAML.
.github/workflows/starter.yaml es el flujo de trabajo más básico para ayudarlo a comenzar con las acciones.
Con eventos programados, puede ejecutar tareas a intervalos especificados. Por ejemplo, el flujo de trabajo proporcionado .github/workflows/scheduled.yaml ejecuta una solicitud HTTP con curl cada 60 minutos.
name : Hourly cron job
on :
schedule :
- cron : ' */60 * * * * '
jobs :
cron :
runs-on : ubuntu-latest
steps :
- name : Hourly cron job
run : |
curl --request POST
--url 'https://example.com/api/task'
--header 'Authorization: Bearer ${{ secrets.ACTION_KEY }}'Si tiene problemas para escribir expresiones de horario de Cron, eche un vistazo a Crontab Guru.
Las rutas API y las funciones sin servidor proporcionan una solución directa para construir su API con Next.js en Vercel. Cualquier archivo dentro de las pages/api se asigna a /api/* y se tratará como un punto final API en lugar de una page .
Si está utilizando funciones sin servidor, independientemente del tiempo de ejecución, necesitaría poner los archivos en el directorio /api/ en la raíz de su proyecto.
Para activar de forma segura las rutas API y las funciones sin servidor con acciones de GitHub, debe proporcionar una clave de autorización en el encabezado de su llamada API, que, cuando se ejecuta, se compara con una clave correspondiente en su aplicación Next.js.
Puede lograr esto agregando secretos cifrados a su repositorio de GitHub y pasándolos con el encabezado de su solicitud HTTP, como se muestra en el fragmento de código anterior. Además de agregar la clave a su repositorio de GitHub, también debe acceder a ella dentro de su aplicación Next.js, preferiblemente a través de variables de entorno.
Las pages/api/example.js implementan este flujo de autorización.
export default function handler ( req , res ) {
const { APP_KEY } = process . env ;
const { ACTION_KEY } = req . headers . authorization . split ( " " ) [ 1 ] ;
try {
if ( ACTION_KEY === APP_KEY ) {
// Process the POST request
res . status ( 200 ) . json ( { success : 'true' } )
} else {
res . status ( 401 )
}
} catch ( err ) {
res . status ( 500 )
}
} Use pages/api/example.ts para TypeScript.
import type { NextApiRequest , NextApiResponse } from 'next'
export default function handler ( req : NextApiRequest , res : NextApiResponse ) {
const { APP_KEY } = process . env ;
const { ACTION_KEY } = req . headers . authorization . split ( " " ) [ 1 ] ;
try {
if ( ACTION_KEY === APP_KEY ) {
// Process the POST request
res . status ( 200 ) . json ( { success : 'true' } )
} else {
res . status ( 401 )
}
} catch ( err ) {
res . status ( 500 )
}
}