Please create at least one FaaS account among the following four provides. All of FaaS offers free plan.
Otherwise setup Apache OpenWhisk environment by yourself in either Docker or Kubernetes by refereeing to the steps described at the following sites.
-
AWS Lambda
$ export AWS_ACCESS_KEY_ID=AAAAAAAAAAAAAAAAAAAA $ export AWS_SECRET_ACCESS_KEY=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-
Google Cloud Functions
$ export GOOGLE_APPLICATION_CREDENTIALS=/full/path/to_your_json_credential_file
-
Microsoft Azure Functions
$ export AZURE_HOSTKEY=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC $ export AZURE_TENANT_ID=DDDDDDDD-DDDD-DDDD-DDDD-DDDDDDDDDDDD $ export AZURE_CLIENT_ID=EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE $ export AZURE_CLIENT_SECRET=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-
IBM Cloud Functions / Apache OpenWhisk
$ export WSK_AUTH=GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH $ export WSK_APIHOST=FQDN_OR_IP
WSK_AUTH and WSK_APIHOST should be set the values of AUTH and APIHOST in ~/.wskprops, so you can type the commands below in short.
$ export WSK_$(grep AUTH ~/.wskprops) $ export WSK_$(grep APIHOST ~/.wskprops)
-
For those who are behind Proxy Server
DO NOT forget to set docker bridge or kubernetes endpoint into NO_PROXY.
$ export HTTP_PROXY="http://id:pw@proxy.example.com:8080" $ export HTTPS_PROXY="https://id:pw@proxy.example.com:8433" $ export NO_PROXY="localhost,127.0.0.1,0.0.0.0,172.17.0.1,kubernetes_endpoint"
- Install Source-To-Image (S2I)
- Build builder image
ubuntu@trusty:~/faasshell[master]$ make build_image
- Build application image
ubuntu@trusty:~/faasshell[master]$ make -e docker_image_prefix=YOUR_PREFIX app_image
ubuntu@trusty:~/faasshell[master]$ docker run -d -p 5984:5984 apache/couchdb
ubuntu@trusty:~/faasshell[master]$ make -e docker_image_prefix=YOUR_PREFIX run
ubuntu@trusty:~/faasshell[master]$ FAASSHELL_APIHOST=http://127.0.0.1:8080
ubuntu@trusty:~/faasshell[master]$ curl -ksLX GET ${FAASSHELL_APIHOST}/ -u $DEMO
{"version":"$Id rev.YYYY-MM-DD.COMMITID $"}
docker_image_prefix has to be your Docker Hub image prefix.
ubuntu@trusty:~/faasshell[master]$ kubectl create namespace faasshell
ubuntu@trusty:~/faasshell[master]$ kubectl -n faasshell run couchdb --image=apache/couchdb
ubuntu@trusty:~/faasshell[master]$ kubectl -n faasshell expose deployment couchdb --port=5984
ubuntu@trusty:~/faasshell[master]$ kubectl -n faasshell get pod
NAME READY STATUS RESTARTS AGE
couchdb-69dbdcbb48-jzjz5 1/1 Running 0 1m
In case of proxy environment:
ubuntu@trusty:~/faasshell[master]$ kubectl -n faasshell get service | grep couchdb | awk '{print $3}' 10.101.62.31 ubuntu@trusty:~/faasshell[master]$ export NO_PROXY=$NO_PROXY,10.101.62.31
ubuntu@trusty:~/faasshell[master]$ make -e docker_image_prefix=YOUR_PREFIX deploy
ubuntu@trusty:~/faasshell[master]$ kubectl -n faasshell get pod
NAME READY STATUS RESTARTS AGE
couchdb-69dbdcbb48-jzjz5 1/1 Running 0 15m
faasshell-cb657b84b-sct6x 1/1 Running 0 52s
ubuntu@trusty:~/faasshell[master]$ kubectl -n faasshell describe service faasshell | grep https | grep NodePort| awk '{print $3}' | cut -d'/' -f1
30954
ubuntu@trusty:~/faasshell[master]$ FAASSHELL_APIHOST=https://${cluster_address}:30954
ubuntu@trusty:~/faasshell[master]$ curl -ksLX GET ${FAASSHELL_APIHOST}/ -u $DEMO
{"version":"$Id rev.YYYY-MM-DD.COMMITID $"}
The port number is changed each service deployment, 30954 is just an example.
ubuntu@trusty:~/faasshell[master]$ DEMO=ec29e90c-188d-11e8-bb72-00163ec1cd01:0b82fe63b6bd450519ade02c3cb8f77ee581f25a810db28f3910e6cdd9d041bf
-
AWS Lambda
ubuntu@trusty:~/faasshell[master]$ (cd samples/aws/lambda; zip hello.zip hello.js) ubuntu@trusty:~/faasshell[master]$ aws lambda create-function --region us-east-2 --function-name hello \ --zip-file fileb://samples/aws/lambda/hello.zip \ --role arn:aws:iam::your_id:role/your_role \ --handler hello.handler \ --runtime nodejs6.10
-
Google Cloud Functions
ubuntu@trusty:~/faasshell[master]$ gcloud beta functions deploy hello --trigger-http \ --source=samples/gcp/functions/hello --entry-point=helloWorld
-
Microsoft Azure Functions
ubuntu@trusty:~/faasshell[master]$ (cd samples/azure/functions; zip -r hello.zip .) ubuntu@trusty:~/faasshell[master]$ az functionapp deployment source config-zip \ -g yourResourceGroup -n yourFunctionApp --src samples/azure/functions/hello.zip
-
IBM Cloud Functions / Apache OpenWhisk
ubuntu@trusty:~/faasshell[master]$ wsk action create hello samples/wsk/actions/hello.js -i ok: created action hello
ubuntu@trusty:~/faasshell[master]$ curl -ksLX GET ${FAASSHELL_APIHOST}/faas/ -u $DEMO
[
{
"annotations": [ {"key":"exec", "value":"nodejs:6"} ],
"name":"hello",
"namespace":"demo",
"publish":false,
"version":"0.0.1"
}
]
-
AWS Lambda
ubuntu@trusty:~/faasshell[master]$ export aws_region=XX-YY-Z ubuntu@trusty:~/faasshell[master]$ export aws_account_id=000000000000 ubuntu@trusty:~/faasshell[master]$ envsubst < samples/aws/asl/hello_world_task.json | \ curl -ksX PUT ${FAASSHELL_APIHOST}/statemachine/hello_world_task.json?overwrite=true \ -H 'Content-Type: application/json' -d @/dev/stdin -u $DEMO
-
Google Cloud Functions
ubuntu@trusty:~/faasshell[master]$ export gcp_location_id=XX-YYYYYYYY ubuntu@trusty:~/faasshell[master]$ export gcp_project_id=ZZZZZZZ ubuntu@trusty:~/faasshell[master]$ envsubst < samples/gcp/asl/hello_world_task.json | \ curl -ksX PUT ${FAASSHELL_APIHOST}/statemachine/hello_world_task.json?overwrite=true \ -H 'Content-Type: application/json' -d @/dev/stdin -u $DEMO
-
Microsoft Azure Functions
ubuntu@trusty:~/faasshell[master]$ export azure_webapp_name=ZZZZZZZ ubuntu@trusty:~/faasshell[master]$ envsubst < samples/azure/asl/hello_world_task.json | \ curl -ksX PUT ${FAASSHELL_APIHOST}/statemachine/hello_world_task.json?overwrite=true \ -H 'Content-Type: application/json' -d @/dev/stdin -u $DEMO
-
IBM Cloud Functions / Apache OpenWhisk
ubuntu@trusty:~/faasshell[master]$ curl -ksX PUT ${FAASSHELL_APIHOST}/statemachine/hello_world_task.json?overwrite=true \ -H 'Content-Type: application/json' -d @samples/wsk/asl/hello_world_task.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:wsk:functions:::function:hello", "TimeoutSeconds":5, "Type":"Task" } } }, "dsl":"fsm([task('HelloWorld',\"hello\",[timeout_seconds(10)])])", "name":"hello_world_task.json", "namespace":"demo", "output":"ok" }
ubuntu@trusty:~/faasshell[master]$ curl -ksLX GET ${FAASSHELL_APIHOST}/statemachine/hello_world_task.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:wsk:functions:::function:hello",
"TimeoutSeconds":5,
"Type":"Task"
}
}
},
"dsl":"fsm([task('HelloWorld',\"frn:wsk:functions:::function:hello\",[timeout_seconds(10)])])",
"name":"hello_world_task.json",
"namespace":"demo",
"output":"ok"
}
ubuntu@trusty:~/faasshell[master]$ curl -ksX POST ${FAASSHELL_APIHOST}/statemachine/hello_world_task.json?blocking=true \
-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:wsk:functions:::function:hello",
"TimeoutSeconds":5,
"Type":"Task"
}
}
},
"dsl":"fsm([task('HelloWorld',\"frn:wsk:functions:::function:hello\",[timeout_seconds(10)])])",
"input": {},
"name":"hello_world_task.json",
"namespace":"demo",
"output": {"payload":"Hello, World!"}
}
ubuntu@trusty:~/faasshell[master]$ curl -ksX POST ${FAASSHELL_APIHOST}/statemachine/hello_world_task.json?blocking=true \
-H 'Content-Type: application/json' -d '{"input": {"name": "Curl"}}' -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:wsk:functions:::function:hello",
"TimeoutSeconds":5,
"Type":"Task"
}
}
},
"dsl":"fsm([task('HelloWorld',\"frn:wsk:functions:::function:hello\",[timeout_seconds(10)])])",
"input": {"name":"Curl"},
"name":"hello_world_task.json",
"namespace":"demo",
"output": {"payload":"Hello, Curl!"}
}
ubuntu@trusty:~/faasshell[master]$ curl -ksX PATCH ${FAASSHELL_APIHOST}/statemachine/hello_world_task.json \
-u $DEMO
digraph graph_name {
"Start" -> "HelloWorld" ;
"HelloWorld" -> "End" ;
}
ubuntu@trusty:~/faasshell[master]$ curl -ksX DELETE ${FAASSHELL_APIHOST}/statemachine/hello_world_task.json \
-u $DEMO
{"output":"ok"}
-
AWS Lambda
ubuntu@trusty:~/faasshell[master]$ export aws_region=XX-YY-Z ubuntu@trusty:~/faasshell[master]$ export aws_account_id=000000000000 ubuntu@trusty:~/faasshell[master]$ envsubst < samples/aws/dsl/hello_world_task.dsl | \ curl -ksX PUT ${FAASSHELL_APIHOST}/shell/hello_world_task.dsl?overwrite=true \ -H 'Content-Type: text/plain' -d @/dev/stdin -u $DEMO
-
Google Cloud Functions
ubuntu@trusty:~/faasshell[master]$ export gcp_location_id=XX-YYYYYYYY ubuntu@trusty:~/faasshell[master]$ export gcp_project_id=ZZZZZZZ ubuntu@trusty:~/faasshell[master]$ envsubst < samples/gcp/dsl/hello_world_task.dsl | \ curl -ksX PUT ${FAASSHELL_APIHOST}/shell/hello_world_task.dsl?overwrite=true \ -H 'Content-Type: text/plain' -d @/dev/stdin -u $DEMO
-
Microsoft Azure Functions
ubuntu@trusty:~/faasshell[master]$ export azure_webapp_name=ZZZZZZZ ubuntu@trusty:~/faasshell[master]$ envsubst < samples/azure/dsl/hello_world_task.dsl | \ curl -ksX PUT ${FAASSHELL_APIHOST}/shell/hello_world_task.dsl?overwrite=true \ -H 'Content-Type: text/plain' -d @/dev/stdin -u $DEMO
-
IBM Cloud Functions / Apache OpenWhisk
ubuntu@trusty:~/faasshell[master]$ curl -ksX PUT ${FAASSHELL_APIHOST}/shell/hello_world_task.dsl?overwrite=true \ -H 'Content-Type: text/plain' -d @samples/wsk/dsl/hello_world_task.dsl -u $DEMO { "dsl":"fsm([task('HelloWorld',\"frn:wsk:functions:::function:hello\",[timeout_seconds(10)])]).", "name":"hello_world_task.dsl", "namespace":"demo", "output":"ok" }
ubuntu@trusty:~/faasshell[master]$ curl -ksLX GET ${FAASSHELL_APIHOST}/shell/hello_world_task.dsl \
-u $DEMO
{
"dsl":"fsm([task('HelloWorld',\"frn:wsk:functions:::function:hello\",[timeout_seconds(10)])])",
"name":"hello_world_task.dsl",
"namespace":"demo",
"output":"ok"
}
ubuntu@trusty:~/faasshell[master]$ curl -ksX POST ${FAASSHELL_APIHOST}/shell/hello_world_task.dsl?blocking=true \
-H 'Content-Type: application/json' -d '{"input": {"name":"Shell"}}' -u $DEMO
{
"dsl":"fsm([task('HelloWorld',\"frn:wsk:functions:::function:hello\",[timeout_seconds(10)])]).",
"input": {"name":"Shell"},
"name":"hello_world_task.dsl",
"namespace":"demo",
"output": {"payload":"Hello, Shell!"}
}
ubuntu@trusty:~/faasshell[master]$ curl -ksX DELETE ${FAASSHELL_APIHOST}/shell/hello_world_task.dsl \
-u $DEMO
{"output":"ok"}