Demo

Event State

Event State is an extension of Amazon State Language. This demonstrates how an event triggers function in Event State.

Start FaaS Shell in Docker

$ docker run -d -p 5984:5984 apache/couchdb

$ make -e docker_image_prefix=nao16t run

$ FAASSHELL_APIHOST=http://127.0.0.1:8080

$ DEMO=ec29e90c-188d-11e8-bb72-00163ec1cd01:0b82fe63b6bd450519ade02c3cb8f77ee581f25a810db28f3910e6cdd9d041bf

Register state machine

$ curl -ksX PUT ${FAASSHELL_APIHOST}/statemachine/event_state.json?overwrite=true \
  -H 'Content-Type: application/json' -d @samples/common/asl/event_state.json -u $DEMO
{
  "asl": {
    "Comment":"A Hello World example of the Amazon States Language using an AWS Lambda function",
    "StartAt":"HelloWorld",
    "States": {
      "HelloWorld": {
        "End":true,
        "Resource":"frn::states:::event:test",
        "Type":"Event"
      }
    }
  },
  "dsl":"fsm([event('HelloWorld',\"frn::states:::event:test\",[])])",
  "name":"event_state.json",
  "namespace":"demo",
  "output":"ok"
}

Start statemachine

Start statemacine in background.

Notice that the “HelloWorld” state has the event type resource as “Resource”:”frn::states:::event:test”.

$ curl -ksX POST ${FAASSHELL_APIHOST}/statemachine/event_state.json?blocking=false \
  -H 'Content-Type: application/json' -d '{"input": {"name": "Event"}}' -u $DEMO
{
  "asl": {
    "Comment":"A Hello World example of the Amazon States Language using an AWS Lambda function",
    "StartAt":"HelloWorld",
    "States": {
      "HelloWorld": {
        "End":true,
        "Resource":"frn::states:::event:test",
        "Type":"Event"
      }
    }
  },
  "dsl":"fsm([event('HelloWorld',\"frn::states:::event:test\",[])])",
  "input": {"name":"Event"},
  "name":"event_state.json",
  "namespace":"demo",
  "output": {"execution_id":"043d464c-4de5-11e8-9392-00163e8c34b9"}
}

Send evnet

Send the event “frn::states:::event:test” to the statemachine with the parameter ‘{“action”:”frn:wsk:functions:::function:hello”}’.

Then the statemachine invokes the function “frn:wsk:functions:::function:hello” with the parameter ‘{“name”: “Event”}’.

$ curl -ksX POST ${FAASSHELL_APIHOST}/trigger/frn::states:::event:test \
  -H 'Content-Type: application/json' -d '{"action":"frn:wsk:functions:::function:hello"}' -u $DEMO
{}

Get result

$ curl -ksX GET ${FAASSHELL_APIHOST}/executions/043d464c-4de5-11e8-9392-00163e8c34b9 -u $DEMO
{
  "end":1525250736.5557952,
  "execution_id":"043d464c-4de5-11e8-9392-00163e8c34b9",
  "hostname":"bluemix.lxd",
  "namespace":"demo",
  "result": {"input": {"name":"Event"}, "output": {"payload":"Hello, Event!"}},
  "start":1525250664.884613,
  "statemachine":"event_state.json"
}