Giter Site home page Giter Site logo

ibm / ibm-cloud-functions-scheduled-tasks Goto Github PK

View Code? Open in Web Editor NEW
3.0 7.0 5.0 65 KB

IBM Cloud Functions building block - Scheduled Tasks - This project provides a starting point for cron or batch jobs with IBM Cloud Functions powered by Apache OpenWhisk.

License: Apache License 2.0

openwhisk serverless bluemix ibm-developer-technology-cloud openwhisk-building-block openwhisk-getting-started ibm-cloud-functions

ibm-cloud-functions-scheduled-tasks's Introduction

Triggering IBM Cloud Functions with scheduled tasks

Set up scheduled tasks, like a cron job or batch job, with IBM Cloud Functions powered by Apache OpenWhisk. This tutorial should take about 5 minutes to complete. After this, move on to more complex serverless applications such as those tagged openwhisk-hands-on-demo.

Sample Architecture

If you're not familiar with the OpenWhisk programming model try the action, trigger, and rule sample first. You'll need a Bluemix account and the latest OpenWhisk command line tool.

This example shows how to create an action that runs when invoked by a cron-style trigger. You can learn about other types of alarm triggers in the Cloud Functions documentation.

  1. Define and test the action
  2. Create create the cron-style trigger
  3. Map the trigger to the action
  4. Clean up

1. Define and test the action

This simple JavaScript function (called an action in OpenWhisk) accepts a params argument and writes information that can be retrieved from the Cloud Functions activation log and/or the IBM Cloud Functions monitoring console. It also returns a JSON object with the current date.

First, open a terminal window to start polling the activation log. The console.log statements in the action will be logged here, which you can stream with the following command:

wsk activation poll

Next, create a file named handler.js. This file will define an action written as a JavaScript function. This function will print out the date to the logs and return the same data from the function.

function main(params) {

  var date = new Date();

  console.log("Invoked at: " + date.toLocaleString());

  return { 
    message: "Invoked at: " + date.toLocaleString() 
  };

}

In another terminal window, upload the action file as a Cloud Function using the following command:

wsk action create handler handler.js

Then invoke it manually. This will echo the resulting JSON message to the current window and log the activation in the other window.

wsk action invoke --blocking handler

2. Create the cron-style trigger

Triggers can be explicitly fired by a user or fired on behalf of a user by an external event source, such as an alarm. This trigger uses the built-in alarm package feed to fire events every 20 seconds. This is specified through cron syntax in the cron parameter.

Create an every-20-seconds with the following command:

wsk trigger create every-20-seconds \
  --feed  /whisk.system/alarms/alarm \
  --param cron '*/20 * * * * *' \

Once it's created, you will see activations firing in the log, but it's not yet mapped to the handler action so it's not very exciting.

3. Map the trigger to the action

Rules provide a mechanism for mapping triggers to actions in a many-to-many relationship. That is, one trigger can fire many independent actions and a single action can be triggered by many different triggers.

This rule shows how the every-20-seconds trigger can be declaratively mapped to the handler.js action. Notice that it's named somewhat abstractly so that if we wanted to use a different trigger - perhaps something that fires every minute instead - we could still keep the same logical name.

Create the rule with the following command:

wsk rule create \
  invoke-periodically \
  every-20-seconds \
  handler

At this point you can check the activation log that you are tailing in the other window to confirm that the action is invoked by the trigger.

4. Clean up

Remove the rule, trigger, action, and package

# Remove rule
wsk rule disable invoke-periodically
wsk rule delete invoke-periodically

# Remove trigger
wsk trigger delete every-20-seconds

# Remove actions
wsk action delete handler

Troubleshooting

Check for errors first in the Cloud Functions activation log. Tail the log on the command line with wsk activation poll or drill into details visually with the Cloud Functions monitoring console.

If the error is not immediately obvious, make sure you have the latest version of the wsk CLI installed. If it's older than a few weeks, download an update.

wsk property get --cliversion

License

Apache 2.0

ibm-cloud-functions-scheduled-tasks's People

Contributors

imgbotapp avatar kant avatar krook avatar stevemart avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

ibm-cloud-functions-scheduled-tasks's Issues

Update to use "interval" feed rather than "alarm"

From Carlos Santana:

#!/bin/bash

TRIGGER_NAME="triggerInterval"
RULE_NAME="ruleInterval"
ACTION_NAME="/whisk.system/utils/date"
EVERY_MINUTES=2
# Stop date 10 minutes from now
STOP_DATE=$(date -u -v +5M +"%Y-%m-%dT%H:%M:%S")
# Clean trigger, rule
bx wsk trigger delete ${TRIGGER_NAME}
bx wsk rule delete ${RULE_NAME} 
# Create trigger
bx wsk trigger create ${TRIGGER_NAME}  \
    --feed /whisk.system/alarms/interval \
    --param minutes ${EVERY_MINUTES} \
    --param stopDate ${STOP_DATE}
# Create rule
bx wsk rule update ${RULE_NAME} ${TRIGGER_NAME} ${ACTION_NAME}
echo "Created trigger ${TRIGGER_NAME} to fire every ${EVERY_MINUTES} minutes up to ${STOP_DATE}"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.