Menu Docs
Página inicial do Docs
/ /
Serviços Atlas App
/

Gatilhos programados

Nesta página

  • Criar um gatilho programado
  • Configuração
  • Expressões de CRON
  • Sintaxe de Expressão
  • Formatar
  • Valores do Campo
  • Exemplo
  • Otimização de desempenho
  • Exemplos adicionais

Os Trigger programados permitem executar a lógica do lado do servidor em uma programação regular definida por você. Você pode usar triggers programados para realizar trabalho que ocorre de modo periódico, como atualizar um documento a cada minuto, gerando um relatório por noite, enviando uma newsletter semanal por e-mail.

Para criar um trigger agendado na IU do Atlas App Services:

  1. Clique em Triggers em Build no menu de navegação esquerdo.

  2. Clique em Create a Trigger para abrir a página de configuração do trigger.

  3. Selecione Scheduled para o Trigger Type.

Criando um trigger na IU do App Services.
clique para ampliar

Para criar um trigger agendado com o App Services CLI:

  1. Adicione um arquivo de configuração trigger agendado ao subdiretório triggers de um diretório de aplicativo local.

    Observação

    Você não pode criar um Trigger que seja executado em um agendamento Basic usando a CLI do App Services. Todas as configurações de Triggers agendados importados devem especificar uma expressão CRON.

    Os arquivos de configuração do trigger agendado têm o seguinte formato:

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

    appservices push

Os Triggers Agendados têm as seguintes opções de configuração:

Campo
Descrição
Trigger Type
type: <string>
Selecione Scheduled.
Schedule Type
config.schedule: <string>

Obrigatório. Você pode selecionar Basic ou Advanced. Uma agenda Básica executa o Trigger periodicamente com base no intervalo definido, como "a cada cinco minutos" ou "toda segunda-feira".

Uma programação avançada executa o acionador com base na expressão CRON personalizada que você define.

Skip Events on Re-Enable
skip_catchup_event: <boolean>
Desabilitado por padrão. Se habilitado, quaisquer eventos de alteração ocorridos enquanto esse trigger esteve desabilitado não serão processados.
Event Type
function_name: <string>

Na seção Event Type, você escolhe qual ação será executada quando o trigger for acionado. Você pode optar por executar uma função ou usar o AWS EventBridge.

Observação

Um Trigger Agendado não passa nenhum argumento para sua Função vinculada.

Trigger Name
name: <string>
O nome do trigger.

As expressões CRON são cadeias de caracteres definidas pelo usuário que usam a sintaxe de tarefa padrão do cron para definir quando um trigger agendado deve ser executado. o App Services executa expressões Trigger CRON com base na horaUTC . Sempre que todos os campos em uma expressão CRON coincidem com a data e a hora atuais, o App Services aciona o trigger associado à expressão.

Expressões CRON são strings compostas de cinco campos delimitados por espaço. Cada campo define uma parte granular da agenda na qual seu trigger associado é executado:

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

Representa um ou mais minutos em uma hora.

Exemplo

Se o campo minute de uma expressão CRON tiver um valor de 10, o campo corresponderá a qualquer tempo de dez minutos após a hora (por exemplo, 9:10 AM).

hour
[0 - 23]

Representa uma ou mais horas dentro de um dia em um relógio de 24 horas.

Exemplo

Se o campo hour de uma expressão CRON tiver um valor de 15, o campo corresponderá a qualquer tempo entre 3:00 PM e 3:59 PM.

dayOfMonth
[1 - 31]

Representa um ou mais dias em um mês.

Exemplo

Se o campo dayOfMonth de uma expressão CRON tiver um valor de 3, o campo corresponderá a qualquer hora no terceiro dia do mês.

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 um ou mais meses dentro de um ano.

Um mês pode ser representado por um número (por exemplo, 2 para fevereiro) ou uma string de três letras (por exemplo. APR para abril).

Exemplo

Se o campo month de uma expressão CRON tiver um valor de 9, o campo corresponderá a qualquer momento no mês de setembro.

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

Representa um ou mais dias em uma semana.

Um dia da semana pode ser representado por um número (por exemplo, 2 para uma terça-feira) ou uma sequência de três letras (por exemplo, THU para uma quinta-feira).

Exemplo

Se o campo weekday de uma expressão CRON tiver um valor de 3, o campo corresponderá a qualquer hora em uma quarta-feira.

Cada campo em uma expressão CRON pode conter um valor específico ou uma expressão que avalia para um conjunto de valores. A tabela a seguir descreve valores e expressões de campos válidos:

Tipo de Expressão
Descrição
All Values
(*)

Corresponde a todos os valores de campo possíveis.

Disponível em todos os campos de expressão.

Exemplo

A expressão CRON a seguir programa um trigger para ser executado uma vez a cada minuto todos os dias:

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

Corresponde a um valor de campo específico. Para campos diferentes de weekday e month esse valor sempre será um inteiro. Um campo weekday ou month pode ser um inteiro ou uma cadeia de caracteres de três letras (por exemplo, TUE ou AUG).

Disponível em todos os campos de expressão.

Exemplo

A seguinte expressão CRON agenda um trigger para ser executado uma vez por dia às 11h UTC:

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

Corresponde a uma lista de duas ou mais expressões de campo ou valores específicos.

Disponível em todos os campos de expressão.

Exemplo

A expressão CRON seguinte agenda um trigger para ser executado uma vez por dia em janeiro, março e julho às 11h UTC:

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

Corresponde a uma faixa contínua de valores entre campos, incluindo dois valores de campo específicos.

Disponível em todos os campos de expressão.

Exemplo

A expressão CRON a seguir programa um gatilho para ser executado uma vez por dia, de 1º de janeiro até o final de abril, às 11:00 AM UTC:

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

Corresponde a qualquer momento em que o valor da etapa divide uniformemente o valor do campo sem nenhum restante (ou seja, quando Value % Step == 0).

Disponível nos campos de expressão minute e hour.

Exemplo

A expressão CRON a seguir programa um gatilho para ser executado nos 0º, 25º e 50º minutos de cada hora:

*/25 * * * *

Uma loja online deseja gerar um relatório diário de todas as vendas do dia anterior. Ela registra todas as ordens na collection store.orders como documentos que se assemelham ao seguinte:

{
_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 gerar o relatório diário, a loja cria um Trigger agendado que dispara todos os dias às 7:00 AM UTC. Quando o Trigger é acionado, ele chama sua função Atlas Function vinculada, generateDailyReport, que executa uma consulta de agregação na coleção store.orders para gerar o relatório. A Função então armazena o resultado da agregação na coleção store.reports.

Exemplo de IU que configura o trigger
Configuração do trigger
{
"type": "SCHEDULED",
"name": "reportDailyOrders",
"function_name": "generateDailyReport",
"config": {
"schedule": "0 7 * * *"
},
"disabled": false
}
gerarDailyReport
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;
}

Use a API de query com uma expressão $match para reduzir o número de documentos examinados pela Função. Isso ajuda sua função a melhorar o desempenho e não atingir os limites de memória da função.

Consulte a seção Exemplo de um Trigger Agendado usando uma expressão $match.

Para obter exemplos adicionais de Triggers integrados a um aplicativo App Services, confira o exemplo de Triggers no Github.

Voltar

Gatilhos de autenticação