Skip to content

Getting Started

Tharanga edited this page Jun 2, 2018 · 4 revisions

Contents

Getting Started

Install Docker

  • If you have already setup docker on your environment ,skip this step.
  • Install Docker

Getting Binaries

For Linux Users
  • Download binaries from here. Save and extract it into preferred location.
  • After extract, you can see quebic-mgr and quebic cli inside that dir.
For Windows Users
  • Install golang into your environment.
  • Get govendor tool.
  • Run govendor fetch. This will download all the required dependencies for quebic.
  • Run for build quebic-mgr go install quebic-faas/quebic-faas-mgr
  • Run for build quebic cli go install quebic-faas/quebic-faas-cli
  • Congrats !!! Now you can find your binaries from $GOPATH/bin dir.

Run quebic-manager

  • Jump into quebic binaries location. Then run this quebic-mgr
  • You can use quebic cli or quebic-mgr-dashboard ui to communicate with quebic-manager.
  • By default quebic-mgr-dashboard ui is running localhost:8000

Functions

Java Runtime

Programming Model
RequestHandler<Request, Response>
  • RequestHandler is an interface which comes with quebic-runtime-java library. You can add your logic inside it's handle() method.
  • The Request Type and Response Type can be any Primitive data type or Object.
public class HelloFunction implements RequestHandler<Request, Response>{
 
 public void handle(Request request, CallBack<Response> callback, Context context) {
	 callback.success(new Response(1, "reply success"));
 }
 
}
Context
  • Context have these methods.
BaseEvent baseEvent(); // return event details comes into this function
Messenger messenger(); // return messenger instance
Logger logger(); // return logger instance
CallBack
  • CallBack provides way to reply.
callback.success(); //reply 200 status code with empty data
callback.success("reply success"); //reply 200 status code with data
callback.success(201, "reply success"); //reply 201 status code with data

callBack.failure("Error occurred"); //reply 500 status code with err-data
callBack.failure(401, "Error occurred"); //reply 401 status code with error-data
Messenger
  • Messenger provides way to publish events.
  • void publish(String eventID, Object eventPayload, MessageHandler successHandler,ErrorHandler errorHandler,int timeout)throws MessengerException;
context.messenger().publish("users.UserValidate", user, s->{
  user.setId(UUID.randomUUID().toString());
  callBack.success(201, user);
}, e->{
  callBack.failure(e.statuscode(), e.error());
}, 1000 * 8);
Logger
  • Logger provides way to attach logs for particular request context. We will discuss more about this logger in later section.
context.logger().info("log info");
context.logger().error("log error");
context.logger().warn("log warn");
Create .jar artifact
  • Create new maven project.
  • Add this dependency and repository into .pom file.
<dependency>
   <groupId>com.quebic.faas.runtime</groupId>
   <artifactId>quebic-faas-runtime-java</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</dependency>

<repositories>
   <repository>
    <id>quebic-runtime-java-mvn-repo</id>
    <url>https://raw.github.com/quebic-source/quebic-runtime-java/mvn-repo/</url>
    <snapshots>
     <enabled>true</enabled>
     <updatePolicy>always</updatePolicy>
    </snapshots>
   </repository>
</repositories>
  • Run mvn clean package
Deployment Spec
  • Deployment .yml spec file by describing how you want to deploy your functions into quebic. This is code snippet for deployment spec
function:
 name: hello-function # function name 
 source: /functions/hello-function.jar # jar artifact location
 handler: com.quebicfaas.examples.HelloFunction # request handler java class
 runtime: java # function runtime
 events: # function going to listen these events
   - users.UserCreate
   - users.UserUpdate

route:
 requestMethod: POST
 url: /users
 requestMapping:
   - eventAttribute: eID
     requestAttribute: id
   ...

NodeJS Runtime

Programming Model
RequestHandler
  • Write your logic inside the handler.
exports.validationHandler = function(payload, context, callback){
    
    if(validateUser(payload)){
        
        callback(null, true, 200);

    }else{

        callback(new Error('Not a valid e-mail address'), null, 400);

    }

}
CallBack
  • CallBack provides way to reply.
callback(); //reply 200 status code with empty data
callback(null, "success");  //reply 200 status code with data
callback(null, "success", 201);  //reply 201 status code with data
callback(error); //reply 500 status code with with error-data
callback(error, null, 401); //reply 401 status code with with error-data 
Deployment Spec
  • Deployment .yml spec file by describing how you want to deploy your functions into quebic.
  • Package your whole nodejs project dir into .tar file. Then set your .tar file location into source field in deployment spec.
  • If the handler file app.js then handler file needs to set like this app.helloHandler
  • If you are working on single javascript file. Then just set your .js file location into source field. No need to package.
 function:
   name: hello-function # function name 
   source: /functions/hello-function.tar # tar package location
   handler: app.helloHandler # request handler 
   runtime: nodejs # function runtime
   replicas: 2 # replicas count
   events: # function going to listen these events
     - users.UserValidate
   ...

Manage your functions with quebic cli

Create function
  • quebic function create --file [deployment spec file]
Update function
  • quebic function update --file [deployment spec file]
Upgrade / Downgrade function
  • quebic function deploy --name [function name] --version [version]
Delete function
  • quebic function delete --name [function name]
List all functions
  • quebic function ls
Inspect function details
  • quebic function inspect --name [function name]

Routing

  • You can create routing endpoint to fire events from apigateway.
Routing Spec
  • Routing .yml spec is used to describe how it behave when invoke it.
name: users_route # route name just for identify
requestMethod: POST 
url: /users
async: true # enable asynchronous invocation
successResponseStatus: 201 # default response http status code
event: users.UserCreate # event going to send
requestMapping:
  - eventAttribute: eID # attribute name which function going to access in event's payload
    requestAttribute: id # attribute name which come in http request
  - eventAttribute: eName
    requestAttribute: name
headerMapping:
  - eventAttribute: auth # attribute name which function going to access in event's payload
    headerAttribute: x-token # attribute name which come in http header
headersToPass: # headers going to pass with event
  - Authorization
  - Private-Token

Manage Routes with quebic cli

Create Route
  • quebic route create --file [route spec file]
Update Route
  • quebic route update --file [route spec file]
List all Routes
  • quebic route ls
Inspect Route details
  • quebic route inspect --name [route name]

Asynchronous invocation from API Gateway

  • Quebic provides way to invoke function Asynchronous way from API Gateway.
  • After client send his request through the apigateway, He immediately gets a reference id (request-id) to track the request.
  • Then client can check the request by using that request-id from request-tracker endpoint of API Gateway, If function already completed the task client will get the result of request, otherwise he will get request-still-processing message.
<api-gateway>/request-tracker/{request-id}

Logs

  • Quebic provides way to access function-container's native logs by using quebic cli.
  • quebic function logs --name [function name]
  • Instead of accessing native logs quebic also provides way to attach logs for particular request context.
context.logger().info("log info");
  • You can inspect these logs by using cli
  • quebic request-tracker logs --request-id [request id]

Configurations

Quebic manager configurations

  • Quebic manager config file is located at $HOME/.quebic-faas/manager-config.yml
  • Also you can pass arguments to the quebic manager in runtime.
  • Run quebic-mgr -h to list down all available commands.

Quebic CLI configurations

  • Quebic cli config file is located at $HOME/.quebic-faas/cli-config.yml
  • Also you can pass arguments to the quebic cli in runtime.
  • Run quebic -h to list down all available commands.

Clone this wiki locally