Docs Menu
Docs Home
/ /
Servicios de aplicaciones Atlas

Activadores programados

Los activadores programados permiten ejecutar la lógica del servidor según un horario definido por usted. Puede usarlos para realizar tareas periódicas, como actualizar un documento cada minuto, generar un informe nocturno o enviar un boletín informativo semanal automatizado por correo electrónico.

Para crear un activador programado en la interfaz de usuario de Atlas App Services:

  1. Haga clic Triggers bajo Build en el menú de navegación de la izquierda.

  2. Haga clic en Create a Trigger para abrir la página de configuración del disparador.

  3. Seleccione Scheduled para Trigger Type.

Creación de un disparador en la interfaz de usuario de App Services.
haga clic para ampliar

Para crear un disparador programado con la CLI de App Services:

  1. Agregue un archivo de configuración de disparador programado al triggers subdirectorio de un directorio de aplicación local.

    Nota

    No puedes crear un activador que se ejecute en un cronograma Basic usando App Services CLI. Todas las configuraciones de activador programado importados deben especificar una expresión CRON.

    Los archivos de configuración de disparadores programados tienen el siguiente formato:

    /triggers/<triggers name>.json
    {
    "type": "SCHEDULED",
    "name": "<Trigger Name>",
    "function_name": "<Trigger Function Name>",
    "config": {
    "schedule": "<CRON expression>"
    },
    "disabled": <boolean>
    }
  2. Implemente el activador:

    appservices push

Los activadores programados tienen las siguientes opciones de configuración:

Campo
Descripción
Trigger Type
type: <string>

Seleccione Scheduled.

Schedule Type
config.schedule: <string>

Obligatorio. Puede seleccionar Basic o Advanced. Una programación básica ejecuta el disparador periódicamente según el intervalo que configure, como "cada cinco minutos" o "todos los lunes".

Una programación avanzada ejecuta el disparador según la expresión CRON personalizada que usted defina.

Skip Events on Re-Enable
skip_catchup_event: <boolean>

Deshabilitado por defecto. Si está habilitado, no se procesarán los eventos de cambio que se hayan producido mientras este disparador estaba deshabilitado.

Event Type
function_name: <string>

En la sección, elige la Event Type acción que se realiza cuando se activa el disparador. Puedes elegir entre ejecutar una función o usar AWS EventBridge.

Nota

Un activador programado no pasa ningún argumento a su Función vinculada.

Trigger Name
name: <string>

El nombre del disparador.

Las expresiones CRON son cadenas definidas por el usuario que utilizan el cron estándar.Sintaxis de trabajo para definir cuándo debe ejecutarse un disparador programado. App Services ejecuta expresiones CRON de disparador según la hora UTC. Cuando todos los campos de una expresión CRON coinciden con la fecha y hora actuales, App Services activa el disparador asociado a la expresión.

Las expresiones CRON son cadenas compuestas por cinco campos delimitados por espacios. Cada campo define una parte detallada de la programación en la que se ejecuta su disparador asociado:

* * * * *
│ │ │ │ └── weekday...........[0 (SUN) - 6 (SAT)]
│ │ │ └──── month.............[1 (JAN) - 12 (DEC)]
│ │ └────── dayOfMonth........[1 - 31]
│ └──────── hour..............[0 - 23]
└────────── minute............[0 - 59]
Campo
Valid Values
Descripción

minute

[0 - 59]

Representa uno o más minutos dentro de una hora.

Ejemplo

Si el campo minute de una expresión CRON tiene un valor de 10, el campo coincide con cualquier hora diez minutos después de la hora (por ejemplo, 9:10 AM).

hour

[0 - 23]

Representa una o más horas dentro de un día en un reloj de 24horas.

Ejemplo

Si el campo hour de una expresión CRON tiene un valor de 15, el campo coincide con cualquier momento entre 3:00 PM y 3:59 PM.

dayOfMonth

[1 - 31]

Representa uno o más días dentro de un mes.

Ejemplo

Si el campo dayOfMonth de una expresión CRON tiene un valor de 3, el campo coincide con cualquier hora del tercer día del mes.

month

1 (JAN) 7 (JUL)
2 (FEB) 8 (AUG)
3 (MAR) 9 (SEP)
4 (APR) 10 (OCT)
5 (MAY) 11 (NOV)
6 (JUN) 12 (DEC)

Representa uno o más meses dentro de un año.

Un mes se puede representar mediante un número (por ejemplo, 2 para febrero) o una cadena de tres letras (por ejemplo, APR para abril).

Ejemplo

Si el campo month de una expresión CRON tiene un valor de 9, el campo coincide con cualquier momento del mes de septiembre.

weekday

0 (SUN)
1 (MON)
2 (TUE)
3 (WED)
4 (THU)
5 (FRI)
6 (SAT)

Representa uno o más días dentro de una semana.

Un día de la semana se puede representar mediante un número (por ejemplo, 2 para un martes) o una cadena de tres letras (por ejemplo, THU para un jueves).

Ejemplo

Si el campo weekday de una expresión CRON tiene un valor de 3, el campo coincide con cualquier hora del miércoles.

Cada campo de una expresión CRON puede contener un valor específico o una expresión que evalúa un conjunto de valores. La siguiente tabla describe los valores de campo y las expresiones válidos:

Tipo de expresión
Descripción
All Values
(*)

