-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 4b889ae
Showing
10 changed files
with
563 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
node_modules | ||
.idea | ||
**/node_modules | ||
**/.serverless |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
MIT License | ||
|
||
Copyright (c) 2022 Shilo Magen | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# Get in line - renewing the passport | ||
<img src="docs/HL-architecture.png"> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
node_modules | ||
.serverless |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
<!-- | ||
title: 'AWS Node Scheduled Cron example in NodeJS' | ||
description: 'This is an example of creating a function that runs as a cron job using the serverless ''schedule'' event.' | ||
layout: Doc | ||
framework: v3 | ||
platform: AWS | ||
language: nodeJS | ||
priority: 1 | ||
authorLink: 'https://github.com/0dj0bz' | ||
authorName: 'Rob Abbott' | ||
authorAvatar: 'https://avatars3.githubusercontent.com/u/5679763?v=4&s=140' | ||
--> | ||
|
||
# Serverless Framework Node Scheduled Cron on AWS | ||
|
||
This template demonstrates how to develop and deploy a simple cron-like service running on AWS Lambda using the traditional Serverless Framework. | ||
|
||
## Schedule event type | ||
|
||
This examples defines two functions, `cron` and `secondCron`, both of which are triggered by an event of `schedule` type, which is used for configuring functions to be executed at specific time or in specific intervals. For detailed information about `schedule` event, please refer to corresponding section of Serverless [docs](https://serverless.com/framework/docs/providers/aws/events/schedule/). | ||
|
||
When defining `schedule` events, we need to use `rate` or `cron` expression syntax. | ||
|
||
### Rate expressions syntax | ||
|
||
```pseudo | ||
rate(value unit) | ||
``` | ||
|
||
`value` - A positive number | ||
|
||
`unit` - The unit of time. ( minute | minutes | hour | hours | day | days ) | ||
|
||
In below example, we use `rate` syntax to define `schedule` event that will trigger our `rateHandler` function every minute | ||
|
||
```yml | ||
functions: | ||
rateHandler: | ||
handler: handler.run | ||
events: | ||
- schedule: rate(1 minute) | ||
``` | ||
Detailed information about rate expressions is available in official [AWS docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#RateExpressions). | ||
### Cron expressions syntax | ||
```pseudo | ||
cron(Minutes Hours Day-of-month Month Day-of-week Year) | ||
``` | ||
|
||
All fields are required and time zone is UTC only. | ||
|
||
| Field | Values | Wildcards | | ||
| ------------- |:--------------:|:-------------:| | ||
| Minutes | 0-59 | , - * / | | ||
| Hours | 0-23 | , - * / | | ||
| Day-of-month | 1-31 | , - * ? / L W | | ||
| Month | 1-12 or JAN-DEC| , - * / | | ||
| Day-of-week | 1-7 or SUN-SAT | , - * ? / L # | | ||
| Year | 192199 | , - * / | | ||
|
||
In below example, we use `cron` syntax to define `schedule` event that will trigger our `cronHandler` function every second minute every Monday through Friday | ||
|
||
```yml | ||
functions: | ||
cronHandler: | ||
handler: handler.run | ||
events: | ||
- schedule: cron(0/2 * ? * MON-FRI *) | ||
``` | ||
Detailed information about cron expressions in available in official [AWS docs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions). | ||
## Usage | ||
### Deployment | ||
This example is made to work with the Serverless Framework dashboard, which includes advanced features such as CI/CD, monitoring, metrics, etc. | ||
In order to deploy with dashboard, you need to first login with: | ||
``` | ||
serverless login | ||
``` | ||
|
||
and then perform deployment with: | ||
|
||
``` | ||
serverless deploy | ||
``` | ||
|
||
After running deploy, you should see output similar to: | ||
|
||
```bash | ||
Deploying aws-node-scheduled-cron-project to stage dev (us-east-1) | ||
|
||
✔ Service deployed to stack aws-node-scheduled-cron-project-dev (205s) | ||
|
||
functions: | ||
rateHandler: aws-node-scheduled-cron-project-dev-rateHandler (2.9 kB) | ||
cronHandler: aws-node-scheduled-cron-project-dev-cronHandler (2.9 kB) | ||
``` | ||
|
||
There is no additional step required. Your defined schedules becomes active right away after deployment. | ||
|
||
### Local invocation | ||
|
||
In order to test out your functions locally, you can invoke them with the following command: | ||
|
||
``` | ||
serverless invoke local --function rateHandler | ||
``` | ||
|
||
After invocation, you should see output similar to: | ||
|
||
```bash | ||
Your cron function "aws-node-scheduled-cron-dev-rateHandler" ran at Fri Mar 05 2021 15:14:39 GMT+0100 (Central European Standard Time) | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
'use strict'; | ||
|
||
export const run = async (event, context) => { | ||
const time = new Date(); | ||
console.log(`Your cron function "${context.functionName}" ran at ${time}`); | ||
}; |
Oops, something went wrong.