Coincide con todos los valores de campo posibles.

Disponible en todos los campos de expresión.

Ejemplo

La siguiente expresión CRON programa un disparador para que se ejecute una vez cada minuto de cada día:

* * * * *
Specific Value
(<Value>)

Coincide con un valor de campo específico. Para campos distintos de weekday y month, este valor siempre será un entero. Un campo weekday o month puede ser un entero o una cadena de tres letras (p. ej., TUE o AUG).

Disponible en todos los campos de expresión.

Ejemplo

La siguiente expresión CRON programa un disparador para que se ejecute una vez al día a las 11:00 AM UTC:

0 11 * * *
List of Values
(<Expression1>,<Expression2>,...)

Coincide con una lista de dos o más expresiones de campo o valores específicos.

Disponible en todos los campos de expresión.

Ejemplo

La siguiente expresión CRON programa un disparador para que se ejecute una vez al día durante enero, marzo y julio a las 11:00 AM UTC:

0 11 * 1,3,7 *
Range of Values
(<Start Value>-<End Value>)

Coincide con un rango continuo de valores de campo entre dos valores de campo específicos inclusive.

Disponible en todos los campos de expresión.

Ejemplo

La siguiente expresión CRON programa un disparador para que se ejecute una vez al día desde el 1de enero hasta fines de abril a las 11:00 AM UTC:

0 11 * 1-4 *
Modular Time Step
(<Field Expression>/<Step Value>)

Coincide con cualquier momento en el que el valor del paso divide de manera uniforme el valor del campo sin resto (es decir, cuando Value % Step == 0).

Disponible en los campos de expresión minute y hour.

Ejemplo

La siguiente expresión CRON programa un disparador para que se ejecute en los minutos 0, 25y 50de cada hora:

*/25 * * * *

Una tienda online desea generar un informe diario de todas las ventas del día anterior. Registra todos los pedidos de la colección store.orders como documentos similares a los siguientes:

{
_id: ObjectId("59cf1860a95168b8f685e378"),
customerId: ObjectId("59cf17e1a95168b8f685e377"),
orderDate: ISODate("2018-06-26T16:20:42.313Z"),
shipDate: ISODate("2018-06-27T08:20:23.311Z"),
orderContents: [
{ qty: 1, name: "Earl Grey Tea Bags - 100ct", price: Decimal128("10.99") }
],
shippingLocation: [
{ location: "Memphis", time: ISODate("2018-06-27T18:22:33.243Z") },
]
}

Para generar el informe diario, la tienda crea un activador programado que se activa todos los días a las 7:00 AM UTC. Cuando se activa el activador, llama a su Atlas Function vinculada, generateDailyReport, que ejecuta una query de agregación en la colección store.orders para generar el informe. La función luego almacena el resultado de la agregación en la colección store.reports.

Ejemplo de interfaz de usuario que configura el disparador
Configuración del disparador
{
"type": "SCHEDULED",
"name": "reportDailyOrders",
"function_name": "generateDailyReport",
"config": {
"schedule": "0 7 * * *"
},
"disabled": false
}
generateDailyReport
exports = function() {
// Instantiate MongoDB collection handles
const mongodb = context.services.get("mongodb-atlas");
const orders = mongodb.db("store").collection("orders");
const reports = mongodb.db("store").collection("reports");
// Generate the daily report
return orders.aggregate([
// Only report on orders placed since yesterday morning
{ $match: {
orderDate: {
$gte: makeYesterdayMorningDate(),
$lt: makeThisMorningDate()
}
} },
// Add a boolean field that indicates if the order has already shipped
{ $addFields: {
orderHasShipped: {
$cond: {
if: "$shipDate", // if shipDate field exists
then: 1,
else: 0
}
}
} },
// Unwind individual items within each order
{ $unwind: {
path: "$orderContents"
} },
// Calculate summary metrics for yesterday's orders
{ $group: {
_id: "$orderDate",
orderIds: { $addToSet: "$_id" },
numSKUsOrdered: { $sum: 1 },
numItemsOrdered: { $sum: "$orderContents.qty" },
totalSales: { $sum: "$orderContents.price" },
averageOrderSales: { $avg: "$orderContents.price" },
numItemsShipped: { $sum: "$orderHasShipped" },
} },
// Add the total number of orders placed
{ $addFields: {
numOrders: { $size: "$orderIds" }
} }
]).next()
.then(dailyReport => {
reports.insertOne(dailyReport);
})
.catch(err => console.error("Failed to generate report:", err));
};
function makeThisMorningDate() {
return setTimeToMorning(new Date());
}
function makeYesterdayMorningDate() {
const thisMorning = makeThisMorningDate();
const yesterdayMorning = new Date(thisMorning);
yesterdayMorning.setDate(thisMorning.getDate() - 1);
return yesterdayMorning;
}
function setTimeToMorning(date) {
date.setHours(7);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
return date;
}

Usa la API de consulta con la expresión $match para reducir la cantidad de documentos que tu función examina. Esto ayuda a mejorar el rendimiento de tu función y a no alcanzar los límites de memoria.

Consulta la sección de Ejemplos para obtener un disparador programado que utiliza una expresión $match.

Para obtener ejemplos adicionales de activadores integrados en una aplicación de servicios de aplicaciones, consulte los activadores de ejemplo en Github.

Next

¿Qué son los servicios de aplicación Atlas?

En esta página